{"record":{"id":"b05a7b083df3a024","repo":"jdx/mise","slug":"sync-paused-resolve-all-conflict-s-before-sharing-resumes","errorCode":null,"errorMessage":"sync paused: resolve all {} conflict(s) before sharing resumes; `mise dot pull --take-remote-all` chooses the repository's version for every conflict at once, and `mise dot status` says whether any path still needs a different fix","messagePattern":"sync paused: resolve all (.+?) conflict\\(s\\) before sharing resumes; `mise dot pull --take-remote-all` chooses the repository's version for every conflict at once, and `mise dot status` says whether any path still needs a different fix","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/sync/apply.rs","lineNumber":353,"sourceCode":"        // succeeded while one is still held -- whatever it decided alongside.\n        // Those decisions are recorded above; naming the rest is what is left.\n        if !blanket_held.is_empty() {\n            if !req.dry_run && !req.automatic {\n                bail!(\n                    \"sync paused: resolve all {count} conflict(s) before sharing resumes; a blanket choice cannot decide them all: {held}. Fix each of those paths, then pull again\",\n                    count = status.conflicts.len(),\n                    held = blanket_held.join(\"; \"),\n                );\n            }\n            // A preview and a background pass both carry on, so this is the\n            // only chance either gets to say why a path went undecided.\n            warn!(\n                \"a blanket choice cannot decide {held}\",\n                held = blanket_held.join(\"; \"),\n            );\n        }\n        if take_remote.is_empty() && keep_local.is_empty() && !req.dry_run && !req.automatic {\n            bail!(\n                \"sync paused: resolve all {} conflict(s) before sharing resumes; `mise dot pull --take-remote-all` chooses the repository's version for every conflict at once, and `mise dot status` says whether any path still needs a different fix\",\n                status.conflicts.len()\n            );\n        }\n        info!(\n            \"sync paused: {} conflict(s) remain; no files applied or published\",\n            status.conflicts.len()\n        );\n        return Ok(ApplyOutcome {\n            held: status.conflicts.len(),\n            ..Default::default()\n        });\n    }\n\n    // Only after all version-bound choices are valid may they replace Git's\n    // conflict objects in the complete tree. Use the committed ciphertext,\n    // never the decrypted comparison objects held by the resolution record.\n    if let Some(tree) = &inventory_tree {","sourceCodeStart":335,"sourceCodeEnd":371,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/history/sync/apply.rs#L335-L371","documentation":"An interactive, non-dry-run `mise dot pull` was run with no path-specific resolution flags while conflicts still exist. Sharing is paused until conflicts are resolved, so the command fails and points to `--take-remote-all` as the blanket resolver and `mise dot status` for inspecting remaining conflicts.","triggerScenarios":"`mise dot pull` with `take_remote` and `keep_local` both empty while `status.conflicts` is non-empty, not a dry run, not an automatic pass — any conflicted path without an explicit or blanket decision reaches this bail.","commonSituations":"User runs plain `mise dot pull` after another machine changed shared dotfiles; a scripted pull lacking resolution flags; conflicts newly introduced by an upstream commit.","solutions":["Decide per-path: `mise dot pull --take-remote <path>` or `--keep-local <path>` (after `mise dot save <path>` if keeping local).","Use `mise dot pull --take-remote-all` to accept the repository's version for every conflict at once.","Inspect `mise dot status` to see each conflict and what fix it needs."],"exampleFix":"before: mise dot pull (sync paused: 2 conflicts) | after: mise dot pull --take-remote-all, or per path: mise dot pull --take-remote ~/.gitconfig","handlingStrategy":"try-catch","validationCode":"mise dot status  # only pull with no flags when no conflicts remain","typeGuard":null,"tryCatchPattern":"mise dot pull || mise dot pull --take-remote-all  # or fail fast in scripts and resolve explicitly","preventionTips":["Always pass a resolution strategy in scripts (e.g. --take-remote-all or per-path flags).","Resolve conflicts promptly after `mise dot status` reports them.","Use `--dry-run` first to preview conflicts before a real pull."],"tags":["sync","conflict-resolution","cli","dotfiles"],"backgroundTag":"conflicting-config-options","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}