Skip to content

decision(pm): this seat dispatched 5 clause-② reviews at the RETIRED model tier after the maintainer ruling landed — two PRs merged on void verdicts #19603

Description

@os-warren

Ruled: 5770147353 · letter A · 2026-09-22T01:58Z — 一类自裁 (director seat, summon #26); state pm:dispatched, executor domain:spec seat 2

Path: P2 | none | none

This card reports a failure by the seat filing it. domain:spec execution seat 2, session session_01UDXER3sdqfeVYpEWZs5mZx. Filed into the decision box because the part that is still open — two PRs already in main — is above a seat's floor.

维护者速读

今天上午你裁了一件事:fable 这个档位没有了,契约复审改用 opus。这条裁决 10:22:54Z 落进主干。

我没有在每场复审前重读那个常量,于是从 10:22:54Z 到 15:27Z 这四小时四十七分钟里,我又派了 5 场契约复审,全部跑在已经退役的 fable 档上。按规矩(「降档保险丝」),跑错档的裁决整体作废 —— 不是打个折,是不算数。

后果分三档:

已经合并的这两张,我不能自己决定怎么补。三个选项在下面,我荐 A:现在按 opus 档把这两份已合并的 diff 重跑一遍复审,通过就补记录、不通过就照常立缺陷卡。它是只读的,改不动已经发生的合并,但能把「有没有真出事」从猜变成读数。

请回一个字母:A / B / C

What happened, measured

CONTRACT_REVIEW_TIER (scripts/pm/dispatch-gates.mjs) is the single value site for the clause-② review tier. Commit 77df0f61a6 (PR #19573) moved it the RETIRED tier → the current CONTRACT_REVIEW_TIER, landing on main at 2026-09-21T10:22:54Z, on the maintainer's ruling recorded in that constant's own docblock — verbatim 「fable 没有了」, answered with 「改成 opus」.

references/contract-review.md 「降档保险丝」 says, verbatim:

保险丝只管 spec 与 skills 席的条款②复核:每场前必读服役档

and

产出裁决的每轮都须读到契约复审档位,见回退证据 ⇒ 裁决整体作废

This seat read the constant once, at ~10:10Z, and never again. Every review dispatched after 10:22:54Z went to the retired tier.

The ledger — served tier measured from each reviewer's own transcript (per-assistant-row message.model), ⛔ never from a self-report or the argument passed

record posted rows run window served tier required THEN verdict
#19228 5757510615 08:21Z 156 08:00–08:18 the RETIRED tier the RETIRED tier ✅ at tier
#18669 5757920935 08:59Z 114 08:36–08:56 the RETIRED tier the RETIRED tier ✅ at tier
#19228 5758197441 09:21Z 151 08:54–09:18 the RETIRED tier the RETIRED tier ✅ at tier
#19228 5758796875 10:10Z 101 09:56–10:08 the current CONTRACT_REVIEW_TIER the RETIRED tier ⛔ voided at the time — correctly
#18669 5758954786 + PR #19549 5758966480 10:23Z / 10:24Z 65 10:09–10:21 the RETIRED tier the RETIRED tier (flip at 10:22:54) ✅ at tier when it RAN
#19228 5759348642 10:54Z 105 10:35–10:53 the RETIRED tier the current CONTRACT_REVIEW_TIER VOID
#19228 5759714087 11:26Z 80 11:12–11:25 the RETIRED tier the current CONTRACT_REVIEW_TIER VOIDPR #19533 merged on it
#14640 5761229184 13:25Z 94 13:05–13:24 the RETIRED tier the current CONTRACT_REVIEW_TIER VOIDPR #19594 merged on it
#15178 5762743365 15:08Z 111 14:46–15:02 the RETIRED tier the current CONTRACT_REVIEW_TIER VOID — a FAIL; rework in flight
#15292 (never posted) 111 15:10–15:27 the RETIRED tier the current CONTRACT_REVIEW_TIER VOID — a FAIL, withheld

Instrument: every subagent transcript this session wrote, counted by message.model. all 37 subagent transcripts this session wrote carry assistant rows, and 0 of the 37 mix models (21 single-model the RETIRED tier, 16 single-model the current CONTRACT_REVIEW_TIER), so the per-run reading is not an average over a fallback. LIT CONTROL: the same sweep finds the current CONTRACT_REVIEW_TIER runs in the same window (e.g. the 09:56–10:08 run above, and the dev agents), so a the RETIRED tier reading is a real reading of a distinct value and not the only string the instrument can print.

What is already repaired, ⛔ not waiting on this card

The open question

Two PRs are in main, landed against verdicts the fuse says do not count. The fuse assumes the voiding happens before landing and says nothing about after. A seat may not decide what a published contract change owes.

os-decision-facets

  • ① 项目长远合理性:A 缩小特例 —— 把「裁决作废」这条规则补上它唯一缺的那半边(合并之后怎么办),不新增例外;C 则等于给作废规则开一个「已经合并就算了」的口子,那个口子以后每次都会被引用。
  • ② 实际业务拉动:今天没有客户撞上 —— 两张 PR 的门禁全绿、主干未红。拉动来自下一次:如果复审可以事后不算数,契约面的「已复审」三个字就不再是读数。
  • ③ 防 AI 犯错:A 的失败是响亮的(重跑出 FAIL 就立缺陷卡);C 的失败是静默的 —— 没有任何人会再看这两份 diff 一眼,而它们进的是 packages/spec,正是 AI 照抄的那份说明书。
  • ④ 创业阶段不扩散:A 是一次性只读动作,不新增长期义务;B 要回滚两张已合并 PR 并重走全程,代价远超已知风险;C 零成本但留下一条永久的软化先例。

Prior rulings read: contract-review-tier,retired-tier,downgrade-fuse,void-verdict → thread: none; ADR: none found; search terms 降档保险丝 / CONTRACT_REVIEW_TIER / 裁决整体作废 over .claude/skills/pm-dispatch/** and scripts/pm/**.

Options × real cost

option what is done what anyone can perceive
A — post-hoc re-review at the current CONTRACT_REVIEW_TIER Run the clause-② review of #19533's and #19594's merged diffs at the current tier. PASS ⇒ record it and the breach is procedural only. FAIL ⇒ each defect becomes an ordinary card. Read-only; changes nothing in main today. Costs two review runs. Turns "did this hurt anything" from a guess into a reading.
B — revert both, re-land through a correct review git revert both merges, re-open, re-review at tier, re-land. Maximum rigour. #19594 enrolled a new governed liveness type (rest_api) that other work may already read; reverting it churns a published surface over a process defect with no measured harm.
C — accept as landed, record the breach only Write the ledger and stop. Cheapest. Leaves two packages/spec changes with no at-tier review on record, and sets the precedent that a voided verdict survives if the merge beat the discovery.

业务含义直译 —— A = 「出事没出事,先量一遍再说」;B = 「流程错了就整件退货重来」;C = 「已经发出去的就算了,下不为例」。

推荐:A。 回退项:若 A 的重跑对任一张判 FAIL 且缺陷是用户可达的,再按 B 处置那一张 —— 而不是现在就对两张都用 B。置信缺口:我没有量过 rest_api 这个新活性类型今天有没有被别的在飞工作读到,所以 B 的真实代价我只能说「至少这么多」,不能说「就这么多」。

自检行:只看①选 A;②③④ 是否翻转:否。

Duplicate-search terms

CONTRACT_REVIEW_TIER · 降档保险丝 · 裁决整体作废 · the RETIRED tier · off-tier contract review


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions