Repository navigation
Runs share one Base fix - #242
Merged
Merged
Conversation
…ch directory at a time Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… left open, share the Launch directory lock Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README.md: keep issue-221's wording that base-fix, no-base-fix or the User config's base.fix holds for each Ticket's Run, with issue-224's shared Base fix and its "One Base fix per Base branch" section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
Closed
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
One broken Base branch gets one Base fix. A Run that meets Inherited failures now looks before it writes:
Waiting counts as the Run's one Base fix. If the issue closes and the checks are still Inherited failures, the cause is
CI red on <check>, which also fails on <base> at <sha>, even after Base fix <issue URL> closed; fix <base> first.In a Spec run, Ticket Runs are child
thirdshiftprocesses (ADR-0006), so "in-process" sharing is a lock in the Launch directory's git common directory: the first Ticket writes the issue and starts the Base fix, the others find it and wait.Seam under test: the binary, with the fake
ghandclaude(tests/support::Scenario).Evidence
two_tickets_meeting_the_same_inherited_failure_share_one_base_fixnever ended: each Ticket wrote a Base fix issue, and one waited forever on an issue nobody closed.a_run_that_finds_an_open_base_fix_issue_for_its_checks_waits_on_it_and_starts_nonefailed withBase fix …/issues/9 failed: no PR found(the Run wrote its own issue beside the open Keeping the PR mergeable: merge the Base branch and conflict Repair #8).After:
cargo test: every target passes, 0 failed (base_fix14,spec_run67).cargo clippy --all-targetsandcargo fmt --checkare clean.New tests, by acceptance criterion:
Merge Danger
Door: two-way
Only Runs given
base-fixreach the new code. Reverting restores one Base fix per Run. Leftoverthirdshift-base-fix-<n>.lockfiles in a clone's git directory are inert.Blast Radius: contained
base-fixcan now wait with no time limit on an openbase-fixissue written from another clone or machine that nobody is working on. That is the spec's "waits for that issue to close"; the README says so.ghcall record, with a 10 second cap in the fake agent: on a very loaded machine they would fail, not hang.Unaddressed findings
Standards
base_fix.rs, explained by its doc comment, not domain vocabulary a user meets.started: boolonTakencould be a two-variant enum. It has one reader,awaited_end, and an enum would add more code than it explains.lookingnames a lock guard. It reads as intended next to its comment ("held from the look for an open Base fix issue…").open_issues_labelledreturnsVec<(IssueUrl, String)>, and--limit 1000is a bare literal. One caller destructures the pair at once; the literal matches thegh label listandgh pr listcalls already ingithub.rs.,, is fixed.BOTH_TICKETS_HAVE_LOOKEDgreps the fakeghcall record's layout. The record is the harness's documented artifact; a fake command just for this would be more surface than the two tests warrant.Spec
ghgainedissue list --label, not--search. Deliberate:gh issue list --searchgoes through GitHub's search index, which can lag an issue just opened, so a second Ticket could miss the first's Base fix issue. The label list is consistent, and the title is matched in thirdshift.Base fix <url> ended with its issue still open, and starting a failed Base fix again. Without them a failed Base fix leaves its issue open and every Run that finds it waits forever, as the first version of this branch did in its own tests.closed/not closedin the Run notification'sBase fix:line. The Run that waits never sees a merge, only the issue, somergedwould claim more than it knows.base-fixissue from waiting on itself; the second makes the choice deterministic.Closes #224
🤖 Generated with Claude Code