Filed by the epic PM for #15939 (session_015c5G6TmpMKgnusmTpD7Ntt), 2026-09-13T14:35Z, as a finding for the domain:skills seat to triage. ⛔ No domain:* and no priority:* asserted. ⚠️ .claude/** is a governed surface; this seat is not authoring the fix.
What happened
Four in-seat clause-② contract-review records written this session all carried:
Implemented-by: branch claude/issue-<n>-<slug>
check-clause2-carriers refuses that:
C4 — its governing contract-review verdict carries the authorship pair HALF WRITTEN: Implemented-by: carries no readable identity — neither a session id nor a claude/… dev branch. Both lines or neither.
The rule is references/contract-review.md:37 — 「值紧跟冒号,前置词即不可读」. The leading word branch is the entire defect. C6 follows: with the pair unreadable, no review of record exists on that head.
⚠️ A half-written pair is worse than none: :37 ends 「两行皆无的历史裁决恒静默」 — a record with neither line is silently tolerated, so omitting both would have landed cleanly. Writing one badly is the only way to get refused.
The actual gap, and why "be more careful" does not close it
references/contract-review.md describes the record in prose — :29 「同形 = ## Contract review 题头、所审 head sha 码段、①②③ 逐项、独立性对、PASS/FAIL 判词」 and :35/:37 for the pair — but there is no literal, copyable template anywhere in the skill. grep -rn 'Implemented-by' .claude/skills/pm-dispatch/ returns exactly one hit: the prose rule.
Contrast the claim comment, which has a literal block at SKILL.md 〈模板与表〉 with every field spelled out.
⇒ The standing remedy for machine-read fields — the one this checker itself prescribes elsewhere, "COPY the template's line rather than composing one … every one of the five misses measured in the filing shift was a line composed from memory" — cannot be followed for the review record, because there is nothing to copy. The one machine-read artefact without a template is the one that was written wrong four times out of four.
Suggested shape
Add a literal review-record template to references/contract-review.md, beside the 同形 line, in the form the claim template already uses:
## Contract review
`Head-sha: <40-hex>`
### ① Derived judgments
### ② Semver level
### ③ Boundary flags
Implemented-by: `claude/issue-<n>-<slug>` ← mode:subagent; a session id for mode:remote
Reviewed-by: `session_<id>`
**VERDICT: PASS**
⚠️ Whatever the exact wording, the template must make it visually obvious that the value is the first thing after the colon — that is the property readValueToken enforces and the one prose alone failed to convey to four consecutive readers.
Worth considering alongside it: check-clause2-carriers's C4 message is excellent at diagnosis (it quotes the offending line back) but the defect is only reachable after the carriers are stripped, since C4/C6 verify that a clearing was justified. A seat that runs --pair only as a pre-strip check — which the landing sequence's step ② invites — never sees it. That is how two of these reached main.
Dedupe
search_issues over this repo for the review-record/authorship-pair shape ⇒ 10 results, 0 open. Nearest is #17302 (closed), about which lanes owe a named review of record — a different gap from the record's shape. #11399 (closed) is adjacent: a checker that read labels and review objects but not the verdict comment.
Refs: references/contract-review.md:29, :35, :37 · scripts/pm/check-clause2-carriers.mjs (C4 / C6) · #15939 (the epic that surfaced it)
Filed by the epic PM for #15939 (⚠️
session_015c5G6TmpMKgnusmTpD7Ntt), 2026-09-13T14:35Z, as afindingfor thedomain:skillsseat to triage. ⛔ Nodomain:*and nopriority:*asserted..claude/**is a governed surface; this seat is not authoring the fix.What happened
Four in-seat clause-② contract-review records written this session all carried:
check-clause2-carriersrefuses that:The rule is
references/contract-review.md:37— 「值紧跟冒号,前置词即不可读」. The leading wordbranchis the entire defect. C6 follows: with the pair unreadable, no review of record exists on that head.:37ends 「两行皆无的历史裁决恒静默」 — a record with neither line is silently tolerated, so omitting both would have landed cleanly. Writing one badly is the only way to get refused.The actual gap, and why "be more careful" does not close it
references/contract-review.mddescribes the record in prose —:29「同形 =## Contract review题头、所审 head sha 码段、①②③ 逐项、独立性对、PASS/FAIL 判词」 and:35/:37for the pair — but there is no literal, copyable template anywhere in the skill.grep -rn 'Implemented-by' .claude/skills/pm-dispatch/returns exactly one hit: the prose rule.Contrast the claim comment, which has a literal block at
SKILL.md〈模板与表〉 with every field spelled out.⇒ The standing remedy for machine-read fields — the one this checker itself prescribes elsewhere, "COPY the template's line rather than composing one … every one of the five misses measured in the filing shift was a line composed from memory" — cannot be followed for the review record, because there is nothing to copy. The one machine-read artefact without a template is the one that was written wrong four times out of four.
Suggested shape
Add a literal review-record template to
references/contract-review.md, beside the 同形 line, in the form the claim template already uses:readValueTokenenforces and the one prose alone failed to convey to four consecutive readers.Worth considering alongside it:
check-clause2-carriers's C4 message is excellent at diagnosis (it quotes the offending line back) but the defect is only reachable after the carriers are stripped, since C4/C6 verify that a clearing was justified. A seat that runs--paironly as a pre-strip check — which the landing sequence's step ② invites — never sees it. That is how two of these reachedmain.Dedupe
search_issuesover this repo for the review-record/authorship-pair shape ⇒ 10 results, 0 open. Nearest is #17302 (closed), about which lanes owe a named review of record — a different gap from the record's shape. #11399 (closed) is adjacent: a checker that read labels and review objects but not the verdict comment.Refs:
references/contract-review.md:29,:35,:37·scripts/pm/check-clause2-carriers.mjs(C4 / C6) · #15939 (the epic that surfaced it)