Repository navigation
Deepen issue labels into one labels module, ending the case-sensitive needs-triage check - #318
Merged
Merged
Conversation
… needs-triage check An issue's labels are now a Labels value that hides its list and answers every question without case, and each label thirdshift knows is a Label carrying its description. Marking an Architect plan ready takes needs-triage off whatever its case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…el names, Labels without a case-sensitive == 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
Every label rule now lives in one labels module. An issue's labels are a
Labelsvalue that hides its list, and every question it answers ignores case. Marking an Architect plan ready no longer keeps aNeeds-Triagespelled in another case, which used to reject the plan.The Claim's make and release go through the same pure
swapped, followed by one PUT. Everyghcall and progress line stays the same, in the same order.Evidence
a_plan_labelled_needs_triage_in_another_case_is_marked_ready_and_dispatched(repo labelNeeds-Triage, runthirdshift architect) fails: the plan is rejected as labelled needs-triage.After: it passes. The plan is labelled
architect-plan, in-progress, dispatched, and a PR is opened.src/labels.rscover has and spelled-as in mixed case, the Unready Ticket label in any case, taking off, the Claim's swap and its release, and putting on a label that is already there.cargo test(30 suites),cargo clippy --all-targets -- -D warningsandcargo fmt --checkall pass. No generated prompt changed.Merge Danger
Door: two-way
This is an in-process refactor plus one bug fix, with no data or schema change. Reverting it is enough to undo it.
Blast Radius: labels
Every label read and write goes through the new module: the Claim, the Pickup run, the Spec run, the Architect run and the Base fix. The existing end-to-end tests cover each one unchanged.
Unaddressed findings
Standards
needs-triage, the Unready labels): skipped. The spec says eachLabelcarries its description, and the text comes fromdocs/agents/triage-labels.md.swappedwith an empty slice): skipped. The Unready check has to run between takingneeds-triageoff and putting the ready labels on.ghand integration tests keep their own case matching and&strlabel constants: skipped. They sit on the far side of the binary's seam, and the spec keeps the existing tests unchanged.Spec
Labels::names()is reachable by any caller: skipped. The GitHub adapter needs the spellings to write them, and Rust has no friend visibility. Its doc limits it to writing. The case-sensitivePartialEqwas removed, so==onLabelsno longer compiles.github::remove_labeltakes&str, notLabel: skipped. It deletes the label as the issue spells it, which only that issue'sLabels::spelledknows. That keeps the request the same as today.spec_rununit tests changed how they build labels: no change needed. The type change forces it, and the assertions are unchanged.Closes #317
🤖 Generated with Claude Code