skills(pm-dispatch): off-tier seat discharges clause-② review by spawning an at-tier subagent (ruling C) - #18511
Conversation
…ning an at-tier subagent (ruling C) Re-key the clause-② review route in place, line-neutral (SKILL.md 812/812, contract-review.md 60/60): an at-tier seat reviews in-seat; an off-tier seat never self-reviews and instead spawns an isolated review subagent at the contract-review tier, adopting its verdict on a transcript tier reading. contract-review.md keeps the fuse route as the rule, names the transcript source for the subagent's tier, and records that every verdict (PASS, FAIL, voided) lands on the PR or card and a re-spawn on the same head cites the prior void reason. Paid inside the 60-line ceiling by deleting the landing-sequence pointer line that SKILL.md already carries. Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude <noreply@anthropic.com>
…ubagent-route Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude <noreply@anthropic.com>
…use-② at-tier review owner Patch round on the same claim: `references/core-rules.md` still named the pre-tier-bound owner (「契约卡达档复核归 spec 席」) while SKILL.md and contract-review.md already read the dispatching seat. Re-keyed in place at 120 B, line-neutral (151/151); every other line byte-identical. Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude <noreply@anthropic.com>
维护者速读(终稿)席位: 改了什么。 把条款②契约复核的路线改成你今天下午定的 C:达档的席自己审;未达档的席不自己审,起一个隔离的达档复核子代理,按子代理转录里逐请求的档位盖章采信它的裁决。三个文件、八行、零代码: 为什么改。 今天早上落地的那一句把「不自审」和「不起子代理」绑在一起,默认档车道的 风险与代价(含回滚)。 零代码、零脚本、零发布物;17 个派生门禁本地全绿,PR 上 20 绿 12 跳、 席位意见。 同意落地。diff 逐行对照过裁决文本与 ui 席记录的边界(放开谁起复核,不放开什么算复核),八行都在这条边界内;dev 多改的三行(SKILL :640、contract-review :26、core-rules :112)是同一缺陷的残留文本——都还在描述「未达档自审」或「归 spec 席」的旧归属,不改它们今天的冲突会换一种拼写再出现。本席已按四件套挂起,并请了 os-zhuang 与 hotlong 复审。 你要做的。 在 PR #18511 上 APPROVE(规则层,等你的字)。批准后本席按裁决 C 落地(记录、 Generated by Claude Code |
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):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 / 60landing-operations.md走落地前检 → 转 ready → 挂 auto-merge 或入队。」platform-readings.md。」platform-readings.md),未达档 ⛔ 不自审。」mode:subagent里get_session量的是派发会话,⛔ 不作互证。」model盖章;get_session量的是派发会话,⛔ 不作互证。」.claude/skills/pm-dispatch/references/core-rules.md— 151 / 151 (one line re-keyed in place, patch round)The twin probe
git grep -n '达档\|子代理' origin/main -- .claude/skills/pm-dispatch/references/core-rules.mdreturns :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
modelstamps in its own transcript;get_sessionmeasures 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 saidget_sessioncannot see the subagent — so the source is added, not merely re-worded (PM assumption A2: substance present, source absent).Independence pair (:35–:37),
--pair(:41–:42, :55) andServed-tier:(:29) are unchanged. No script is edited (PM assumption A3 holds:check-clause2-carriers.mjs --pairalready readsServed-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/main8cf527fand 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 holdscore-rules.md— #18489 ispm:blocked, #18469 does not touch it; same gate family) instead of a fourth governed four-piece. Executed:origin/mainmerged first (acc1943, one docs commit touchingcontent/docs/data-modeling/seed-data.mdxonly, no regeneration owed); :112 re-keyed in place (af846cf). Probes with controls oncore-rules.md:归 spec 席1 → 0,归派发席0 → 1, control契约复审档1 → 1; every other core-rules line byte-identical (git diff -U0shows the single line).Verification — round 2 on
af846cf(round 1 on3088a1cread identically)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 one0. Reconciliation--ranwithCOMMAND :: exit CODElines: 「✓ 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)」.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-expressionsneeded@objectstack/formulaand@objectstack/lintbuilt: built underscripts/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」.origin/mainfed4a15→ 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.Acceptance notes
references/core-rules.md:112 「契约卡达档复核归 spec 席」 naming the pre-docs(pm): the clause-② contract review is tier-bound — the dispatching seat reviews in-seat at CONTRACT_REVIEW_TIER, no seat list #18363 owner — is no longer to file: it rides this PR (patch round, D9 above) by the coordinator's ruling.维护者速读(草稿)
改了什么:把条款②契约复核的路线改成你 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
Generated by Claude Code