Skip to content

fix(fixer): create the 'blocked' label if missing and add a self-gated outcome - #2480

Merged
carlos-alm merged 2 commits into
mainfrom
fix/issue-2324-fixer-blocked-label-self-gate
Aug 13, 2026
Merged

fix(fixer): create the 'blocked' label if missing and add a self-gated outcome#2480
carlos-alm merged 2 commits into
mainfrom
fix/issue-2324-fixer-blocked-label-self-gate

Conversation

@carlos-alm

Copy link
Copy Markdown
Contributor

Problem

Two compounding gaps in the /fixer skill (issue #2324):

  1. The blocked label never existed in this repo. /fixer's Phase 1 queue filter and Phase 3 batch-completion check both exclude issues carrying a blocked label, but nothing had ever created that label here — so the exclusion was a silent no-op in every run to date.
  2. No way to apply it automatically for a common outcome class. An issue that is deliberately self-gated (explicitly written to stay open until some future trigger condition, e.g. "only take this on if/when a real caller needs it") was re-verified and re-confirmed unmet on every batch it was eligible for, forever, wasting a queue slot each time.

Fix

  • Phase 0 now creates the blocked label tolerantly (gh label create blocked ... || true) so it actually exists to filter on.
  • Step 2b gets a new self-gated outcome, parallel to abandoned: when an issue is explicitly self-gated and its trigger condition is still unmet, apply the blocked label with a comment naming the condition, record status self-gated, and move on — leaving the issue open (unlike abandoned, which closes it) but no longer re-entering the queue until a human removes the label.
  • self-gated is 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

  • Extracted and bash -n-checked all 41 \``bash` blocks in the edited file (including the 2 new ones) — no syntax errors
  • Existing SKILL.md-extraction regression tests still pass: fixer-skill-2g-queue-guard-2304, fixer-skill-2g-queue-guard-2229, docs-skills-mirror-sync (fixer is not a titan-* skill, so it has no mirror), lint-skill-mktemp-trailing-x
  • Full test suite: 5231/5231 passed, 324/324 files
  • npm run lint clean
  • cargo build --release and cargo fmt --check clean (no application code changed by this PR, verified anyway)

Closes #2324

…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.
@greptile-apps

greptile-apps Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The fixer skill now provisions the blocked label during pre-flight and adds a terminal self-gated outcome for issues awaiting an explicit future trigger.

  • Propagates self-gated through queue advancement, progress accounting, dispatch validation, reporting, and artifact documentation.
  • Labels qualifying issues as blocked while leaving them open for later human reactivation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
.claude/skills/fixer/SKILL.md Adds blocked-label provisioning and consistently integrates the self-gated outcome throughout fixer orchestration.

Fix All in Greploop

Reviews (2): Last reviewed commit: "fix(fixer): don't swallow genuine gh lab..." | Re-trigger Greptile

Comment thread .claude/skills/fixer/SKILL.md Outdated
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.
@carlos-alm
carlos-alm merged commit 386982c into main Aug 13, 2026
29 checks passed
@carlos-alm
carlos-alm deleted the fix/issue-2324-fixer-blocked-label-self-gate branch August 13, 2026 11:24
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fixer: 'blocked' label never existed in this repo, so self-gated issues re-enter the queue every batch forever

1 participant