Uh oh!
There was an error while loading. Please reload this page.
fix(pm): add pm:retriage to the four-repo pm label vocabulary loop - #10100
Merged
Conversation
The script header claims "the label set IS the PM state machine": every label the state model names is created here across the four triaged repos. The pm:retriage row landed in SKILL.md (#10089) without a matching entry, so the identity claim drifted — a first application on a repo where the object does not exist yet depended on the applying seat remembering to create it, and a rerun of this script could never repair the gap. Description is 96 characters, inside the header's documented 100-character hard cap (over-cap descriptions 422 and the idempotency `|| true` swallows the failure silently). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
os-warren
marked this pull request as ready for review
August 20, 2026 01:53
os-warren
enabled auto-merge
August 20, 2026 01:53
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 20, 2026
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Fixes#10090
scripts/pm/ensure-pm-labels.shclaims in its header that "The label set IS the PM state machine (.claude/skills/pm-dispatch/SKILL.md, 'State model')". Thepm:retriagerow landed in that state model via #10089 without a matching entry here, so the identity claim drifted. Onegh label createline inside the existing four-repo loop, following the file's idiom.The line
pm:blockingandfinding, which is where the row sits in SKILL.md's state-model table. The state-model row makes four-repo existence explicit: 「标签须四仓存在(分诊四仓统一职责,首次应用时创建)」.|| trueswallows it, so the label is never created and a rerun cannot repair it. Measured in characters, not bytes —needs:contract-reviewis 97 chars / 101 bytes and lives.d4c5f9— unused by every other label in the file, and adjacent topm:blocking's purple. Distinctness is load-bearing rather than cosmetic here: the state-model row's stated purpose for coexistence is 「并存让「排队但有异议」在列表上可见」, and a grey label is the least visible choice available.pm:blocking/needs:contract-reviewidiom (why the label exists, who sets it, who removes it, its named consumers), citing the maintainer ruling verbatim and untranslated per AGENTS.md Communication.Idempotency over the label object that already exists
The
pm:retriageobject already exists on objectstack — auto-created when it was first applied (#9756 / #9705), colourededed, empty description. Creation here is create-if-missing, exactly as thetarget:block documents for the same situation: running the script is a no-op on objectstack and leaves that object's colour and description exactly as they are. This PR's durable contribution is the other three repos, where the object does not exist yet and today's creation depends on the applying seat remembering to do it by hand.gh label editby hand. Re-colouring an existing object is not this script's job — the file deliberately never callslabel edit— so this is left as a visible PM landing step, not smuggled in.Verification
Gates re-derived from the real diff at the final commit
88abe7588, vianode scripts/pm/dispatch-gates.mjswith no path arguments (change set derived from git — 1 path(s) vs merge base 907c11d2c,committed 1, working tree 0, untracked 0). Verdict lines, exit codes captured before any pipe:pnpm check:cross-package-test-inputs— EXIT=0 —OK: 12 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.pnpm check:nul-bytes— EXIT=0 —check-nul-bytes: OK (scanned 6367 text file(s) -- 6367 tracked, 0 untracked-not-ignored; skipped 5 binary; no raw ASCII control bytes).bash -n scripts/pm/ensure-pm-labels.sh— EXIT=0.Dry-run harness. The script has no dry-run or self-test mode, so verification used an out-of-tree harness that puts a fake
ghon PATH recording everylabel createinvocation. With the fix: 48 create calls,pm:retriage d4c5f9 96cpresent once per repo on all four;DESC-CAP: PASS (every -d <= 100 chars)across all 48.Reverse verification, direction predicted in writing before running. Prediction: deleting the added line makes the listing lose exactly 4 rows,
TOTAL 48 → 44,DESC-CAPstays PASS, and no gate reddens — the drift is silent. Observed exactly that; the diff of the two listings is the fourpm:retriagerows plus the total. That silence is the point of the card: no mechanical check couples the SKILL.md state model to this script, which is why the drift could land unnoticed in the first place. Restored from the commit and confirmed byte-identical (sha256 376359c1…, matching the pre-ablation hash, cleangit diff --exit-code), and the restored listing is identical to the pre-ablation one.What could NOT be verified from this container, stated plainly: the script's live half. There is no
ghCLI installed here and no label-write credentials for the four repos, so no label object was created, edited, or read-modified by this run — the only live read was confirming the existing objectstack object's colour and description through the GitHub API. Actually running the script remains a PM landing step, as the header already says for objectos.Scope
scripts/**only — no changeset (nothing published), henceskip-changeset. Not a governed surface.Out-of-scope findings filed unassigned rather than ridden in here:
pm:seatandpriority:p0are state-model rows with no entry in the loop. Same drift class, deliberately not fixed in this PR: the correct shape (which loop each belongs in, and whether the absence is deliberate) is a judgment no existing evidence pins.repo:objectui.Generated by Claude Code