{"record":{"id":"f920cb9839904d88","repo":"jdx/mise","slug":"sync-paused-resolve-all-count-conflict-s-before-sharing","errorCode":null,"errorMessage":"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","messagePattern":"sync paused: resolve all (.+?) conflict\\(s\\) before sharing resumes; a blanket choice cannot decide them all: (.+?)\\. Fix each of those paths, then pull again","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/sync/apply.rs","lineNumber":339,"sourceCode":"                }\n            }\n            for pending in &status.pending_applications {\n                if let Some(path) = roots.locate(&pending.branch_path).path() {\n                    table.add_row(vec![\n                        display_path(path),\n                        \"held: sharing paused for the entire setup\".to_string(),\n                        pending.branch_path.clone(),\n                    ]);\n                }\n            }\n            table.print()?;\n        }\n        // A blanket choice promises to decide every conflict, so it has not\n        // 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        }","sourceCodeStart":321,"sourceCodeEnd":357,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/history/sync/apply.rs#L321-L357","documentation":"When a blanket conflict choice is made, it promises to decide every conflict. If some paths were held — typically because their live side is unusable or their local baseline is missing/stale — the non-interactive, non-dry-run pull fails, listing exactly which paths remain undecided. The decisions that did succeed are still recorded; only the pass aborts.","triggerScenarios":"`mise dot pull` (without --dry-run, not in automatic/background mode) with a blanket resolution flag where `blanket_held` is non-empty: held paths include files whose live side could not be read (UnusableLive), or keep-local paths with no saved baseline or unsaved changes.","commonSituations":"A file was replaced by a directory or fifo so the blanket choice cannot read it; keep-local blanket on a machine that never saved some files; a headless run where neither dry-run nor automatic suppression applies.","solutions":["Read the listed held paths from the message and fix each (e.g. `mise dot save <path>` for unsaved or missing baselines, or make the live side a regular file/symlink).","Re-run `mise dot pull` after fixing.","Alternatively resolve the problem paths individually with `--take-remote <path>` instead of a blanket flag."],"exampleFix":"before: mise dot pull --keep-local-all (held: ~/.vimrc has unsaved changes) | after: mise dot save ~/.vimrc && mise dot pull --keep-local-all","handlingStrategy":"try-catch","validationCode":"mise dot status  # confirm every conflict is resolvable (regular file/symlink, saved baseline) before a blanket flag","typeGuard":null,"tryCatchPattern":"mise dot pull --take-remote-all || mise dot status  # on failure, read the held paths from the error and fix each","preventionTips":["Replace irregular files (directories/fifos) at conflicted paths before blanket pulls.","Keep saved baselines current with `mise dot save`.","Prefer per-path resolutions when you know a blanket choice cannot cover everything."],"tags":["sync","conflict-resolution","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"}