Skip to content

pm-dispatch: SKILL.md protocol family — symmetric contract-review carrier, sweep lane-label scope, clause-② restatement scope - #11077

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-10972-skillmd-protocol-family
Aug 22, 2026
Merged

pm-dispatch: SKILL.md protocol family — symmetric contract-review carrier, sweep lane-label scope, clause-② restatement scope#11077
os-zhuang merged 3 commits into
mainfrom
claude/issue-10972-skillmd-protocol-family

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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-review hang 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_session machine 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-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.

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-changeset applied 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 32583260905 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Console Pin Gate — 失败步骤: Build the Console SPA at the pinned objectui SHA

    ✗ Build failed in 5.63s
    

↳ 失败原因 是判读的关键:超时Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

跨 PR 相同签名(24h,按失败测试文件聚合):

  • ⚠️本次没有可用的聚合签名(日志里没有能解析出测试文件名的 FAIL 行)—— 这不是「没有同签名的其他 PR」,是这一轮没测到。跨 PR 聚合本次不可用,请手工比对其他 PR 的同类评论。
  • ⚠️ 24h 评论账本没读完(超过 5 页仍未读到窗口尽头),所以上面的「不同 PR 数」是下界,不是全量。

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 84 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

Merged via the queue into main with commit 7ae1171Aug 22, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10972-skillmd-protocol-family branch August 22, 2026 16:06
@os-zhuangClaude

Copy link
Copy Markdown
ContributorAuthor

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.Console Pin Gate's MISSING_EXPORT on the six @objectstack/spec/ui theme schemas is #10856 (ruled A+C on 2026-08-22; the objectui first leg is now filed as objectui#5674-class card and #10856 waits on it). The gate is measured non-required — the queue merges over it (multiple same-day precedents on #10856) — so ⛔ no re-queue, no action on this PR. This comment is the audit record the triage checklist asks for.


Generated by Claude Code

@os-zhuangClaude

Copy link
Copy Markdown
ContributorAuthor

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

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