Repository navigation
Offer the Base fix, and link the failing checks, when an Inherited failure fails a Run - #277
Merged
Merged
Conversation
…ure fails a Run A Run that fails on Inherited failures with no Base fix taken now says, after its cause on stderr and in its Run notification, where each check fails on the Base branch, and, if neither the command nor the User config decided against a Base fix, the command that retries the Run with one allowed and the base.fix setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… ask_of_tickets plainly Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
A Run that fails on Inherited failures with no Base fix taken now says, after its cause, where the checks fail on the Base branch, and offers a Base fix when nobody decided against one. The same lines go on stderr and in the Run notification's body.
Which lines appear:
Base check:Retry with:/Or set:base.fix = trueno-base-fixHow it works: "nobody decided" is a third thing a Run can ask about a Base fix, and it carries the command to offer.
Decisions worth a look:
thirdshift <Issue URL> [merge|--no-merge] [--email [<address>]|--no-email] [parallel <n>] base-fix. That keeps one renderer for the three places a Run starts from.--offer-base-fix <command>argument. The Ticket's Run prints the lines on its own stderr (relayed as#21: Retry with: …); the Spec run's summary and notification show the Ticket's cause alone, and do not repeat the lines.thirdshift <plan URL> … base-fix, since another Architect run would start a new review rather than take that plan up again.child_run::waitskips the advice lines when it reads a failed child Run's cause and session log back, so what a Spec run reads is byte-for-byte what it was.Docs: README (new section under Failed runs, plus the Base fix and Run notification sections),
CONTEXT.md(Inherited failure, Run notification) andthirdshift help.Seams under test: the
thirdshiftbinary's stderr and the Run notification it sends (end-to-end, against the fakeghand the Resend stand-in);Body::text;args::parsewithargs::retry_with_base_fix.Evidence
main's behaviour; stderr ends with onlycargo testpasses, all 28 test binaries, withcargo clippy --all-targetsclean. New tests:Merge Danger
Door: two-way
Reverting the commits restores the old output. The hidden
--offer-base-fixargument only passes between athirdshiftand the child it starts from its own binary, so no installed version meets it from another.Blast Radius: output
A Failed run on Inherited failures prints up to three more lines per check set on stderr and in its notification. Anything that scrapes a Failed run's stderr and assumes the cause is the line directly before
session log:would now see an advice line there; thirdshift's own reader was updated for that.Unaddressed findings
The review ran both axes on Sonnet sub-agents, because the default model returned overload errors three times in a row.
Standards
goal,emailandparalleltravel together intoretry_with_base_fix. Two callers, and they draw from different types (RunArgsandDispatchArgsplus the Architect run's own email flag), so a shared type would be made for this one function.retry_with_base_fixre-serializes the grammarparsereads. Both live inargs.rs, and a test parses the rendered command back to the same asks.base_fix::REPORTandfailed_run::SESSION_LOGalready set for what a Spec run reads back.BaseFixAskis matched inBaseFix::newandchild_run::start_from. Each match does a different job (what the Run does, what its child is told); the usual cost of a three-way enum.~/.thirdshift/config.tomlin theOr set:line. No constant for the displayed path exists; the help text andconfig.rs's docs spell it out the same way.Spec
no-emailcomes back as--no-email. Kept: a child Run's and an Architect run's own argv are not commands a person should retry, and one renderer serves all three.Base check:line, and that read is a second GitHub call. A Base fix issue's body lists the checks the same way, and the gap needs the Base branch's check to change between the two reads; one extra call on a path that is already failing.Closes #271
🤖 Generated with Claude Code