Skip to content

docs(pm-dispatch): the clause-2 label rides the reviewable increment, not the grading stroke - #13618

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13557-no-prehang-correction
Aug 31, 2026
Merged

docs(pm-dispatch): the clause-2 label rides the reviewable increment, not the grading stroke#13618
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-13557-no-prehang-correction

Conversation

@zhuangjianguo

Copy link
Copy Markdown
Collaborator

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; 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).

Before:

派发席职责止于:卡上记一行认定、挂 `needs:contract-review`(标签命名审的对象,恒英文)、
停手;⛔ 禁止自查放行。挂标仅当**可复审契约增量已存在**(draft PR,或先到的报告);

After:

派发席职责止于:卡上记一行认定、停手;⛔ 禁止自查放行。`needs:contract-review`(标签
命名审的对象,恒英文)由 PR 创建者随**可复审契约增量**同笔挂(draft PR,或先到的报告);

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.md line 10, verbatim as it stands in the file:

  • 不预挂(维护者 2026-08-28 裁定):可复审增量存在前永不挂标,队列/受阻卡的提前挂已废
    止 —— 前瞻条款②事实走主文件闸门段的三条既有通道;开载体恒 = 真实待审。

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-review occurrence in SKILL.md, adjudicated

Four hits at the base ref; measured again at the head ref:

  • Line 147 — kept, compliant as-is: the label is the worked example of gate-semantic labels inside the read-modify-write plus comparative read-back discipline for label writes. No hang-timing instruction.
  • Line 589 — kept, compliant as-is: states that the quota-exhaustion exemption and its needs:contract-review compensation 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.
  • Line 758 — rewritten (this PR).
  • Line 897 — kept, compliant as-is: the director-seat four-duty list names the needs:contract-review review 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:path file-wide counts)

anchore2debee (base)7e5871d (head)expected
negative 「认定、挂」 (pre-hang duty-list adjacency)101 → 0
negative 「挂标仅当」 (old bare-condition spelling)101 → 0
positive 「记一行认定」111 → 1
positive 「禁止自查放行」111 → 1
positive 「恒英文」222 → 2
positive 「前瞻预挂已废止」111 → 1
positive 「可复审契约增量」111 → 1
positive needs:contract-review444 → 4
new 「PR 创建者」010 → 1

Every 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.
  • Added beyond the derivation (any-edit family): 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-changeset applied 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

… 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
@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 05:12
@zhuangjianguo
zhuangjianguo added this pull request to the merge queueAug 31, 2026
Merged via the queue into main with commit 5364d2eAug 31, 2026
29 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-13557-no-prehang-correction branch August 31, 2026 05:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/xsskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants

@zhuangjianguo@os-zhuang@claude