Uh oh!
There was an error while loading. Please reload this page.
docs(pm-dispatch): the clause-2 label rides the reviewable increment, not the grading stroke - #13618
Merged
Merged
Conversation
… not the grading stroke Rewrite the clause-2 gate's duty sentence in place: the dispatch seat's duty stops at recording the one-line determination on the card; the needs:contract-review label is attached by the PR creator in the same stroke that creates the reviewable contract increment (draft PR, or the report when it arrives first). Word-level tightening, net 0 lines; the 2026-08-28 no-pre-hang abolition sentence and the open-carrier semantics are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de
This was referenced Aug 31, 2026
os-zhuang
approved these changes
Aug 31, 2026
zhuangjianguo
marked this pull request as ready for review
August 31, 2026 05:12
zhuangjianguo
enabled auto-merge
August 31, 2026 05:12
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#13557
What
One in-place rewrite of the clause-2 gate's duty sentence in
.claude/skills/pm-dispatch/SKILL.md(2 lines changed, net 0): the dispatch seat's duty now stops at recording the one-line determination on the card; theneeds:contract-reviewlabel is attached by the PR creator in the same stroke that creates the reviewable contract increment (draft PR, or the report when it arrives first).Before:
After:
The surviving duties keep their meaning (记一行认定 stays the dispatch seat's; the 恒英文 label-naming note now rides the hang sentence), and the abolition sentence plus the open-carrier semantics on the following two lines are untouched.
Why
The standing maintainer ruling (2026-08-28), single-sourced at
.claude/skills/pm-dispatch/references/contract-review.mdline 10, verbatim as it stands in the file:As previously written, the duty list still instructed the dispatch seat to hang the label in the same stroke as the determination — at grading/dispatch time, before any reviewable increment exists. The card's verification comment measured 9 pre-hangs removed in 2 days traceable to this live text. The correction separates the two acts exactly as the card's fix direction states: determination recorded on the card at grading/dispatch; label attached by the PR creator with the increment.
The in-passage word-level tightening SHAPE follows the precedent of PR #13505 and the corrections on #13427 / #13403 (cited as shape precedent only; this edit is judged on its own budget).
Every
needs:contract-reviewoccurrence in SKILL.md, adjudicatedFour hits at the base ref; measured again at the head ref:
needs:contract-reviewcompensation extend to cards that paraphrase clause-2. That is requirement scope (the review obligation survives paraphrase), not hang timing; timing is owned by the corrected duty sentence and by contract-review.md lines 7-11.needs:contract-reviewreview chain as a duty area. No hang-timing instruction. (The dispatch prompt located this hit at line 889; the measured position at both refs is 897 — same director-seat passage, and the file is unchanged between the card's measurement ref and this PR's base.)contract-review.md line 43 — read, adjudicated, left untouched
The dispatch hypothesis asked whether line 43 (「条款②的
mode:subagent派发照旧恒保留needs:contract-review,免审跳过仅座位自会话成立」) is requirement-retention or label-timing. Measured reading: requirement-retention — subagent-mode clause-2 work cannot claim the self-session review exemption, so the REVIEW obligation is retained; nothing in the line names a hang act or a time point.Evidence: (a) the line lives in the 降档保险丝(机读) section, whose subject is tier measurement, and its second half contrasts with 免审跳过 — the sentence answers "may the review be skipped?", never "when is the label hung?"; (b) carrier timing is owned by the same file's 载体纪律 section (lines 7-11), including the line-10 ruling above — reading line 43 as label-timing would put the 48-line file in contradiction with itself, while the retention reading keeps it consistent.
The ruling's carrier issue #12887 is unreachable on every read channel (issue page and REST both return 404 — it appears deleted), so this adjudication rests on the file's own structure, per the dispatch's stated fallback. The file is byte-identical across this PR's refs. Residual note for audit #13597 Phase 3: 「派发照旧恒保留」 could be sharpened (for example 恒欠 … 复审) to close the last mis-reading channel; deliberately not done here — the disambiguation is optional under the hypothesis, and the audit-era posture is a minimal governed diff.
Acceptance table (both refs, via
git show REF:pathfile-wide counts)needs:contract-reviewEvery positive control returned non-zero at both refs (instrument proven). Line counts: SKILL.md 960 to 960 (net 0, meeting the card's at-most-960 requirement); contract-review.md 48 to 48 and byte-identical across refs. Both edited lines measure at most 120 bytes (110 and 114) under the max-line-length rule, and the new line break falls between two CJK characters (renders as nothing).
Gates — families derived from the actual diff; union re-run at 7e5871d on a clean tree
Derivation:
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack— provenance line: "gate list derived from the tree of 'objectstack-ai/objectstack' at commit e2debee"; 9 families derived. Each gate's OWN verdict line, from the union re-run at the final commit:pnpm check:pm-skill-ratchet— "check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 960 lines (ceiling 1005; headroom 45)." and "check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 48 lines (ceiling 48; headroom 0)."pnpm check:skill-frame-sync— "check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files"pnpm check:pm-skill-id-lint— "check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g)."pnpm check:pm-governed-prose— "check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md) and claim no others."pnpm check:pm-governed-merges— "live: the real generator declared 9 output(s) and certified this tree" (self-test: 230 assertions pass)pnpm check:doc-authoring— "doc authoring guard: 48 published skill files clean — no internal issue-id references." plus the other three verdict lines, all clean.pnpm check:agent-test-spelling— "check-agent-test-spelling: 0 violations — 413 file(s) · 5085 bare--token(s) · 1284 launcher-rooted run(s) · 9 separator(s) JUDGED"pnpm --filter @objectstack/lint run check:doc-formula-expressions— "check:doc-formula-expressions: 22 record-scoped formula example(s) across 426 files / 1451 TS blocks judged clean by@objectstack/formula." Two PREREQUISITE NOT MET legs were satisfied per the gate's own printed fix (built@objectstack/formula, then@objectstack/lint, both through the shared verify lock) before this verdict.node scripts/pm/check-governed-queue-guard.mjs— NOT MEASURED locally, by the gate's own design: "Governed Surface Queue Guard: could not read GITHUB_EVENT_PATH … without it there is no diff to judge, and 'could not look' must never exit 0 here." It judges the workflow event payload, which exists only in CI.pnpm check:nul-bytes— "check-nul-bytes: OK (scanned 7541 text file(s) — 7541 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes)."Governed surface posture
The diff touches
.claude/**— a governed surface (Prime Directive 14). This PR stays draft; no ready flip, no queueing, no auto-merge, no review submitted by any agent seat; the landing is the maintainer's.skip-changesetapplied and read back (closed-list class: the diff publishes nothing from any package). No model IDs anywhere in the pushed diff, the commit, or this body.Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de
Generated by Claude Code
Generated by Claude Code