Uh oh!
There was an error while loading. Please reload this page.
pm-dispatch: SKILL.md protocol family — symmetric contract-review carrier, sweep lane-label scope, clause-② restatement scope - #11077
Conversation
…d card in one stroke Maintainer ruling 2026-08-22 (verbatim on the chain-head card): the parking act hangs the gate label on both the PR (as soon as it exists) and the card in the same stroke, and a PASS clears both in the same stroke, each side by the standing read-modify-write hard steps. The label remains the gate carrier (the 2026-08-18 载体不迁移 ruling holds). The commissioned request-review sentence is included: parking also requests review on the PR from the reviewing seat's account (notification only); the reviewing seat clears the request or leaves a review comment on PASS. A dev report arriving before the PR exists parks issue-side first; the dispatching seat completes the PR side at ACCEPT. Ratchet payment: the triage auto-adjudication confidence-gate item ⑤ no longer restates the downgrade-fuse mechanism (get_session / external_metadata.last_served_model) that the 复审链 bullet carries in full — it now defers to that single source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
…repo that has stream labels The sweep's disjunction-② exemption read "main repo only — sister repos have no lane labels". That premise died with the 2026-08-21 objectui three-stream split (carried in the 多仓协调 objectui paragraph, referenced rather than restated): a pm:queue card with no stream label there appears in no execution seat's whole-lane candidate query, and the sweep's shape ② deliberately skipped exactly that card, so nothing backfilled it. The shape is now swept on every repo that HAS stream labels (today: the main repo and objectui); the exemption survives only for repos genuinely without lane labels (cloud, objectos) — deliberately not widened to them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
…se ② The clause-② paragraph gains its scope sentence: a seat's on-card restatement of clause ② carries none of the exceptions that live beside the original — and the copy is what gets read. Stated once, at the clause-② paragraph: the quota-exhaustion exemption and its needs:contract-review compensation reach a restatement too, and only a MAINTAINER ruling can set a floor the exemption does not reach. Measured cost of the wrong reading: two cards parked ~11 hours because an unqualified on-card ⛔ was taken as an exemption-proof floor. Ratchet payment: the contract-review eligibility parenthetical is tightened in place (same meaning, fewer words). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32583260905 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Uh oh!
There was an error while loading. Please reload this page.
os-zhuang
commented
Aug 22, 2026
Queue-red triage (skills seat, reviewer of record on this PR): checklist branch 2 — the failing job is unrelated to this PR and is the known, carded, ruled signature. Generated by Claude Code |
os-zhuang
commented
Aug 22, 2026
Correction to the pointer in my triage comment above: the objectui first-leg card is objectui#5710 (the "#5674-class" spelling was wrong). Everything else stands. Generated by Claude Code |
Fixes#10972
Fixes#10719
Fixes#10313
Family dispatch (fold ruled by the PM on the chain-head claim): three adjudicated cards, one file, one commit per member, each independently verifiable.
Member 1 — symmetric
needs:contract-reviewhang and clear (commit 1)Maintainer ruling 2026-08-22, carried verbatim in the edited bullet: 「简化一点是否可以直接挂 PR 侧」「两边都挂好」. The clause-② gate bullet now parks the label on both the PR (as soon as it exists) and the card in the same stroke, and the 复审链 bullet clears both in the same stroke on PASS, each side by the standing read-modify-write hard steps (the 标签纪律 four-step rule already names gate-carrying labels for both directions). The label remains the gate carrier — the 2026-08-18 载体不迁移 ruling stands untouched in the same bullet. The commissioned request-review sentence (2026-08-22 ruling recorded on the card) is included: parking also requests review on the PR from the reviewing seat's account (notification only, quoted 「也可以直接要求复审」); the reviewing seat clears the request or leaves a review comment on PASS. A dev report arriving before the PR exists parks issue-side first; the dispatching seat completes the PR side at ACCEPT.
Ratchet payment: the triage auto-adjudication confidence-gate item ⑤ no longer restates the downgrade-fuse mechanism (the
get_sessionmachine reading) that the 复审链 bullet carries in full — it defers to that single source, same semantics.Member 2 — sweep disjunction ② scope (commit 2)
The "queue label without lane label" shape is now swept on every repo that has stream labels (today: the main repo and objectui); the exemption survives only for repos genuinely without lane labels (cloud, objectos) — deliberately not widened to them. The 2026-08-21 objectui three-stream ruling is referenced via the 多仓协调 paragraph that already carries it, not restated.
Member 3 — a card-level restatement of clause ② is still clause ② (commit 3)
The clause-② paragraph gains its scope sentence: a seat's on-card restatement of clause ② loses the exceptions that lived beside the original, and the copy is what gets read — so the paragraph now states that the quota-exhaustion exemption and its
needs:contract-reviewcompensation reach a restatement too, and only a maintainer ruling can set a floor the exemption does not reach. Measured cost of the wrong reading: two cards parked ~11 hours.Ratchet payment: the contract-review eligibility parenthetical tightened in place (same meaning, fewer words).
Verification (all on final commit
6c31501, clean tree)Gates derived with
node scripts/pm/dispatch-gates.mjs(no paths — script took the changed set from merge-base); 7 matched families all green, verdict lines quoted from each gate's own output:check:pm-skill-ratchet— "✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 682 lines (ceiling 682; headroom 0)." — the file stays at its ceiling; every addition paid by in-file tightening, no re-wrap used as payment.check:pm-skill-id-lint— "✓ check-skill-id-lint: 17 file(s) clean (pattern /#[0-9]{3,}/g)."check:skill-frame-sync— "✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files"check:pm-governed-prose— "✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others."check:pm-governed-merges(self-test) — "✓ check-governed-merges --self-test: 90 assertions"check:doc-authoring— "✓ doc authoring guard: 389 files clean — no bare metadata literals."@objectstack/lint check:doc-formula-expressions— "✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 416 files / 1447 TS blocks judged clean" (required building the lint dependency closure first in the fresh worktree).scripts/check-nul-bytes.mjs— "check-nul-bytes: OK (scanned 6402 text file(s) …)"..claude/**-only diff — releases nothing;skip-changesetapplied per the changeset gate's documented exemption (label is the author's explicit opt-out; live-read authority).Governed surface (
.claude/**): draft PR, human merge only — never ready, never queued, never auto-merged.Generated by Claude Code
Generated by Claude Code