fix(bootstrap): scope forced dotfile conflicts#10410
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughAdds a ChangesBootstrap --force-dotfiles Feature
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Greptile SummaryAdds
Confidence Score: 5/5Safe to merge; defaults remain conservative and the new All three call sites of No files require special attention. Important Files Changed
Reviews (5): Last reviewed commit: "fix(bootstrap): preserve dotfile conflic..." | Re-trigger Greptile |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
e2e/cli/test_dotfiles_files (1)
154-157: 💤 Low valueConsider adding a comment to document the identical-content convergence behavior.
The new test case at lines 154-157 validates an important new behavior: when a regular file at the target has identical content to the symlink source,
mise dotfiles applysucceeds without--forceand converts the file to a symlink. Adding a comment before line 154 would clarify this intent and prevent confusion with the comment on line 152, which describes the different-content conflict scenario tested at lines 158-163.Example:
# identical content: regular file converges to symlink without --force🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@e2e/cli/test_dotfiles_files` around lines 154 - 157, Add a clarifying comment immediately before the test block that starts with the command "cat dotfiles/gitconfig >~/.gitconfig" to document that this case checks identical-content convergence (a regular file with identical content is converted to a symlink without --force); insert a one-line comment such as "# identical content: regular file converges to symlink without --force" so the intent is clear and not confused with the adjacent different-content conflict test.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@e2e/cli/test_dotfiles_files`:
- Around line 154-157: Add a clarifying comment immediately before the test
block that starts with the command "cat dotfiles/gitconfig >~/.gitconfig" to
document that this case checks identical-content convergence (a regular file
with identical content is converted to a symlink without --force); insert a
one-line comment such as "# identical content: regular file converges to symlink
without --force" so the intent is clear and not confused with the adjacent
different-content conflict test.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e58dbc92-41ff-46b3-8218-2a8604b110c3
📒 Files selected for processing (10)
docs/bootstrap.mddocs/cli/bootstrap.mddocs/dotfiles.mde2e/cli/test_bootstrape2e/cli/test_dotfiles_filesmise.usage.kdlsrc/cli/bootstrap.rssrc/cli/dotfiles/apply.rssrc/cli/dotfiles/edit.rssrc/system/files.rs
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 66909dd. Configure here.
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.6.6 x -- echo |
19.6 ± 0.9 | 17.6 | 23.9 | 1.00 |
mise x -- echo |
20.2 ± 1.5 | 18.3 | 46.5 | 1.03 ± 0.09 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.6.6 env |
19.1 ± 0.9 | 17.0 | 23.3 | 1.00 |
mise env |
19.6 ± 1.0 | 17.9 | 23.9 | 1.03 ± 0.07 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.6.6 hook-env |
19.7 ± 0.8 | 18.0 | 23.2 | 1.00 |
mise hook-env |
20.4 ± 1.0 | 18.5 | 26.2 | 1.03 ± 0.07 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.6.6 ls |
16.2 ± 0.8 | 14.6 | 20.5 | 1.00 |
mise ls |
16.7 ± 0.9 | 15.1 | 20.9 | 1.04 ± 0.08 |
xtasks/test/perf
| Command | mise-2026.6.6 | mise | Variance |
|---|---|---|---|
| install (cached) | 133ms | 135ms | -1% |
| ls (cached) | 59ms | 59ms | +0% |
| bin-paths (cached) | 64ms | 64ms | +0% |
| task-ls (cached) | 127ms | 126ms | +0% |

Summary
mise bootstrap --force-dotfilesfor explicitly replacing conflicting whole-file dotfile targets during bootstrapTests
cargo fmt --all -- --checkmise run render:usagemise run test:e2e e2e/cli/test_bootstrapmise run test:e2e e2e/cli/test_dotfiles_filesNote
Medium Risk
Changes filesystem overwrite behavior during bootstrap and dotfile apply; mistakes could replace local files, though defaults remain conservative and force is explicit.
Overview
Adds
mise bootstrap --force-dotfilesso the bootstrap dotfiles step can replace conflicting whole-file targets only when you opt in; without it, bootstrap still errors on conflicts and points you at--force-dotfilesormise dotfiles apply --force.Symlink apply now treats an existing regular file as a non-conflict when its bytes match the source, and replaces it with the symlink without
--force; differing content still requires force. Conflict messages use a caller-specificforce_hintonApplyOptsinstead of always saying--force.Docs, usage spec, man page, and shell completions are updated; e2e tests cover bootstrap force behavior, identical-file symlink convergence, and OS-conditional launchd status expectations.
Reviewed by Cursor Bugbot for commit 4373c06. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by CodeRabbit
New Features
Documentation
Tests