Skip to content

docs(pm-dispatch): move clause-2 contract review in-seat — dispatching seat reviews and releases; external chain becomes optional audit - #13812

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-13795-pm-dispatch-inseat-contract-review
Aug 31, 2026
Merged

docs(pm-dispatch): move clause-2 contract review in-seat — dispatching seat reviews and releases; external chain becomes optional audit#13812
os-zhuang merged 1 commit into
mainfrom
claude/issue-13795-pm-dispatch-inseat-contract-review

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

Fixes #13795

What this does

Reworks the clause-② review process in the pm-dispatch skill from "dock the PR and wait for the external review chain" to an in-seat fable contract review by the dispatching seat, per the maintainer's 2026-08-31 ruling (three verbatim sentences on the card; the operative one, quoted untranslated in references/contract-review.md):

「项目经理是fable 或者可以派fable的子任务都可以自己contract view吧?」

The six substantive points of the card, and where each landed

  1. Clause-② fable dispatch mandate unchanged — no edit. The 模型分档 section and the gate's dual-limb + tier mechanics (first 8 lines of the 条款②入队闸门 bullet) are untouched.
  2. Post-delivery review upgradedreferences/contract-review.md new bullets 契约判断清单 (derived judgments item by item · semver grading vs the changeset · boundary-flag disposition, recorded on the card/PR, never prose self-attestation) and 独立性件 —— 隔离复核子代理 (on a true fork in contract judgment, or a dev flag awaiting adjudication, the dispatching seat spawns a context-isolated fable review subagent: fed only the card, standing rulings and the PR itself, never the dispatch brief or the seat's own conclusions; adversarial brief — look for reasons to reject; verdict adopted verbatim after transcript tier verification).
  3. Release — SKILL.md gate bullet + contract-review.md 放行 = 清标即落地 bullet: PASS strips needs:contract-review (both carriers) in the same stroke, cites the 2026-08-31 ruling as provenance, then ready + auto-merge/enqueue; FAIL is a patch round. The draft + label short dock at PR creation stays (it guards against enqueue before the review completes); what is removed is the open-ended "waiting for an external seat" state.
  4. External review chain demoted to optional — the triage seat's timed wheel and the director summons become a post-hoc audit/spot-check: their verdicts are still respected (an audit FAIL flips labels back to a patch round), but they are no longer a release precondition. Landed in contract-review.md (外部评审链降为可选), lanes/director.md 职责一, and the SKILL.md director paragraph's four-duty listing.
  5. Maintainer decision box preserved — stated in both the SKILL.md gate bullet and contract-review.md: a card stuck on a decision goes to the decision inbox only, never self-adjudicated; true design forks still escalate.
  6. Motivation (recorded here, not in rule text) — on 2026-08-31 the review chain was absent as a whole; two green-and-docked PRs sat for hours (over 4h on the PR delivering feat(spec): declare rows (multiline editors) and options[].description as authorable field-metadata keys (objectui#6140 / objectui#6153, spec half) #13669, over 3h on the one delivering feat(spec): wizard view v1 — declaration-and-refusal tightening of FormViewSchema type:'wizard' (Card S) #13733 — both remain governed by their own cards; neither is addressed here), and the maintainer had to unlock three times with personal words (the morning's five green PRs, then each of the two above). Same-tier review adds no capability redundancy; independence now comes from the context-isolated review subagent instead of from a separate seat.

Contradicting clauses rewritten (before → after)

Where Before After
SKILL.md 条款②入队闸门 「派发席职责止于:卡上记一行认定、停手;⛔ 禁止自查放行。…复审链细则…见 references/contract-review.md」 「交付后复核由派发席在席内完成(维护者 2026-08-31 裁定…):PASS ⇒ 同席剥标、ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行;…外部评审链降为可选事后审计,非放行前提。」 The invariant survives as ⛔ 免复核不放行 (release without review is still forbidden — what changed is who reviews); 卡上记一行认定 moved to the reference's carrier bullet.
SKILL.md director paragraph 四职 = needs:contract-review 复审链、… 四职 = needs:contract-review 事后审计(可选,放行归派发席席内复核 —— 见条款②闸门)、… (2026-08-27 verbatim quotes kept unchanged)
SKILL.md 负边界 「不走复审链」 「不走契约复核」 (wording follow-through only)
contract-review.md title/归属 复审链细则; 归属 = 常设唯一分诊席定时轮,总监席召唤兜底,标清后方可入队 复核细则(席内); 归属 = 该卡派发席,交付后收集复核当轮席内完成; the 2026-08-21 「你自己就是 Fable,自己就可以审核」 precedent and the 2026-08-25 「审核通过你应该直接负责合并吧…」 clearing-lands ruling are kept verbatim; the 2026-08-27 timed-wheel ownership quote is kept and marked as rewritten by this ruling
contract-review.md 载体纪律 同笔在该 PR 上向复审席账号 request review(仅通知) dropped — there is no external review seat to notify; replaced by 停靠短暂…⛔ 无「等外部席位」的无限期状态
lanes/director.md 职责一 兜底位,非常设处理者(常设定时处理归分诊席) 审计位,非放行链 — audit/spot-check; the 处理三分支 2026-08-27 verbatim quote and its three branches are unchanged
lanes/director.md 交接台账 …2026-08-27 再裁:常设 = 分诊定时轮,本席退为兜底 chain extended: → 2026-08-31 再裁:放行改派发席席内复核,定时轮与本席降为可选事后审计
lanes/skills.md 契约复审链与决裁勤务归项目总监席 契约复核归派发席席内、决裁勤务归项目总监席
landing-operations.md B 契约复审链 PASS 落地的 PR… 契约复核 PASS 落地的 PR…(席内清标与落地同一笔)

Deliberately untouched (checked, judged consistent): state-machine.md dual-carrier row (mechanics of hang/clear, process-neutral); seat-post-protocol.md linger scope line; SKILL.md 分诊席直连自排 duties line (代裁 stays; at-tier duties still run via transcript-verified fable subagents); check-half-states.mjs H31/H35 (their 自查放行 refers to the sweeper script never writing gate labels — unchanged semantics); ensure-pm-labels.sh / dispatch-gates.mjs label and tier constants.

Two verbatim quotes compressed to date-only references in lanes/director.md (both grounded mechanisms now two supersessions dead, retained as dated ledger entries): 2026-08-23 「要不还是你挂个定时处理审核吧」 and 2026-08-27 「同意,继续」. Flagging for the reviewing maintainer; easy to restore if wanted.

Line ratchet

  • contract-review.md ceiling raised 51 → 57 (landed count, headroom 0). Paid in place first: the wheel-ownership bullet, the request-review clause and the standalone qualification bullet were deleted or folded; the residual +6 could not be paid without deleting ruled clauses (refused on the state-machine precedent). Ruling authorizing the growth: maintainer 2026-08-31, quoted at the top of this PR. The map comment carries the same measurement.
  • SKILL.md 960 → 962 lines (ceiling 1005, headroom 43): +1 line of principle in the gate bullet, +1 from wrapping the director four-duty line to the 120-byte budget.
  • All other touched files land at unchanged line counts (director.md 77/77, skills.md 35/35, landing-operations.md 80/80).

Verification

Full gate union re-run on the final commit, head 9f16a386:

  • pnpm check:pm-skill-ratchet — ✓ (self-test 111 cases; every ceiling green, contract-review.md 57/57, SKILL.md 962/1005; 120-byte line budget clean)
  • pnpm check:pm-skill-id-lint — ✓ 23 file(s) clean
  • pnpm check:pm-governed-prose, pnpm check:skill-frame-sync (4 copies isomorphic), pnpm check:nul-bytes, pnpm check:doc-authoring, pnpm check:pm-governed-merges (230 assertions), pnpm check:watch-hint-literal, pnpm check:entry-guard, pnpm check:parse-guard, pnpm check:bash32-floor, pnpm check:cli-command-ids, pnpm check:agent-test-spelling, pnpm check:cross-package-test-inputs, pnpm check:pnpm-filter-targets — all ✓
  • Edited-gate-script obligations: node scripts/pm/check-skill-line-ratchet.mjs --self-test ✓ 111 cases; pnpm check:pm-dispatch-gates ✓ 1048 cases; node scripts/pm/bare-root-worklist.mjs --self-test ✓ (none stale/missing/contradicted); node scripts/check-ci-filter-parity.mjs ✓; node scripts/check-shard-attestation.mjs ✓; pnpm --filter @objectstack/lint run check:doc-formula-expressions ✓ after building @objectstack/formula and @objectstack/lint
  • NOT MEASURED locally (prerequisite not met, CI-owned): check-governed-queue-guard.mjs (reads the workflow event payload) and check-test-completeness.mjs (grades a saved turbo test log; this diff runs no tests)

This PR touches .claude/** and scripts/pm/** only — internal agent tooling, no published package: skip-changeset applies. Governed surface (.claude/**): stays draft for human review per the governed-merge rules.

Generated by Claude Code


Generated by Claude Code

…-08-31 ruling

The dispatching seat now completes the contract review itself after delivery
(judgment checklist; context-isolated adversarial fable review subagent on a
true fork or a dev flag), strips the needs:contract-review dual carrier on
PASS and releases (ready + auto-merge); FAIL is a patch round. The draft +
label short dock at PR creation stays. The external review chain (triage
timed wheel / director summons) is demoted to an optional post-hoc audit —
respected, but no longer a release precondition. The maintainer decision box
is untouched: true design forks still escalate.

contract-review.md ceiling 51 -> 57 (in-place payment exhausted; map comment
carries the measurement).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation labels Aug 31, 2026
@os-warren os-warren added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 31, 2026 — with Claude
@os-warren
os-warren marked this pull request as ready for review August 31, 2026 14:01
@os-warren
os-warren added this pull request to the merge queue Aug 31, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 31, 2026
@os-warren
os-warren added this pull request to the merge queue Aug 31, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 31, 2026
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[skill] pm-dispatch 条款② 复核改制:席内 fable contract review 取代「停靠等外部评审链」,缺位死等成为历史

3 participants