Repository navigation
Base fix in the User config and Setup - #239
Merged
Merged
Conversation
base.fix in the User config lets every Run start a Base fix with no flag; no-base-fix forbids it for one Run, and contradicts base-fix. Setup asks about Base fixes only with every Run a Merge run, and always writes the setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… writes base.fix at its default with merging off, share the Spec run test setup Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Base fixes can be turned on per machine:
base.fixin the User config,no-base-fixto forbid one for a Run, and a Setup question asked only when every Run is a Merge run.A non-boolean
base.fixstops the Run withbase.fix must be true or false in the User config <path>, likemerge.always. Help and the README name--no-base-fixandbase.fix.Seam under test: the binary, through
tests/support::Scenariowith the fakeghand fakeclaude(tests/user_config.rs,tests/command_surface.rs,tests/setup.rs,tests/setup_offer.rs,tests/spec_run.rs,tests/base_fix.rs), plus the existingUserConfig::parseunit table insrc/config.rs.One decision to check: from a terminal, answering no to "Every Run a Merge run?" writes
base.fix = falseeven if the file hadbase.fix = true. That is the literal reading of "Otherwise it writesbase.fixout at its default", and it keeps a user who just turned merging off from being left with Runs that still merge a Base fix into the Base branch. The cost: someone who hand-setbase.fix = truewithmerge.always = falseloses it on the next Setup from a terminal. Setup with no terminal asks nothing and keeps the value.Evidence
cargo testpasses in full (26 test binaries, 0 failed), withcargo fmt --checkandcargo clippy --all-targets -- -D warningsclean. New tests:Unaddressed findings
Standards
base.fixrejections asserted in both thesrc/config.rsunit table andtests/user_config.rs: kept, since every other key (merge.always,launch.pull,logs.dir,spec.parallel) is in both, and the issue asks for the test through the binary.RUN_OPENS_PR_WITH_INHERITED_FAILUREandBASE_FIX_OPENS_PRredeclared intests/user_config.rs: kept, since each test file here declares its own agent scripts (AGENT_OPENS_PRis in four), and moving them totests/supportwould be a refactor of files this change doesn't otherwise touch.child_run::start(…, base_fix: bool)carries a bool whereBaseFixAsknow exists: not changed; the bool isBaseFix::may_start()from A Base fix, when the base-fix flag is given #222, threaded throughspec_run, and this change no longer toucheschild_run.rs.HELP,DEFAULTS, the parser and the README: the existing shape of every setting; reshaping it is out of scope.default_base_fixis a third bool-to-askif/elsebesidedefault_goalanddefault_ask: kept for consistency with its neighbours, as the reviewer suggested.Spec
base.fix: the Spec PR uses the sameBaseFixvalue resolved once inmain, already covered with the flag inwith_base_fix_the_spec_prs_inherited_failure_gets_a_base_fix_into_the_base_branchand with the config for a plain Run.base.fix = false:declining_writes_the_defaults_and_a_second_run_does_not_offeralready compares that file with whatsetupwith no terminal writes, which is asserted to holdbase.fix = false.Merge Danger
Door: two-way
A new, default-off setting and a new flag; reverting removes them. A User config that already holds
[base]would then be refused by the older version as an unknown section.Blast Radius: Setup
Every machine's next
thirdshift setupadds[base] fix = falseto its User config, and Setup from a terminal asks one more question when merging is on. Runs behave as before unlessbase.fix = trueorno-base-fixis given.Closes #223
🤖 Generated with Claude Code