Skip to content

docs(agents): the comment rule exempts a verbatim maintainer ruling preserved as a quotation block - #18315

Draft
claude[bot] wants to merge 2 commits into
mainfrom
claude/issue-18092-agents-md-quotation-exemption
Draft

claude[bot] wants to merge 2 commits into
mainfrom
claude/issue-18092-agents-md-quotation-exemption

Conversation

@claude

@claude claude Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Fixes #18092

What this PR does

AGENTS.md's comment rule (the Commit message: sentence group, :440–:444) gains the one closed exemption ruled on the card, in place, at the 1075-line ceiling. No probe changes, because none reads prose for model identifiers (measured below). The diff is four lines of AGENTS.md and nothing else.

Landing: this is the rules layer, so this PR is a draft and stays one until an authorized APPROVED review; the owning seat lands it afterwards. Per ruling C on #17971, no seat readies, queues or arms it, and this dev requests no reviewer. skip-changeset: nothing published moves.

The ruling (comment 5682890409, letter A, quoted verbatim and untranslated)

  • A — AGENTS.md's comment rule (:442 「no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment」) gains one closed exemption: a verbatim maintainer ruling preserved as a quotation block (the seat-post protocol's 「原话照抄不译」 act). The exemption names the quotation form only; a model identifier a seat writes in its own prose stays a violation (PR fix(pm): the Served-tier line names the tier constant, never a model identifier — AGENTS.md's comment rule (#18060) #18087's class).
  • The model-identifier probes (the H64 family and any 型号探针 audit) exclude quotation blocks so they stop counting preserved rulings.
  • B (rewrite preserved rulings) and C (leave it to each seat) are refused; triage 5656662371's reading stands: a cleanup that rewrites maintainer quotes would be worse than the problem. ⛔ No existing quotation is edited.

The sentence (before → after, AGENTS.md :440–:444)

Before (five lines, 77 / 107 / 111 / 104 / 113 bytes):

…no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment. The one exemption is a REPORTING one: a harness-written Co-Authored-By trailer is not declared a deviation; the pair stays model-free; landed history is not rewritten.

After (five lines, 77 / 115 / 116 / 119 / 110 bytes; :440 byte-identical, :441–:444 reflowed within the same five lines):

…no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment. Two exemptions: a harness-written Co-Authored-By trailer (REPORTING: not declared a deviation; landed history is not rewritten) and a verbatim maintainer ruling preserved as a quotation block.

The exemption phrase is the ruling's own wording. The maintainer edits wording and placement at review — nothing here is polished beyond the ruling.

Why in place, and what paid for it (the breach the dispatch asked me to stop on)

The dispatch's route was "extend :443–:444 in place; a long line is legal there (14 lines already exceed 120 chars)". Measured: pnpm check:pm-skill-ratchet applies a 120-byte width rule to every ceilinged file, AGENTS.md included, and the 14 over-width lines are all table rows or the one blockquote — structurally exempt classes. A prose line over 120 bytes goes red (lengthVerdict, silent on pass). So the sentence had to fit five lines of at most 120 bytes each. Byte math (greedy wrap, code spans as atoms): the group's usable capacity is 77 + 4×120 minus wrap loss; every wording that also kept the clause "the pair stays model-free" and the 「原话照抄不译」 parenthetical needed a sixth line (the tightest such wording overflowed by exactly the 27-byte parenthetical). No line in the paragraph says nothing the new sentence does not, so the "paid line in the same paragraph" route had no candidate.

