Repository navigation
A Pickup run passes over a Spec whose Tickets are all closed, saying why - #307
Merged
Merged
Conversation
… why A Spec with every Ticket closed and nothing started was a Ready issue on every pass: the Spec run it was dispatched as refused it before the Claim, so the next pass took it again and no higher-numbered Ready issue was reached. The Ready issue rule now reads each sub-issue's state in the candidate query and passes such a Spec over as `#<n> every Ticket is closed`, after the already-started check and before the settled one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…undred sub-issues read said in the query's doc Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
src/spec_run.rs: main moved Parallel to the asks module, this branch changed all_closed to take each sub-issue's open state; both kept. 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 Spec whose Tickets are all closed, with nothing started, is no longer a Ready issue: a Pickup run passes it over with its own line and goes on to the next candidate.
standing_of(candidate) # the Ready issue rule, first reason wins Unready label -> "#<n> labelled <label>" Claim -> "#<n> labelled in-progress" sub-issue -> "#<n> is a Ticket of #<spec>, which is not ready" base-fix -> "#<n> labelled base-fix" open blocker -> "#<n> blocked by #<m>" already started -> "#<n> already started: ..." + every Ticket closed -> "#<n> every Ticket is closed" not settled -> "#<n> not settled: ..." otherwise -> Ready issueThe candidate query now carries each sub-issue's state, so no extra request is made per candidate, and both the Pickup run and the Spec run's own check go through
spec_run::all_closed:CANDIDATE_QUERY parent { url } - subIssues { totalCount } + subIssues(first: 100) { nodes { state } }thirdshift <Issue URL>on such a Spec is unchanged: it still stops withevery Ticket is closed and there is no Spec branch; nothing to do.CONTEXT.md, the README's Ready issue rule and "Why an issue was passed over", and thepickuphelp text describe the new condition.Evidence
tests/pickup_run.rsfailed againstmain's code:cargo test --test pickup_run: 73 passed, 0 failed. They cover the passed-over line, the next Ready issue being taken, the skip (exit0, GitHub state unchanged, no Run notification), thealready startedline kept for a Spec branch onoriginor a pull request, a Spec with one open Ticket still taken, andevery Ticket is closedahead ofnot settled.cargo test, all 30 test binaries) passed on the first commit, withcargo fmt --checkandcargo clippy --all-targetsclean. After the review fixes, a rename and a doc comment,pickup_run,spec_run,preflightandfakeswere re-run and pass; the full suite was not run again.Merge Danger
Door: two-way
Reverting restores the old rule; nothing on GitHub is written differently.
Blast Radius: Pickup
Only what a Pickup run takes changes. A Spec with more than a hundred sub-issues is judged on its first hundred, as a Spec run already judges it.
Unaddressed findings
Standards
Selection::Freshinsrc/run.rs,branch::startedinsrc/pickup.rs): both predicates were there before this change, and the issue fixes the new reason's place as after "already started", so they were left as they are.all_closedtakes an iterator of open flags, not&[Ticket]: kept, since it is what lets one rule serve the Tickets read and the candidate read, which the issue asks to agree.Vec<bool>for a candidate's sub-issues: partly addressed (renamedsub_issue_is_open, withhas_sub_issues()hiding the empty case); a type of its own seemed more than one caller needs.CONTEXT.md, the README, the help, a doc comment and two tests: this is how the repository already documents the rule; gathering it is a separate change.Spec
pickuphelp text and its test: kept, because the help restates the Ready issue rule and would otherwise be wrong.ready-for-agentoff, and the example's pull request renumbered to free#33: kept, the first as the way out for the reader, the second so the example has no issue and pull request sharing a number.Closes #303
🤖 Generated with Claude Code