{"record":{"id":"6fa6ad2b2ba45632","repo":"jdx/mise","slug":"repository-application-paused-reconcile-repositor","errorCode":null,"errorMessage":"repository application paused: reconcile repository conflicts first: {}","messagePattern":"repository application paused: reconcile repository conflicts first: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/sync/run.rs","lineNumber":1011,"sourceCode":"        return Ok(None);\n    };\n    if heads.base.as_ref() == Some(remote) {\n        return Ok(None);\n    }\n    let (merged, conflicts) = repo.merge_tree(local, remote)?;\n    let tree = tracked.manifest.write(repo, &merged)?;\n    let roots = Roots::current();\n    if repo.output_tree_of(local)? == tree && conflicts.is_empty() {\n        return Ok(None);\n    }\n    let unresolved: Vec<_> = conflicts\n        .into_iter()\n        .filter(|path| {\n            path != crate::system::history::manifest::PATH && !eligible(&roots, tracked, path)\n        })\n        .collect();\n    if !unresolved.is_empty() {\n        bail!(\n            \"repository application paused: reconcile repository conflicts first: {}\",\n            unresolved.join(\", \")\n        );\n    }\n    Ok(Some(tree))\n}\n\n/// A bootstrap finished: the declarations that arrived through sync are\n/// applied now, so `status` stops asking for one.\npub(crate) fn bootstrap_completed() {\n    let state_dir: &Path = &crate::dirs::STATE;\n    let status = match read_status(state_dir) {\n        Ok(status) => status,\n        Err(err) => {\n            warn!(\"history: could not record that the bootstrap ran: {err:#}\");\n            return;\n        }\n    };","sourceCodeStart":993,"sourceCodeEnd":1029,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/history/sync/run.rs#L993-L1029","documentation":"Before applying the incoming repository tree during preparation, mise filters the tracked repository files for unresolved conflict markers. If any path (other than the manifest itself or ineligible files) still needs a conflict decision, applying the tree would clobber those decisions, so mise pauses application and lists the unresolved paths.","triggerScenarios":"`incoming_repository_tree` (called from `prepare`) finds `unresolved` non-empty: tracked repository paths carry conflict entries that the user has not resolved via the conflict-resolution flow.","commonSituations":"A pull brought conflicting versions of tracked dotfiles and the user skipped the conflict prompts; automated sync left conflicts pending on a headless machine; user edited files while a conflict decision was outstanding.","solutions":["Resolve the listed conflicts (run `mise bootstrap dotfiles pull` interactively or use the conflict-resolution command to pick a side per path)","Check `mise bootstrap dotfiles status` for pending conflicts and clear each one","If a path should not be tracked at all, untrack it so it stops blocking application"],"exampleFix":"// before\nerror: repository application paused: reconcile repository conflicts first: ~/.gitconfig, ~/.tmux.conf\n\n// after\n$ mise bootstrap dotfiles pull   # choose versions for ~/.gitconfig and ~/.tmux.conf\n$ mise bootstrap dotfiles sync","handlingStrategy":"validation","validationCode":"mise bootstrap dotfiles status   # confirm no pending repository conflicts before syncing","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Resolve conflicts immediately when a pull reports them instead of deferring","Don't skip interactive conflict prompts during `pull` on headless machines — use a non-interactive resolution policy"],"tags":["sync","conflict","dotfiles","blocked-operation"],"backgroundTag":"invalid-state-transition","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}