docs(pm-dispatch): name what IS and is NOT build-tier evidence in the downgrade fuse - #17199
Draft
os-justin wants to merge 1 commit into
Draft
docs(pm-dispatch): name what IS and is NOT build-tier evidence in the downgrade fuse#17199os-justin wants to merge 1 commit into
os-justin wants to merge 1 commit into
Conversation
… fuse `references/contract-review.md` 〈降档保险丝(机读)〉 said how a seat's own served tier is READ, and that a self-description is not a reading — it never said which artefacts are NOT tier evidence. A commit trailer carries a model string, so a reader who has not seen the AGENTS.md model-free trailer rule takes it for a tier stamp. That misread once held a PR and cost a withdrawal. Adds one line under that section carrying both halves: the two admissible sources for the tier the work was BUILT at (the harness `model` stamps; the claim's `Container & model:` line) and the exclusion (the `Co-Authored-By` trailer is a session-attribution constant, never evidence of tier). The file sits at its ratchet ceiling (60/60, headroom 0), so the added line is paid by a deletion inside the file — never a re-wrap and never a ceiling raise. The deleted line is the 外部评审链 bullet in 复核归属与资格, whose rule is already stated in `SKILL.md` (「外部评审链降为可选事后审计,非放行前提。」) and whose two named chains are stated in `references/lanes/director.md`, where the duties of those chains live. The rules-only rewrite convention for this corpus is one rule per line and no rule already stated in SKILL.md, so the bullet was a restatement — the ratchet's own header had already classified it as one. Claude-Session: https://claude.ai/code/session_01MoTv7pn338AZ71owsp19gQ Co-authored-by: Claude <noreply@anthropic.com>
Collaborator
Author
维护者速读改了什么 — 内部 PM 技能的一份参考文档( 为什么改 — 这份文档原本只写「档位怎么读」,没写「什么不是档位证据」。commit 署名行里带模型名,没读过署名规则的人会把它当档位盖章;这个误读在 PR #16862 上真发生过,拦下了一个已达档的 PR,总监席事后撤回。补一行堵住这个缺口,是总监席自己留的指令(#16836 上,5585423511),上一次折叠 PR 有意没带,所以单独立卡 #17139。 风险与代价(含回滚) — 纯文档、不发布、不进产品、任何包都没碰,不需要 changeset。文件已顶到 60 行天花板,新增一行必须删一行;删的是已在别处成文的重复行,三个门禁自测在此分支上全绿,说明没有任何门禁钉着被删的那行。若不认可这个交换,回滚就是 revert 这一个提交。 席位意见 — 本席复核通过:新增行两个半句都在、120 字节踩线不超、被删行确是重复;CI 25 项全绿;合并无冲突。建议合并。 你要做的 — 受管面走人工合并:读一遍新增那行与被删那行,认可即批准并合并这个 PR。是否合并? Generated by Claude Code |
This was referenced Sep 9, 2026
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.
Fixes #17139
One line added to
.claude/skills/pm-dispatch/references/contract-review.mdunder 〈降档保险丝(机读)〉, naming what IS admissible evidence of the tier a build ran at and what is NOT. Docs-only, governed surface, no package touched.Added (118 bytes measured, under the 120-byte per-line pin):
It carries both halves of the director seat's instruction: the two admissible sources (the harness
modelstamps; the claim'sContainer & model:line) and the exclusion (theCo-Authored-Bytrailer is a session-attribution constant, never evidence of tier).施工档is this corpus's own term for the tier work was built at (references/lanes/cli.md: 「只定复核档不定施工档」), the counterpart to服役档already used three lines above. The card's working spelling measured 145 bytes and did not fit, so the spelling was tightened; both halves survive intact and no model identifier appears in it.Placed directly after 「转录档位核验:… harness 逐消息盖章的
model字段。」 — that line names the harness stamp as a reading; the new line closes the set around it and names the artefact that is not in it.Line budget — paid by deletion, not by re-wrap
The file sits at its ratchet ceiling:
check-skill-line-ratchetreads it at60 lines (ceiling 60; headroom 0)both before and after. The added line is paid by deleting one line inside the same file:Why it was the redundant one:
SKILL.md〈入队与落地〉: 「外部评审链降为可选事后审计,非放行前提。」 The rules-only rewrite convention for this corpus is one rule per line, no rule already stated in SKILL.md — the ratchet's own ceiling comment states it, and this file's first line scopes itself to 载体纪律、归属资格与降档保险丝.references/lanes/director.md, where those chains' duties live::31「裁决仍被尊重但非放行必要条件」 and:71「契约复核的放行归派发席席内,定时轮与本席降为可选事后审计」.check-skill-line-ratchet.mjs's own header had already classified this bullet as a restatement, rejected as payment then only because a byte trim (−24 B) could not move a LINE ratchet. After the rules-only rewrite the bullet is exactly one line, so deleting it banks the line the ratchet prices.director.md:71defers to this file (「../contract-review.md为准」) for 契约复核的放行归属 — that deferral still resolves: 放行 = 清标即落地 and 落地前检三条 are untouched here.外部评审链/事后审计/放行必要条件appear in no gate assertion (only in acheck-skill-line-ratchet.mjsnarrative comment). A per-line scan of the file against every file underscripts/and.claude/shows the pinned lines are elsewhere — L16/L19/L20/L23 (check-half-states,check-clause2-carriers), L29/L44 (check-clause2-carriers) — and none of them is the deleted line or a line in the edited section.No ceiling raise, no re-wrap, no edit to
check-skill-line-ratchet.mjs, noSKILL.mdedit.维护者速读(草稿)
改了什么 — 内部 PM 技能里的一份参考文档加了一行:说清「这次活是在哪个档位上干的」这件事,证据只认两处(harness 逐消息盖的
model戳、认领评论里的 Container & model 行),并点名一个不算证据的东西(commit 的Co-Authored-By署名行)。同一份文档里删掉一行重复内容付账,总行数不变。为什么改 — 这份文档原本只写了「档位怎么读」,从没写「哪些东西不是档位证据」。commit 的署名行里带模型名,没读过 AGENTS.md 那条署名规则的人会把它当档位盖章;这个误读真的发生过一次,拦住了一个 PR 并导致撤回。规则缺口的代价是重复的返工,补一行就堵住。
风险与代价(含回滚) — 风险很低:纯文档、不发布、不进产品,任何包都没碰,不需要 changeset。代价是文档预算:文件已经顶到 60 行天花板,新增一行必须删一行,这里删的是 SKILL.md 已经写过、总监席车道文件也写过的那条「外部评审链是可选事后审计」。若判断删错,回滚就是 revert 这一个提交,单文件一行进一行出,没有连带。
席位意见 —
你要做的 — 读一遍新增那行和被删那行,确认这个交换你认可,然后合并这个 PR(受管面,走人工合并)。
Acceptance notes
Gates — all 14 families
dispatch-gates.mjsderives for this change set, run locally, exit code captured before any pipe:check:pm-skill-ratchet✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).check:nul-bytescheck-nul-bytes: OK (scanned 8079 text file(s) … no raw ASCII control bytes).check:doc-authoring✓ doc authoring guard: 403 files clean — no bare metadata literals.check:pm-skill-id-lint✓ check-skill-id-lint: 26 file(s) cleancheck:skill-frame-sync✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 filescheck:pm-governed-merges✓ check-governed-merges --self-test: 274 assertionscheck:agent-test-spellingcheck:doc-formula-expressionscheck:driver-memory-censuscheck-driver-memory-census: OKcheck:refd-timer-probeOK check-refd-timer-probe: 6433 source file(s) sweptcheck:watch-hint-literal✓ check-watch-hint-literal: 67 declaration(s) across 4 rostered name(s)check-closing-keyword-parity.mjs(+--self-test)check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords …)check-comment-mask-corpus.mjs✓ comment-mask corpus sweep: 6438 files, 0 disagreeReconciliation:
dispatch-gates.mjs --ranreads14 derived, 14 run, 0 NOT-MEASURED, 0 UNRUN.check:doc-formula-expressionsfirst exited 3 — PREREQUISITE NOT MET (@objectstack/formula/@objectstack/lintnot built), which is NOT MEASURED, not a finding. It was re-run green afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the shared verify lock (VERDICT command-exit 0 · held the lock 289s).Self-tests run where the gate carries one:
check-half-states --self-test(2976 cases),check-widening-tells --self-test(150 cases),check-clause2-carriers --self-test(299 cases) — all exit 0. Repo-widepnpm lintis CI's run, not owed here; the diff adds no source file.Control-character self-scan beyond the gate, on the edited file:
grep -naPover the C0 range plus DEL → no match.PM mechanism assumptions, measured:
check-skill-line-ratchet.mjs(MAX_LINE_BYTES = 120;['.claude/skills/pm-dispatch/references/contract-review.md', 60]). Measured before and after; the verdict line is quoted above.check-half-states.mjsandcheck-clause2-carriers.mjsdo pin strings inside this file — but in 载体纪律 (L16/L19/L20/L23) and 复核归属 (L29/L44), never the deleted line and never a line in 降档保险丝.check-widening-tells.mjspins none of this file's lines. The edited section carries no gate-pinned string.7337179dis no longer the tip:origin/mainisc3756ff0, 4 commits ahead, none of which touches this file. Work is based onc3756ff0; the target section's line numbers were re-read from that tree rather than from the card.Scope: nothing else changed. No changeset —
.claude/**publishes nothing (no packagefiles[]ships it), soskip-changesetis the honest label; no changeset gate demanded one in the run above.Out-of-scope, noted and not filed:
check-skill-line-ratchet.mjs's ceiling narrative still describes the 外部评审链 bullet as a rejected payment candidate. That text is a record of a past raise, not a live claim about the tree, and the ratchet reads line counts rather than that prose — history, not a defect. 承接者:无 — no PR or person has reason to open that comment block for this reason.Generated by Claude Code