Repository navigation
thirdshift pickup: take the lowest-numbered Ready issue and run it - #293
Merged
Merged
Conversation
… and runs it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ow a run with no Issue URL starts as its own type, Unready labels whatever their case, the glossary's Base branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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
thirdshift pickupstarts a Pickup run: one pass, with no Issue URL, that takes the lowest-numbered Ready issue and dispatches it asthirdshift <Issue URL>would.A skipped pass exits
0, with stdout empty and that one line on stderr.Two things beyond the letter of the Ticket, both needed for "exactly as
thirdshift <Issue URL>would":thirdshift <Issue URL> … base-fix, withoutparallelfor an issue that is not a Spec, since that command would fail by hand.Two changes reach an Architect run: its skip reason is reworded to cover both, and its detached-HEAD message is now the shared one,
HEAD is detached; check out the branch the work should be based on, or name it with base <branch>. An Unready Ticket label now counts whatever its case, for a Spec run's Tickets and an Architect plan too.Seams tested: the
thirdshiftbinary in a scenario against the fakeghandclaude(tests/pickup_run.rs, new;tests/command_surface.rs;tests/architect_run.rs), andargs::parse. The fakeghneeded nothing new: it already listed issues by label.Evidence
Before:
thirdshift pickupwas an argument error (not a GitHub issue URL: pickup), and the first case failed:After:
cargo fmt --check,cargo clippy --all-targets -- -D warningsandcargo testall pass, the last run once at the end:What the Pickup run cases assert, each by exit code, stdout, stderr and the labels on the fake GitHub:
Unaddressed findings
Standards
pickup.rsreads the sub-issues forTaken.is_spec, thenrun.rsreads them again). Skipped: the command a Base fix is offered with is built before the dispatched run starts, and must already leaveparallelout for an issue that is not a Spec. It costs one extra query a pass.tests/architect_run.rs(agent_opens_pr,pr_from,assert_ended_with_pr, the Resend constants). Skipped: one copy per test file is the repository's idiom, and moving them totests/supportis a change across six files that is not this Ticket's.Spec
launch.pullorlogs.dir, and the Base fix cases dispatch a Run, not a Spec run. Skipped: both kinds of run go through the onedispatched()inmain.rs, and the Architect run's cases cover those. Aspec.parallelcase was added.Merge Danger
Door: two-way
A new command and an internal move. Reverting removes
pickupand puts the lock back inarchitect.rs. The lock file keeps its path,~/.thirdshift/architect-locks/, so a thirdshift from before and one from after still exclude each other.Blast Radius: contained
Nothing runs a Pickup run unless someone types
thirdshift pickup. An Architect run's two reworded lines could break a script that matches its stderr text. An issue labelled with an Unready Ticket label in another case, such asNeeds-Info, is now left alone by a Spec run where it was run before.Closes #282
🤖 Generated with Claude Code