fix(fixer): create the 'blocked' label if missing and add a self-gated outcome - #2480
Merged
Merged
Conversation
…d outcome Phase 1's queue filter and Phase 3's batch-completion check both exclude issues carrying a `blocked` label, but that exclusion was a silent no-op in this repo: the label itself had never been created, so nothing could ever carry it. Phase 0 now creates it tolerantly (gh label create ... || true) so both checks have something to actually filter on. Separately, an issue that is deliberately self-gated (written by its own author to stay open until some future trigger condition is met) was being re-verified and re-confirmed unmet on every batch it was eligible for, forever, since it never closes and nothing external ever blocks it. Step 2b now recognises this case explicitly: it applies the `blocked` label with a comment naming the gating condition, records status `self-gated`, and moves on — preserving the issue as an open tracker while stopping it from re-consuming batch slots. `self-gated` is propagated everywhere the skill enumerates terminal issue statuses (progress counters, the dispatch guard, the final report table, the artifacts reference). Closes #2324 docs check acknowledged: this only changes the /fixer skill's own internal orchestration logic (a bash-embedded workflow document, not application source or the CLI surface) — no README/CLAUDE.md/ROADMAP.md update applies.
Contributor
Greptile SummaryThe fixer skill now provisions the
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Reviews (2): Last reviewed commit: "fix(fixer): don't swallow genuine gh lab..." | Re-trigger Greptile |
Greptile review (PR #2480): the blanket '|| true' on the preflight blocked-label creation hid a genuine failure (auth, rate limit, permissions) exactly as quietly as it hid the expected "already exists" case, so a real failure would still print "label present" and only surface much later when step 2b's `gh issue edit --add-label blocked` hit a self-gated issue that needed it. Check existence explicitly via `gh label list` first, and only attempt creation — failing loudly if that fails — when the label is genuinely absent. docs check acknowledged: same internal /fixer orchestration logic as the parent commit, no README/CLAUDE.md/ROADMAP.md update applies.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Problem
Two compounding gaps in the
/fixerskill (issue #2324):blockedlabel never existed in this repo./fixer's Phase 1 queue filter and Phase 3 batch-completion check both exclude issues carrying ablockedlabel, but nothing had ever created that label here — so the exclusion was a silent no-op in every run to date.Fix
blockedlabel tolerantly (gh label create blocked ... || true) so it actually exists to filter on.self-gatedoutcome, parallel toabandoned: when an issue is explicitly self-gated and its trigger condition is still unmet, apply theblockedlabel with a comment naming the condition, record statusself-gated, and move on — leaving the issue open (unlikeabandoned, which closes it) but no longer re-entering the queue until a human removes the label.self-gatedis propagated through every place the skill enumerates terminal statuses: progress counters, the dispatch-loop guard, the sub-agent stop condition, the final report table, and the artifacts reference table.This is a change to the skill's own orchestration logic only (
.claude/skills/fixer/SKILL.md), not application source.Test plan
bash -n-checked all 41\``bash` blocks in the edited file (including the 2 new ones) — no syntax errorsfixer-skill-2g-queue-guard-2304,fixer-skill-2g-queue-guard-2229,docs-skills-mirror-sync(fixer is not atitan-*skill, so it has no mirror),lint-skill-mktemp-trailing-xnpm run lintcleancargo build --releaseandcargo fmt --checkclean (no application code changed by this PR, verified anyway)Closes #2324