Skip to content

Commit bc2bf01

Browse files
os-litantclaude
andauthored
pm-dispatch: make check-clause2-carriers C4 recognise the live contract-review verdict dialect, and name the session a reviewer writes (#17368)
* pm-dispatch: make `check-clause2-carriers` C4 read the live contract-review verdict dialect C4 (the independence carrier) discriminated a verdict comment with `VERDICT_MARKER` alone -- measured on the 2026-09-01 board, where a verdict opened a fenced `VERDICT: PASS` block. Every verdict on the 2026-09-09 board is written the other way: a `## Contract review` heading, the head as a code span, `**Verdict: PASS WITH FINDINGS**` in bold. All four live specimens read `null`, so C4 had no live population and `--pair` exit 0 said nothing about independence for any pair reviewed in the current dialect. Three halves, all measured offline against the live comment rows: 1. Recognition: `isVerdictComment` accepts EITHER the fenced marker OR H51's heading plus `contractReviewHeadMatch` against the pair's head -- both IMPORTED from `check-half-states.mjs`, the same two facts C6 already reuses, so the two rows cannot disagree about what a verdict looks like. No regex for the verdict WORD in either dialect. 2. Threads: C4 judges the card thread always and the PR thread when `gather` already holds it (COMPLETED pairs). Measured 2026-09-10: all four live verdicts sit on the PR thread and none of the three delivering cards carries a `## Contract review` heading at all, so a card-only C4 stays silent however good its discriminator is. A pending pair's PR-thread verdict is a declared limit, not a bought read. 3. Value decoration: the key regexes tolerate `**Implemented-by:**` -- the colon inside the bold -- but the value readers admitted a leading `**` only with no space after it, so `- **Implemented-by:** `+backticked token read as unreadable. Decoration is now stripped symmetrically; words are not, so `branch `+token and prose values stay refused. `Reviewed-by:` still admits a session only (2026-09-02 reading a, unchanged). The live prose values therefore read `malformed`, which is the true reading of a verdict written without its reviewer's session; the remedy is on the writing side, and `references/contract-review.md` :35-:37 now name it -- the seat that renders or ADOPTS the verdict writes its own session, and an adoption record already carries one. Self-test: C4 battery 52 -> 89 cases (390 -> 396 total), fixtures taken from the live bodies, one per dialect. The C6 reference record's `Implemented-by:` value is corrected to put its token first after the colon: written `branch `+token it reads `malformed` the moment C4 can see the dialect, which is a real carrier defect and belongs on the defective specimen, never on the reference one. Claude-Session: https://claude.ai/code/session_01YKEjmbYNvYWJvWGSWx26zK Co-authored-by: Claude <noreply@anthropic.com> * pm-dispatch: keep the contract-review tier's model id out of C4's fixtures `dispatch-gates --self-test` holds the tier constant's VALUE to exactly one spelling under `.claude/skills/pm-dispatch` + `scripts/pm` -- the maintainer's own rule, 「needs:fable-review 这个标签不好,下次模型升级怎么办」. The C4 fixtures added for the 2026-09-09 dialect quoted the model id out of the live bodies (five sites), which reds that case. The fixtures carry the SHAPE, not the id: a `Reviewed-by:` value that is prose with no session token is what the reader is being pinned on, and the model name is decoration. Importing the constant was tried and rejected -- it makes `check:pm-clause2-carriers` name a path while its own marker declares no-path-population, which reds a different case in the same self-test. Claude-Session: https://claude.ai/code/session_01YKEjmbYNvYWJvWGSWx26zK Co-authored-by: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 76c9fab commit bc2bf01

2 files changed

Lines changed: 323 additions & 35 deletions

File tree

.claude/skills/pm-dispatch/references/contract-review.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@
3232
- ③ 边界旗处置:dev 挂旗与 `open_questions` 逐旗答复或升级。
3333
- 独立性件,spec 席:契约判断真分叉或 dev 挂旗 ⇒ 起上下文隔离的达档复核子代理。
3434
- 只喂卡片、既有裁决与 PR 本体,⛔ 不喂派发令与派发席自己的结论;简报写成对抗性。
35-
- 裁决载独立性对(机读):产出 diff 的身份写 `Implemented-by:`,出裁决的席位写 `Reviewed-by:`
36-
- `mode:subagent` dev 记其分支 `claude/issue-…`(子代理无自有 session);`mode:remote` dev 记 session id
37-
- 两者同 session ⇒ 报 SELF-REVIEW,⛔ 不作独立复核;两行皆无的历史裁决恒静默。
35+
- 独立性对(机读):`Implemented-by:` 写产 diff 者身份;`mode:subagent` 记分支,`mode:remote` 记 session id
36+
- `Reviewed-by:` 写渲染或采纳裁决的席位 session;隔离复核子代理无 session,记采纳它的席位
37+
- 两者同 session ⇒ 报 SELF-REVIEW;值紧跟冒号,前置词即不可读;两行皆无的历史裁决恒静默。
3838
- 清标即落地:PASS ⇒ 同席同笔剥双载体;凡清标同笔留 provenance 评论,引记录 id 与所判 head。
3939
- 随后按 `landing-operations.md` 走落地前检 → 转 ready → 挂 auto-merge 或入队。
4040
- 轮次报告设复审清单专节,形状与代裁清单同为强制审计。

0 commit comments

Comments
 (0)