feat(sweep): add loom:operator-only label + pre-flight skip#3362
Merged
Conversation
Owner
Author
|
LGTM. Approved. Verified:
Scope discipline:
The critical design insight is preserved: the constraint is "no builder claims it", not "no curation happens". Curator stays enabled, sweep/shepherd/champion-force-mode all skip. The defense-in-depth across three skip points (sweep pre-flight, shepherd direct invocation, champion force-mode promotion) is exactly right. |
The /sweep skill's Constraints section already promised to skip "operator-only" issues (releases, credential changes, infra rotations, hardware access) but had no detection mechanism, so the rule was unenforceable. Anything passed to /sweep would get curated, promoted to loom:issue, and handed to a builder — wasting a session on a task that fundamentally requires a human step. Changes: - Add loom:operator-only label to .github/labels.yml (orange-500, groups with loom:abort as "stop the automation, human needed" signals, distinct from red loom:blocked). - Extend /sweep Wave Lifecycle pre-flight (step 1) to skip issues with loom:operator-only, ordered after loom:blocked. - Update /sweep Constraints line to reference the new mechanism instead of an unenforced promise. - Add a Limitations table row marking the enforcement as Implemented. - Document loom:operator-only in /loom labels sub-topic. - Add CRITICAL safety guard to champion-issue-promo "When NOT to Auto-Promote" — without it, --merge mode would silently bypass sweep's skip by auto-promoting loom:curated operator-only issues into the build queue. - Add a defensive operator-only check to /shepherd Step 3 so direct shepherd invocations also exit cleanly instead of stalling. Curator note (intentional): curator.md is NOT changed. /curator N on an operator-only issue should still enrich the body — the constraint is "no builder claims it", not "no curation happens". The .claude/commands/loom/*.md tree is hardlinked to defaults/.claude/commands/loom/*.md (same inodes), so a single edit to defaults/ updates both copies. Closes #3360 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
479c1c9 to
bcaba80
Compare
Owner
Author
|
Rebased onto main (#3361 merged). Resolved conflicts in sweep.md pre-flight + Limitations table. Both skip checks now compose — operator-only first, then existing-PR probe. |
Owner
Author
|
Re-approved after rebase. Both skip checks compose correctly. Verified post-rebase:
|
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
loom:operator-onlylabel to.github/labels.yml(orange-500, groups withloom:abort).--merge-mode guard added soloom:curated+loom:operator-onlyissues are never silently auto-promoted into the build queue (the critical safety guard — without it the sweep skip is bypassed under--merge).loom.mdlabels table documents the new label betweenloom:blockedandloom:urgent./shepherdStep 3 so direct shepherd invocations exit cleanly instead of stalling./curator Non an operator-only issue should still enrich the body; the constraint is "no builder claims it", not "no curation happens".Note:
.claude/commands/loom/*.mdis hardlinked todefaults/.claude/commands/loom/*.md(same inodes), so a single edit updates both trees. Verified withstat -f "%i %N".Closes #3360
Test plan
/sweep Nwhere#Nhasloom:operator-only→ builder NOT dispatched; log shows skip with reason "operator-only"./sweep Nwhere#Nlacks the label → unchanged behavior./curator Non aloom:operator-onlyissue still enriches the body (does not skip).--mergemode does NOT auto-promoteloom:curated+loom:operator-onlyissues./shepherd Non aloom:operator-onlyissue exits with the new message instead of writing a spawn signal../scripts/install/sync-labels.sh .,gh label list | grep loom:operator-onlyreturns the new label (deferred to operator; not run as part of this PR).