Skip to content

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
mainfrom
claude/issue-17139-tier-evidence-line
Draft

docs(pm-dispatch): name what IS and is NOT build-tier evidence in the downgrade fuse#17199
os-justin wants to merge 1 commit into
mainfrom
claude/issue-17139-tier-evidence-line

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #17139

One line added to .claude/skills/pm-dispatch/references/contract-review.md under 〈降档保险丝(机读)〉, 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):

- 施工档只取 harness `model` 盖章或认领 Container & model 行;`Co-Authored-By` = 署名常量 ⛔ 非证据。

It carries both halves of the director seat's instruction: the two admissible sources (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). 施工档 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-ratchet reads it at 60 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:

  • Its rule is already stated in 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 载体纪律、归属资格与降档保险丝.
  • Its extra specificity — which chains — is stated in 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:71 defers to this file (「../contract-review.md 为准」) for 契约复核的放行归属 — that deferral still resolves: 放行 = 清标即落地 and 落地前检三条 are untouched here.
  • It is not pinned by any gate: 外部评审链 / 事后审计 / 放行必要条件 appear in no gate assertion (only in a check-skill-line-ratchet.mjs narrative comment). A per-line scan of the file against every file under scripts/ 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, no SKILL.md edit.

维护者速读(草稿)

改了什么 — 内部 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.mjs derives for this change set, run locally, exit code captured before any pipe:

gate exit verdict line
check:pm-skill-ratchet 0 ✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/contract-review.md is 60 lines (ceiling 60; headroom 0).
check:nul-bytes 0 check-nul-bytes: OK (scanned 8079 text file(s) … no raw ASCII control bytes).
check:doc-authoring 0 ✓ doc authoring guard: 403 files clean — no bare metadata literals.
check:pm-skill-id-lint 0 ✓ check-skill-id-lint: 26 file(s) clean
check:skill-frame-sync 0 ✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files
check:pm-governed-merges 0 ✓ check-governed-merges --self-test: 274 assertions
check:agent-test-spelling 0 self-test + sweep green
check:doc-formula-expressions 0 green after the declared prerequisite build
check:driver-memory-census 0 check-driver-memory-census: OK
check:refd-timer-probe 0 OK check-refd-timer-probe: 6433 source file(s) swept
check:watch-hint-literal 0 ✓ check-watch-hint-literal: 67 declaration(s) across 4 rostered name(s)
check-closing-keyword-parity.mjs (+ --self-test) 0 check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords …)
check-comment-mask-corpus.mjs 0 ✓ comment-mask corpus sweep: 6438 files, 0 disagree

Reconciliation: dispatch-gates.mjs --ran reads 14 derived, 14 run, 0 NOT-MEASURED, 0 UNRUN.

check:doc-formula-expressions first exited 3 — PREREQUISITE NOT MET (@objectstack/formula / @objectstack/lint not built), which is NOT MEASURED, not a finding. It was re-run green after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under 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-wide pnpm lint is CI's run, not owed here; the diff adds no source file.

Control-character self-scan beyond the gate, on the edited file: grep -naP over the C0 range plus DEL → no match.

PM mechanism assumptions, measured:

  • A holds. The 60-line ceiling and the 120-byte per-line pin are both 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.
  • B holds, and it changes nothing here. check-half-states.mjs and check-clause2-carriers.mjs do 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.mjs pins none of this file's lines. The edited section carries no gate-pinned string.
  • C is stale in the safe direction. 7337179d is no longer the tip: origin/main is c3756ff0, 4 commits ahead, none of which touches this file. Work is based on c3756ff0; 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 package files[] ships it), so skip-changeset is 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

… 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>
@os-justin os-justin added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 9, 2026 — with Claude
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 9, 2026

Copy link
Copy Markdown
Collaborator Author

维护者速读

改了什么 — 内部 PM 技能的一份参考文档(contract-review.md)加了一行、删了一行,总行数不变。新增那行说清「这次活是在哪个档位上干的」只认两种证据:harness 逐消息盖的 model 戳,和认领评论里的 Container & model 行;并点名 commit 的 Co-Authored-By 署名行不算档位证据。删掉的那行是「外部评审链只是可选的事后审计」,这条规则 SKILL.md 与总监席车道文件里都已写着。

为什么改 — 这份文档原本只写「档位怎么读」,没写「什么不是档位证据」。commit 署名行里带模型名,没读过署名规则的人会把它当档位盖章;这个误读在 PR #16862 上真发生过,拦下了一个已达档的 PR,总监席事后撤回。补一行堵住这个缺口,是总监席自己留的指令(#16836 上,5585423511),上一次折叠 PR 有意没带,所以单独立卡 #17139

风险与代价(含回滚) — 纯文档、不发布、不进产品、任何包都没碰,不需要 changeset。文件已顶到 60 行天花板,新增一行必须删一行;删的是已在别处成文的重复行,三个门禁自测在此分支上全绿,说明没有任何门禁钉着被删的那行。若不认可这个交换,回滚就是 revert 这一个提交。

席位意见 — 本席复核通过:新增行两个半句都在、120 字节踩线不超、被删行确是重复;CI 25 项全绿;合并无冲突。建议合并。

你要做的 — 受管面走人工合并:读一遍新增那行与被删那行,认可即批准并合并这个 PR。是否合并?


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

1 participant