docs(agents): say the pre-push hook now refuses a model identifier in the trailer pair - #17771
Conversation
…r pair The rule declared the pair model-free and nothing read it. The clause names the instrument so a reader learns the rule and its enforcement in one place; the script's header stays the authority on what it judges. Paid by density on the existing sentence — no line added, ceiling untouched. Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK Co-authored-by: Claude <noreply@anthropic.com>
维护者速读(终稿)改了什么 — 为什么改 — #17280 实测 5 条开分支 18 个 commit、 风险与代价(含回滚) — 受管面一句话;代码半边本席按契约档复核,自检 56 → 81 例、真钩子推送实测拒了一次、消融证明去掉扫描就放行。回滚 = revert 各自 PR。 席位意见 — 席内按契约复审档复核通过,建议合并;PR #17770 由本席走队列,先后无所谓。 你要做的 — 受管面:请人工合并 PR #17771(本席不翻 ready、不入队、不挂 auto-merge)。 Generated by Claude Code |
Fixes #17280
One clause on the existing 「Commit message」 sentence in
AGENTS.md: the pre-push hook now refuses a model identifier in the trailer pair. The rule already declared the pair model-free; until PR #17770 nothing read it, and a reader of the rule could not tell whether anything ever would.The enforcement itself is PR #17770 (
scripts/check-commit-card-trailers.mjs,Part of #17280). This PR is the governed half and closes the card, because a rule and its instrument are one statement to a reader. ⛔ Draft, human-merged:node scripts/pm/check-governed-merges.mjs --test AGENTS.mdexits 3 (GOVERNED). No seat flips it ready, enqueues it, or arms auto-merge.The edit
Before, the sentence declared the pair and stopped. After, it declares the pair, names the instrument, and continues unchanged:
…and the pre-push hook refuses a model identifier in that pair; no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment.The reporting exemption, the model-free pair and 「landed history is not rewritten」 are untouched, and nothing else in the file moves.Where the hook enforces mechanically, the rule is stated once here and the script's own header is the authority on detail — which is the convention this file already states for itself, so the clause deliberately says what is refused and not how.
Budget
Paid by density, not by a new line. The file is at 1075/1075 under the line ratchet with zero headroom, so the clause is absorbed by re-wrapping the same five lines: two lines changed, ⛔ no line added, ⛔ no rule deleted, ⛔ ceiling untouched.
Every line in the rewrapped block is within the 120-byte budget, and the inline code spans are kept whole on one line each rather than split across the wrap.
Verification
Gates derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(the script took the change set itself, three-dot): 14 commands, all run, all exit 0 — includingcheck:pm-skill-ratchet,check:pm-governed-prose,check:pm-governed-merges,check:pm-skill-id-lintandcheck:nul-bytes. Exit codes were captured before any pipe.skip-changeset: a repo-root instruction file that no package'sfiles[]ships — nothing published moves.维护者速读(草稿)
改了什么 —
AGENTS.md里「Commit message」那句加一条从句:commit 的 trailer pair 里带模型名,现在由 pre-push 钩子当场拒绝。规则文字本身没变,只是把执行者写进了同一句话。为什么改 — 这条规则此前是「声明了但没有任何东西执行」:一个班次里 5 条分支上的 18 个 commit 带着模型名过了绿 CI,另一个席位量到最近 200 个已落地 commit 正文里有 73 个带模型名。按 ADR-0049 的 enforce-or-remove,裁决是 ENFORCE,机制在 PR #17770;本 PR 是规则侧的那一半,让读规则的人同时知道它会被拒。
风险与代价(含回滚) — 风险很小:这是一句话的重排,不新增规则、不改变任何既有判词。代价是
AGENTS.md已在行数棘轮上限,本次以密度支付(重排同一段五行),没有占用未来预算。回滚 = revert 本 PR;规则回到「声明而不执行」的状态,机制 PR 可独立存续或一并 revert,两者没有代码依赖。席位意见 —
你要做的 — 这是受管面,需要你手工合并(⛔ 不进合并队列、不挂 auto-merge)。合并前值得确认一件事:你是否同意「AGENTS.md 拥有这个格子」这一裁决 —— 即 harness 的署名模板写的是带模型名的 co-author 行,而本仓规则要求 model-free,冲突以本仓规则为准。已按此裁决执行;若你的判断相反,机制 PR #17770 需要一并撤回。
Generated by Claude Code