Skip to content

Commit ab1d359

Browse files
os-justinclaude
andauthored
skills(pm-dispatch): off-tier seat discharges clause-② review by spawning an at-tier subagent (ruling C) (#18511)
Fixes #18434 Governed rules-layer re-key carrying the maintainer's ruling 「18434 C」 (director record 5699124096 on the card; the maintainer's confirmation on the ui seat's channel, record 5701005814: 「改规则:允许未达档席起达档子代理」). Three prose files (the third, `references/core-rules.md`, added in the patch round — D9 below), no code, no script edits, every touched file line-neutral against its ratchet ceiling. Landing is not the author's: this PR stays draft; the skills seat hangs the four-piece and the maintainer's approval lands it. ## What changed ### `.claude/skills/pm-dispatch/SKILL.md` — 812 / 812 (two lines re-keyed in place) | line | before | after | |:--|:--|:--| | :522 (114 B → 118 B) | 「- 条款②复核只在实测达档的席内做,记录写读数;未达档席 ⛔ 不审、不起该档子代理。」 | 「- 条款②复核按实测档:达档席内审;未达档席 ⛔ 不自审,起隔离达档子代理转录核档采信。」 | | :640 (117 B → 117 B) | 「- 交付后复核由派发席席内完成:达档审,未达档默认档加门禁;记录 = 同形评论落 PR 或卡。」 | 「- 交付后复核归派发席:达档席内审,未达档循保险丝起子代理;记录 = 同形评论落 PR 或卡。」 | :522 is the ruling's line — meaning fixed by the ruling, wording the dev's, 118 B under the 120 B cap. 「记录写读数」 was dropped from it because the record requirement lives in `contract-review.md` (「复核记录 = 一条评论落 PR 或卡」, 「同形含首行 `Served-tier:`」). ### `.claude/skills/pm-dispatch/references/contract-review.md` — 60 / 60 | line (new numbering) | before | after | |:--|:--|:--| | :26 (119 B → 116 B) | 「- 按档位:达档席内审契约增量;未达档默认档自审加门禁、挂标;豁免仅独立性件与保险丝。」 | 「- 按档位:达档席内审契约增量;未达档 ⛔ 不自审,走保险丝路;豁免仅独立性件与保险丝。」 | | old :39 deleted (97 B — the payment) | 「- 随后按 `landing-operations.md` 走落地前检 → 转 ready → 挂 auto-merge 或入队。」 | — (the same sequence is SKILL.md :617 「席位落地 = 过落地前检、清标、ready、auto-merge」 and :641; the three-step pre-landing check that follows at :40–:46 is untouched) | | :50, was :51 (105 B → 120 B) | 「- 保险丝管每个出条款②裁决的席,每场前必读服役档,读法见 `platform-readings.md`。」 | 「- 保险丝管每个出条款②裁决的席:每场前必读服役档(`platform-readings.md`),未达档 ⛔ 不自审。」 | | :53, was :54 (108 B → 114 B) | 「- 读数不达档 ⇒ 改走转录核验的复核子代理;标签原样留置,队列外等待是安全态。」 | 「- 读数不达档 ⇒ 改走转录核验的达档复核子代理;标签原样留置,队列外等待是安全态。」 | | :54, was :55 (108 B → 118 B) | 「- 保险丝只测座位自会话:`mode:subagent` 里 `get_session` 量的是派发会话,⛔ 不作互证。」 | 「- 子代理档只取其转录 harness 逐请求 `model` 盖章;`get_session` 量的是派发会话,⛔ 不作互证。」 | | :59 (new, 110 B) | — | 「- PASS、FAIL 与作废都落 PR 或卡;同 head 再起子代理须引前次作废因,⛔ 不重起求 PASS。」 | ### `.claude/skills/pm-dispatch/references/core-rules.md` — 151 / 151 (one line re-keyed in place, patch round) | line | before | after | |:--|:--|:--| | :112 (119 B → 119 B) | 「- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约卡达档复核归 spec 席。」 | 「- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约卡达档复核归派发席。」 | The twin probe `git grep -n '达档\|子代理' origin/main -- .claude/skills/pm-dispatch/references/core-rules.md` returns :51 :112 :113 :122, none of which states the spawn bar — but :112 still named the pre-tier-bound owner (spec seat) of the clause-② at-tier review, while SKILL.md :512 reads 「达档复核归派发席席内」 and contract-review.md :25 「归属该卡派发席」. 「席内」 is not spelled at :112 because the line would be 125 B against the 120 B cap; it is carried by SKILL.md :512. ### The three guards, where each now lives 1. Tier verified from the transcript, not the request — :52 「⛔ 自述档位与传参皆非读数」 (unchanged); :54 (the subagent's tier is taken only from the harness per-request `model` stamps in its own transcript; `get_session` measures the dispatching session and is no cross-proof); :57 「产出裁决的每轮都须读到契约复审档位,见回退证据 ⇒ 裁决整体作废」 (unchanged); :60, the quota-exemption bar (unchanged). Before this PR the file said 「转录核验」 but named no source for the subagent's tier — `platform-readings.md` :384 covers the seat's OWN session transcript, and the old :55 said `get_session` cannot see the subagent — so the source is added, not merely re-worded (PM assumption A2: substance present, source absent). 2. Adversarial brief, no contamination — :32–:33 unchanged. 3. Verbatim or void, every time on the record — :58 unchanged (verbatim adoption or whole voiding for 核验失败 / 越范围 / 格式不完整); the NEW :59 adds the half that was absent: every verdict, PASS, FAIL or voided, is posted on the PR or card, and a second spawn on the same head cites the first's void reason. Independence pair (:35–:37), `--pair` (:41–:42, :55) and `Served-tier:` (:29) are unchanged. No script is edited (PM assumption A3 holds: `check-clause2-carriers.mjs --pair` already reads `Served-tier:`; guard 1 is a reading rule). ## Deviation, declared: :640 and :26 are in the diff PM assumption A1 (「line 522 is the only SKILL.md line stating the old bar」) holds for the spawn bar — `不起该档子代理` is only at :522 — and is falsified for the in-person bar. PR #18363 (`05f1cdd6`) wrote the rule in three places at once (its own file patch: SKILL.md :512 / :522 / :640 and contract-review.md :26 / :41 / :51 / :52), and :640 「未达档默认档加门禁」 and :26 「未达档默认档自审加门禁、挂标」 still described an off-tier seat reviewing IN PERSON at default tier — the half of the bar that ruling C keeps (the ui seat's record: 「the bar on reviewing in person stands; the bar on spawning does not」). Leaving them would re-create the two-texts-disagree shape this card reports, so both are re-keyed in place under the bounded in-place-fix exemption: same defect class; mechanical, with the meaning pinned by the ruling; no other claim holds either file (#18489 is instructed not to touch :523 and targets the triage block, #18469 targets :91–92, and the file lists of all 15 open PRs read at PR time touch neither file); same gate family. If the seat prefers the narrow diff, reverting those two lines is a two-line change and every gate below stays green. Answered by the coordinator in the patch round: **A — keep**. ### D9 — patch round: core-rules.md :112 rides this PR The out-of-scope finding (b) from the first report was verified by the coordinator on `origin/main` `8cf527f` and ruled to ride this PR under the same bounded in-place-fix exemption (same class as D1 — text still naming the pre-tier-bound owner; mechanical; no other claim holds `core-rules.md` — #18489 is `pm:blocked`, #18469 does not touch it; same gate family) instead of a fourth governed four-piece. Executed: `origin/main` merged first (`acc1943`, one docs commit touching `content/docs/data-modeling/seed-data.mdx` only, no regeneration owed); :112 re-keyed in place (`af846cf`). Probes with controls on `core-rules.md`: `归 spec 席` 1 → 0, `归派发席` 0 → 1, control `契约复审档` 1 → 1; every other core-rules line byte-identical (`git diff -U0` shows the single line). ## Verification — round 2 on `af846cf` (round 1 on `3088a1c` read identically) - Gate list derived with no paths, off the merge base with `origin/main`: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` → 17 families (identical to the PM's lead). All 17 run in the foreground, each exit code captured by redirect then `$?`, every one `0`. Reconciliation `--ran` with `COMMAND :: exit CODE` lines: 「✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3)」. - Ratchet: 「✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0)」 · 「…contract-review.md is 60 lines (ceiling 60; headroom 0)」 · 「…core-rules.md is 151 lines (ceiling 151; headroom 0)」; widest introduced line 120 B (:50 of contract-review.md); core-rules :112 is 119 B. - `check:pm-skill-id-lint` 「27 file(s) clean」 · `check:skill-frame-sync` 「the one declared copy of the decision frame is internally coherent」 · `check:nul-bytes` 「OK (scanned 8738 text file(s) … no raw ASCII control bytes)」. - `check:doc-formula-expressions` needed `@objectstack/formula` and `@objectstack/lint` built: built under `scripts/pm/os-verify-lock.sh` (「VERDICT command-exit 0 · held the lock 141s · waited 0s」), then 「✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 438 files / 1377 TS blocks judged clean」. - Probes, `origin/main` `fed4a15` → this head: `不起该档子代理` 1 → 0; `起隔离达档子代理` 0 → 1; control `达档` 6 lines → 6; `默认档加门禁|自审加门禁` 1 + 1 → 0 + 0; core-rules.md `归 spec 席` 1 → 0, `归派发席` 0 → 1, control `契约复审档` 1 → 1. - No reverse-verification or ablation leg: a prose rule with no runtime or dist; the probe flip above is the before/after measurement. ## Acceptance notes - Finding (b) from the first report — `references/core-rules.md` :112 「契约卡达档复核归 spec 席」 naming the pre-#18363 owner — is no longer to file: it rides this PR (patch round, D9 above) by the coordinator's ruling. - noted, not filed: SKILL.md :673 「报告席记条款②默认档 FAIL 率入复审清单」 reads consistently under C when 「默认档」 is the construction tier (:512), so no change; handler: none. ## 维护者速读(草稿) **改了什么**:把条款②契约复核的路线改成你 16 日下午定的 C:达档的席自己审;未达档的席不自己审,起一个隔离的达档复核子代理,按子代理转录里逐请求的档位盖章采信其裁决。`SKILL.md` 两行、`contract-review.md` 六行(删一行付账、新增一行记「每份裁决都落 PR 或卡,同 head 再起须引上次作废因」)、`core-rules.md` 一行(:112 把契约卡达档复核的归属从 spec 席改为派发席,与 `SKILL.md` :512 一致),行数与上限一致(812 / 812、60 / 60、151 / 151)。 **为什么改**:今天早上落地的 :523 把「不自审」和「不起子代理」绑在一起,默认档车道的 `Clause-②: yes` 卡就没有任何合法路径拿到裁决——objectui 三张 PR 停在安全态,第四张(objectui#8167,你批过的 p2)干脆没派出去。你的裁决 C 只放开「谁可以起复核」,不放开「什么算复核」:`Served-tier:` 首行、子代理必须真的跑在契约复审档、实现者与复核者同会话仍算自审,三条都不变。 **风险与代价(含回滚)**:零代码、零脚本、零发布物,17 个派生门禁全绿。剩下的风险在执行面:平台是否会把父会话逐字转贴的子代理裁决也拒为 `[Self-Approval]` 尚未实测(裁决记录已写明首次使用时测量并记入 `platform-readings.md`)。回滚 = revert 本 PR 的一个 commit,文本回到 :523 的旧句,车道回到安全态停靠。 **席位意见**:(留空,席位定稿) **你要做的**:按四件套流程批准本 PR(规则层,等你的字);合并后 `domain:ui` 席直接按新规则处理停靠的三张 PR,不需要你再动。 --- _Generated by [Claude Code](https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu)_ --- _Generated by [Claude Code](https://claude.ai/code)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent fb41be1 commit ab1d359

3 files changed

Lines changed: 8 additions & 8 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
519519
- 机械放宽判别门禁落地前,入队前的席内契约复核是方向自述的补偿控制。
520520
- 豁免够不到的地板只有维护者裁决能设。
521521
- 席位档策略:skills 车道外的执行席与分诊席默认判断档会话。
522-
- 条款②复核只在实测达档的席内做,记录写读数;未达档席 ⛔ 不审、不起该档子代理。
522+
- 条款②复核按实测档:达档席内审;未达档席 ⛔ 不自审,起隔离达档子代理转录核档采信。
523523
- 降档出口两条:额度耗尽豁免,与主动预降(余量吃紧可预先降档)。
524524
- 额度耗尽豁免仅当契约复审档实测不可用才落默认判断档,⛔ 不再往下。
525525
- 降档的档位与理由记入认领评论 Container & model 行;档位逐次派发显式传参,永不省略。
@@ -637,7 +637,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
637637
- `--tier` 嫌疑行是提示非裁定;双肢命中任一 ⇒ 无席内条款②复核 PASS 在案 ⛔ 禁止入队。
638638
- 路径肢 = diff 触及契约面 `packages/spec/src/**`,含 error-code-ledger 与 `*.zod.ts` 契约 schema。
639639
- 声明肢 = 认领评论声明 `Clause-②: yes`,与路径无关;错误的 `no` 是可审计的假申报。
640-
- 交付后复核由派发席席内完成:达档审,未达档默认档加门禁;记录 = 同形评论落 PR 或卡。
640+
- 交付后复核归派发席:达档席内审,未达档循保险丝起子代理;记录 = 同形评论落 PR 或卡。
641641
- PASS ⇒ 同席剥标并引记录、ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行。
642642
- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定。
643643
- 外部评审链降为可选事后审计,非放行前提。

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
## 复核归属与资格(席内)
2424

2525
- 归属该卡派发席,交付后收集复核当轮席内完成;借复核不移卡,新 spec 工作恒归 spec 席。
26-
- 按档位:达档席内审契约增量;未达档默认档自审加门禁、挂标;豁免仅独立性件与保险丝。
26+
- 按档位:达档席内审契约增量;未达档 ⛔ 不自审,走保险丝路;豁免仅独立性件与保险丝。
2727
- 复核记录 = 一条评论落 PR 或卡,达档与默认档同形;散文、dev 自评、`os-dev-report` 恒不算。
2828
- 同形 = `## Contract review` 题头、所审 head sha 独占码段、①②③ 逐项、独立性对、PASS/FAIL。
2929
- 同形含首行 `Served-tier:`:值写常量名 `CONTRACT_REVIEW_TIER`;无此行不成裁决,模板见 `--template`。
@@ -36,7 +36,6 @@
3636
- `Reviewed-by:` 写渲染或采纳裁决的席位 session;隔离复核子代理无 session,记采纳它的席位。
3737
- 两者同 session ⇒ 报 SELF-REVIEW;只 `mode:remote` 可达,`mode:subagent` 席内审是设计;值紧跟冒号。
3838
- 清标即落地:PASS ⇒ 同席同笔剥双载体;清标同笔落 PR provenance 评论,引记录 id 与所判 head。
39-
- 随后按 `landing-operations.md` 走落地前检 → 转 ready → 挂 auto-merge 或入队。
4039
- 轮次报告设复审清单专节,形状与代裁清单同为强制审计。
4140
- 落地前检三条:① 席内条款②复核 PASS 在案,即 PR 或卡上同形的复核记录(档位按实测)。
4241
- ② 双载体已清,逐对机读 `node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`。
@@ -48,13 +47,14 @@
4847

4948
## 降档保险丝(机读)
5049

51-
- 保险丝管每个出条款②裁决的席,每场前必读服役档,读法见 `platform-readings.md`。
50+
- 保险丝管每个出条款②裁决的席:每场前必读服役档(`platform-readings.md`),未达档 ⛔ 不自审。
5251
- 总监席裁决非达档裁决,⛔ 不受本丝;总监席档位由维护者逐场定。
5352
- ⛔ 自述档位与传参皆非读数;条款②的 `mode:subagent` 派发恒保留标至席内复核完成。
54-
- 读数不达档 ⇒ 改走转录核验的复核子代理;标签原样留置,队列外等待是安全态。
55-
- 保险丝只测座位自会话:`mode:subagent` 里 `get_session` 量的是派发会话,⛔ 不作互证。
53+
- 读数不达档 ⇒ 改走转录核验的达档复核子代理;标签原样留置,队列外等待是安全态。
54+
- 子代理档只取其转录 harness 逐请求 `model` 盖章;`get_session` 量的是派发会话,⛔ 不作互证。
5655
- 清标前 `--pair`:`Served-tier:` ≠ 常量名 ⇒ exit 4,点名 PR、评论、读数;型号串按 `AGENTS.md` 拒。
5756
- 施工档只取 harness `model` 盖章或认领 Container & model 行;`Co-Authored-By` = 署名常量 ⛔ 非证据。
5857
- 产出裁决的每轮都须读到契约复审档位,见回退证据 ⇒ 裁决整体作废。
5958
- 父会话只可逐字采纳或整体作废(核验失败、越范围、格式不完整),⛔ 永不改写润色。
59+
- PASS、FAIL 与作废都落 PR 或卡;同 head 再起子代理须引前次作废因,⛔ 不重起求 PASS。
6060
- 契约复核 ⛔ 不适用额度耗尽豁免降档:豁免对象是派发,复核 ⛔ 不随派发档位免除。

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
- 认领原子对:一次标签写入完成认领与状态对调,随后留 `Claim:` 开头的评论并重读全线程。
110110
- 更早的他会话认领即让行并交出已诊断的一切;认领逾一天且无合并证据即疑死。
111111
- 回收前先救工作树,有提交的活分支 ⛔ 永不回收。
112-
- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约卡达档复核归 spec 席。
112+
- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约卡达档复核归派发席。
113113
- 派发词 ⛔ 不整段粘贴 issue 正文,只带增量,并要求子代理自查正文完整性。
114114
- 派发词分三区:裁决不可重裁、机制假设须实测、建议路线可换,⛔ 不把假设写成裁决。
115115
- 标准非协商条款 ⛔ 不抄进派发词,清单、路径与行号在派发那一刻从树上取。

0 commit comments

Comments
 (0)