Skip to content

Commit 7337179

Browse files
os-justinclaude
andauthored
feat(pm): H51 + H53 — the two contract-review carrier states no sweep reads, and the FAIL end-state H51 applies (#17138)
* feat(pm): H51 — a contract-review verdict on the current head with no label stroke, and the FAIL end-state it applies `needs:contract-review` is a dual-carrier gate whose verdict is a HANDOFF, and the handoff's second act is a LABEL STROKE. Twelve PRs took a verdict in one shift and no owning seat responded for 2-5 hours: the seats' sweeps read labels, not PR prose, so a verdict recorded only as a comment reached nobody. H31 is clean throughout — it compares the two carriers with each other, and both were correctly on. Two halves, both from the filing card: - `references/contract-review.md` 载体纪律 names the FAIL end-state, which the text never did (the PASS branch was precise, the FAIL branch said only 「转回相应工作态」 into a state model with no rework state). Paid in place by deleting the vague line it subsumes; ceiling untouched at 60/60. `lanes/director.md` 职责一 is rewritten in place to point at that single source rather than carry a second copy; 72/72 untouched. - H51 files a report-only row for an OPEN gated PR whose thread already holds a contract-review verdict for the CURRENT head, older than 60 minutes. Verdict- agnostic on purpose: both branches owe a stroke inside the window, and a row that parsed the verdict would be issuing one. A verdict naming an OLDER head is clean — the head moved, so the carrier is genuinely live again. The anchor is measured rather than quoted: three title dialects were live on the same day plus a director adoption record carrying the review verbatim, so the row reads the two things all four share — a `## Contract review` heading line and the head sha as a code span. Pinning the card's literal title would have been silent on two dialects while reporting a clean board. Reuses H48's `prCommentCache`, whose header reserved exactly this reader; `head.sha` and `labels` ride the open-PR list row, so head identity costs no request. The H52 self-test's `H51` reservation pin flips to its landed side. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MoTv7pn338AZ71owsp19gQ * feat(pm): H53 — a contract-review carrier hung on a card with no claim and no PR The gate rides an increment: 「PR 一存在即挂;报告先于 PR 到达则先挂卡侧」 says where it is hung, 「⛔ 不前瞻预挂」 says where it is not, and the invariant both serve is 「开着的载体恒 = 真实待审」. Fourteen open cards across two repos carried it with no `Claim:` comment and no PR at all — thirteen written the morning after a ruling restating the discipline merged into the text that seat reads. All were found by a director summon; no sweep could see them. H31 needs two carriers to compare, so with no PR it is INAPPLICABLE rather than clean, and its header deliberately declined the「gate on a card with no PR is premature」 shape because card-side-first is legal. The CLAIM leg is what lets this row read the half that premise excluded: a dev executing card-side-first has been dispatched, so its thread carries a claim. Claim present ⇒ silent. ⛔ Report-only, in H31's own register — the subject is a GATE, the row never removes a carrier and never asks a script to. Removal is a person's audited act. It BUYS a complete card thread per gated open card rather than reading a cache: the measured population is unassigned by construction and H2 buys a thread only for an ASSIGNED card, so a cache-only reading would report the whole target shape UNJUDGED while looking healthy. 9 gated of 599 open cards, single-page walks. H31's live `#10025` reading is pinned unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MoTv7pn338AZ71owsp19gQ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent fb7d75f commit 7337179

3 files changed

Lines changed: 727 additions & 3 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- 前瞻的条款②事实住卡上裁决与分诊评论、`Clause-②` 申报和 `--tier` 输出。
1919
- 开着的载体恒 = 真实待审。
2020
- 载体不迁移:⛔ 不迁 PR review 或 Request Changes,⛔ 不为迁移留门。
21+
- FAIL 同 PASS 剥双载体:同笔留卡上交接评论(引复审、独立性对、欠改);卡态与 assignee 不动。
2122
- 重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论。
2223
- PASS + 无标 + head 未动 = 已清标不是被剥;head 后移或无结论才重挂。
2324
- `get_reviews` 读空 ≠ 未复审。
@@ -44,7 +45,6 @@
4445
- 放宽 tell 由 `scripts/pm/check-widening-tells.mjs` 判,`no` 撞新键/成员/导出/登记即拒,附 file:line
4546
- ③ PR 全部 check 全绿,⛔ 非 required 子集;受管面不适用,draft-only 终局不变。
4647
- 外部评审链是可选事后审计:分诊定时轮与总监席召唤 ⛔ 不是放行必要条件。
47-
- 审计 FAIL 按状态机 label-flip 交回派发席补丁轮。
4848

4949
## 降档保险丝(机读)
5050

.claude/skills/pm-dispatch/references/lanes/director.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
- 处理三分支之一,收尾 PASS 且工已完 ⇒ 跟到合并为止。
3434
- 非受管 code PR 走清标即落地全链;受管面照旧 draft-only 加人工合并。
3535
- 到合并 = 推进到就绪并点名等待,⛔ 不代维护者合并。
36-
- 之二,大的错误 FAIL 或 REWORK ⇒ 改标签即交接:按状态机一笔 replace 转回相应工作态
36+
- 之二,大的错误 FAIL 或 REWORK ⇒ 改标签即交接,端态按 `../contract-review.md` 载体纪律
3737
- ⛔ 散文点名不是交接:标签才是收件箱,散文对候选查询与 sweep 全不可见。
3838
- 之三,卡在决策卡 BLOCKED ⇒ ⛔ 不擅断:并入决裁批次,按基本原则格式与维护者讨论。
3939

0 commit comments

Comments
 (0)