What paid: the deletion of the restated clause "the pair stays model-free;" — :440 already says the commit "ends with the model-free trailer pair" and :442 says "the pre-push hook refuses a model identifier in that pair", so the clause restates the sentence group's own first sentence and its hook. Content deletion is the ratchet's only legal currency; no line was folded to buy one (line count 1075 → 1075, and the reflow of :441–:444 frees nothing). The 「原话照抄不译」 act-name is carried here and on the card rather than in the sentence; the maintainer may prefer it in the sentence, in which case the ceiling needs a ruled +1 (the ratchet's CEILINGS entry for AGENTS.md has precedent for a ruled raise) — that is the maintainer's call, not this dev's.

The probes — measured; none reads prose for model identifiers, so none changes

candidate what it reads keys on identifiers? reads prose?
scripts/check-commit-card-trailers.mjs (:848 iterates four id literals in its self-test) the trailer BLOCK of unpushed commit messages; header: 「WHAT IS JUDGED is the trailer VALUE, and only inside the trailer block」, 「⛔ NOT the message body」 yes — MODEL_ID_FORM on the trailer value no
.githooks/pre-push invokes the gate above with the pushed refs via the gate no
scripts/check-agent-model-declared.mjs the YAML frontmatter model: key of .claude/agents/*.md; a model: mention inside description prose is pinned as NOT a declaration validates the pin's shape no
scripts/pm/check-clause2-carriers.mjs (isModelIdentifierToken) the single Served-tier: token of a review-of-record comment; header: 「What a seat writes AFTER the token is its argument, which this file does not read」 yes — on that one token no
scripts/pm/check-governed-queue-guard.mjs the same Served-tier: token through the clause-2 predicate yes — same token no
scripts/pm/check-half-states.mjs H64 a seat/dev-signed artefact that names no session_ id (h64SpeaksAbout = seat signature present AND no session id) no — session ids, not identifiers reads bodies, but never for identifiers
scripts/pm/check-half-states.mjs H65 (merged from origin/main at 10a7b9fa during this PR) a triage round artefact that names no tier no same
.claude/hooks/*, packages/lint/scripts/*, .github/workflows/* zero identifier-shaped regexes (one workflow comment mentions a pin) no
a 型号探针 recipe in the skill tree grep of .claude/skills/pm-dispatch/** and .claude/agents/** for 型号 / 探针 no such recipe exists; every 探针 hit is a REST/queue probe

So the ruling's probe half has no in-tree target: the seat's own ad-hoc greps were the only "型号探针", and they are not repository code. A self-test case "a quotation block carrying an identifier is not counted; a seat-prose identifier still is" has nothing to attach to without inventing a new prose scanner, which would be scope the card does not carry.

Quotation form (measured on the protocol and the live seat posts)

The protocol names the act as 裁决引文照抄不译 (.claude/skills/pm-dispatch/SKILL.md :100; references/core-rules.md :26) and AGENTS.md Communication says 「引用中文裁决时保持原文、不翻译」. On the live posts, every identifier-carrying preserved ruling is a 「…」 corner-bracket span inside prose labelled 原话照抄不译 / 逐字 / verbatim — #6015 L128 and L130, #6021 L24, L34 and L136 — and zero are Markdown blockquotes (> …); the 47 blockquote lines in #6015 are the seat's own correction notes, #6021 and #7623 carry none. The ratchet's own exemption classes already recognise both shapes as verbatim maintainer rulings (quotation = a multi-line 「…」/『…』 ruling; blockquote = 「Every blockquote in this corpus is a verbatim maintainer ruling」). The sentence pins the ruling's letter, "a quotation block", and this PR pins no narrower form in code because no code reads one.

Verification

  • Gates derived on the merge commit b671f83b by node scripts/pm/dispatch-gates.mjs --commands (14 families, identical to the derivation on dc3d1c16): check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus, check:agent-test-spelling, check:docs-audit-scope, check:driver-memory-census, check:nul-bytes, check:pm-governed-merges, check:pm-governed-prose, check:pm-skill-id-lint, check:pm-skill-ratchet, check:refd-timer-probe, check:required-contexts, check:watch-hint-literal — all exit 0; --ran reconciliation: 「14 derived famil(ies) accounted for — 14 run, 0 NOT-MEASURED」.
  • pnpm check:pm-skill-ratchet: 「AGENTS.md is 1075 lines (ceiling 1075; headroom 0)」, no width offender; check:pm-skill-id-lint: 27 files clean; node scripts/check-self-test-wired.mjs: exit 0. The battery check:pm-dispatch-gates was not derived and was not run; no .mjs was touched, so no ESLint run is owed.
  • Ablation from the committed state (dc3d1c16, whose AGENTS.md blob 98e7cd4a is the merge commit's blob too): base blob 7c7a5eee restored with git restore --source=BASE (on-disk hash proven equal) → the sentence count reads 0 and the restated clause reads 1, ratchet exit 0 at 1075 lines; HEAD blob restored with git checkout HEAD -- AGENTS.md (hash proven equal), git diff HEAD and git status --porcelain both empty; restore trap on EXIT/INT/TERM. On HEAD the sentence count reads 1 and the restated clause reads 0.

Acceptance notes

  • noted, not filed: the dispatch's premise that a long prose line is legal in AGENTS.md is false under the ratchet's width rule; the 14 over-width lines are table rows and one blockquote. 承接者: the skills seat's next AGENTS.md dispatch reads the lengthVerdict exemption classes before choosing "extend in place".
  • noted, not filed: the ruling's probe half names 「the H64 family」; H64 keys on session ids and never on identifiers, so the exclusion it asks for has no code to land in. 承接者: the director seat, if a prose scanner is ever proposed.
  • origin/main moved once under this branch (feat(pm): the half-state patrol reads the tier a triage round artefact names #18311, scripts/pm/check-half-states.mjs only); merged in, never rebased; the union was re-run on the merge commit.

维护者速读(草稿)

改了什么:AGENTS.md 的评论规则句组(:440–:444)从「唯一豁免是 REPORTING」改为「两条豁免」:harness 写入的 Co-Authored-By trailer(REPORTING:不申报为偏差;已落地历史不改写)与逐字保存为引用块的维护者裁决。行数 1075 → 1075,每行 ≤120 字节。

为什么改:你在 #18092 批准了 A:座位贴按制度把你的裁决原话照抄不译,原话里若带型号,转抄不算违规;席位自己写的型号仍算。探针半边:仓库里没有任何脚本按型号扫描散文(逐一实测列在正文表格),所以没有探针要改。

风险与代价(含回滚):代价是删掉了「the pair stays model-free;」这句重述(句组首句与 pre-push hook 已各说一次),以及豁免句里没放 「原话照抄不译」 这个名字(字节装不下;若你要放进去,需要你裁一次上限 +1)。回滚 = revert 这一个提交,无发布物。

席位意见:(留空,席位定稿)

你要做的:审阅措辞与位置(你可直接改),若同意则给 APPROVED,由 skills 席落地;不同意「删重述句」的付账方式,则改裁「上限 +1」或指一行删除。


Generated by Claude Code

…reserved as a quotation block

AGENTS.md's comment rule gains one closed exemption beside the reporting
one: a verbatim maintainer ruling preserved as a quotation block. The
sentence lands in place in the Commit message sentence group at the
1075-line ceiling; the restated clause about the pair staying model-free
is the payment (the group's first sentence and the pre-push hook already
say it), and every line stays within the 120-byte width rule.

No probe in the tree reads prose for model identifiers: the pre-push gate
judges the trailer value only, the Served-tier readers judge one token,
the agent-model gate reads frontmatter pins, and the H64 row keys on
session ids. So no probe changes.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HZfg2AwVX191qCizp88gQr
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 15, 2026
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 15, 2026
@claude

claude Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: b671f83b397dd56675729934b968c8156db19cc8

Reviewing seat: domain:skills, in-seat review at the contract-review tier — get_session read at 2026-09-15T07:15Z: configured_model = session_context.model = last_served_model, the constant's tier, no fallback notice this round. Card #18092 (a decision card RULED A by the director seat, 5682890409, batch #136 item 1, the maintainer's 「同意」), claim 5683666281, report 5684175190 (posted through the tool; read back footer-appended); Clause-②: no on the claim; the dev held at the review tier by the seat's judgment (rules layer); seat review at tier.

① Derived judgments

  • Accept set / public surface: none moves — AGENTS.md (+4/−4, lines :441–:444 reflowed within the same sentence group, :440 byte-identical, 1075 → 1075 at the 1075 ceiling) against merge-base 10a7b9fa; nothing published; skip-changeset read back. Rules layer ⇒ four-piece: this record, the 速读终稿 below, ACCEPT on the card, needs-user-decision + reviewers; lands by ruling C after an authorized APPROVED review.
  • The change, read in full on a detached worktree of the head: the comment rule's sentence group now reads 「…no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment. Two exemptions: a harness-written Co-Authored-By trailer (REPORTING: not declared a deviation; landed history is not rewritten) and a verbatim maintainer ruling preserved as a quotation block.」 — the ruling's letter A verbatim for the exemption; the identifier in a seat's own prose stays a violation by the unchanged first clause. Payment at the ceiling: the restated clause 「the pair stays model-free;」 (27 B) dropped — :440 (the model-free trailer pair) and :442 (the hook refuses an identifier in that pair) already say it; the reflow frees no line. Every line ≤120 B (77 / 115 / 116 / 119 / 110 measured by the seat and the dev).
  • The probe half, measured by the dev and accepted by the seat: NO repository code reads prose for model identifiers — check-commit-card-trailers.mjs judges the trailer value only (:848's four ids are self-test fixtures), the pre-push hook invokes that gate, check-agent-model-declared.mjs reads the frontmatter pin, check-clause2-carriers.mjs / check-governed-queue-guard.mjs judge the single Served-tier: token, H64 keys on session ids, H65 on a tier name, hooks / lint scripts / workflows carry no identifier regex, and no 型号探针 recipe exists in the skill tree — the counts the card feared were seat hand-greps. So the ruling's probe clause has no code to land in; the PR is the sentence alone, which the dispatch named as a legitimate outcome. The quotation form on the live posts: every identifier-carrying preserved ruling is a 「」 span labelled 原话照抄不译 ([PM seat] triage (objectstack-wide) — 🔴 空缺 · 上一任 session_01VxjMEAhT53WHUCtP9WMrSU 执 R+235→R+237,2026-09-15T15:55Z 因 harness STALE 机械收班(⛔ 非维护者令),✅ 留完整简报 · ⛔ 接手必读正文:枚举配方已证伪(界内页 200 返 [],须 per_page=50 + 对 open_issues_count)· 裸卡 43>15 欠域分批 · retriage 余 4+11 · 决策箱 5 + objectui 15 #6015 L128 / L130, [PM seat] domain:services — 🔴 vacant · 收班 2026-09-15T17:29Z(harness STALE,SKILL.md:92)· 上一任 session_01URLHobLUJB9K1ABV6ofdjj #6021 L24 / L34 / L136), none a blockquote; the ratchet's own EXEMPTION_CLASSES already treat both forms as verbatim rulings.
  • Gates 14 / 14 / 0 / 0 by --ran on the merge head (the battery not derived); seat re-run on the detached worktree: the same 14 derived commands 14 / 14 green, check:pm-skill-ratchet 「AGENTS.md is 1075 lines (ceiling 1075; headroom 0)」 with no width offender, --pair 18315 0; every check on the head green (2026-09-15T16:41Z reading in the 速读 below). Reverse verification by the dev: ablation with blob hashes (base 7c7a5eee restored — sentence count 0, restated clause 1; HEAD 98e7cd4a restored — sentence 1, clause 0; git diff HEAD empty); no pure-predicate pair because no probe changed.

② Semver level

Not applicable — nothing published moves; skip-changeset measured.

③ Boundary flags

open_questions: none. Seat premises the dev refuted, owned here: (1) 「a long prose line is legal in AGENTS.md」 — false: the 14 over-width lines are table rows and the v5.0 blockquote (EXEMPTION_CLASSES); lengthVerdict holds every prose line to 120 B; (2) 「a same-paragraph line can be paid」 — false, none subsumed, so the payment is the restated clause; (3) the session branch was 2bf6ef18 at dispatch, 6ef33128 / 10a7b9fa by the time the worktree was cut and merged — AGENTS.md untouched by both. Six deviations answered: content payment instead of the two named routes — accepted, the maintainer edits wording at review; the 原话照抄不译 act-name left out of the sentence (27 B short at the ceiling) — accepted, it lives on the card and in the PR body, and a ruled +1 on the ceiling is the maintainer's call; :441 reflowed with :442–:444 — accepted, same sentence group; no probe change / no case — accepted, measured; a tail --pid that waited on the asking shell — a dev-side process note, no process killed by name; Co-Authored-By capitalised as the dispatch spelled it while :441 spells the key lower-case — the pre-push gate accepted it; noted for the seat's dispatch template. Out of scope, noted: the ruling's H64 clause has no code to land in (the director seat's to hear); the width rule for future AGENTS.md dispatches. Landing: ruling C after an authorized APPROVED review by os-zhuang / hotlong — record on this head, --pair 0, checks green, clear needs-user-decision, ready through the CCR route, auto-merge SQUASH; the seat never approves.

Implemented-by: claude/issue-18092-agents-md-quotation-exemption
Reviewed-by: session_01HZfg2AwVX191qCizp88gQr

VERDICT: PASS


Generated by Claude Code

@claude

claude Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿)— PR #18315 / #18092

改了什么:AGENTS.md 第 442–444 行的评论规则加一句闭合豁免——「逐字保存为引用块的维护者裁决」不算违规;席位自己在正文里写的型号仍算违规(第一句未动)。措辞照总监席裁决 A 的原文;行数 1075 不变,代价是删掉了一句重复的「the pair stays model-free」(第 440、442 行已各说一遍)。

为什么没有改探针:dev 逐个测过仓内所有可能读型号的代码——commit trailer 门、pre-push hook、agent 定义 model: 门、clause-2 与队列守卫(只读一个 Served-tier: token)、H64(按 session id)、H65(按层名)、hooks / lint / workflows——没有一个读散文找型号。过去把保存的裁决数成违规的是席位手工 grep,不是仓库代码。所以裁决里「探针排除引用块」这半句没有可落的代码,PR 只有这一句话。

要你做的:审 PR #18315 的措辞与位置(裁决说了由你在 review 时改),同意即 APPROVE;之后由本席按裁定 C 落地。若你想把「原话照抄不译」四字也写进句子,需要把 AGENTS.md 上限抬 1 行(现 1075/1075),那是你的裁定。

其他:席位派发前提有两处被 dev 证伪(AGENTS.md 散文行也受 120 字节宽度限制;同段无可删行),已记入记录 5684207107。


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