pm-dispatch: SKILL.md wave-2 family — two-tier triage inventory, decision re-read, subagent tier fuse, git-history guard index - #11091
Merged
Conversation
…one daily full four-repo reconciliation fire The triage round's four-repo FULL open-issue inventory becomes a daily reconciliation backstop; hourly fires run on since windows anchored to the previous round-close brief's timestamp (read from the seat post — the same reading the round-open mutex already takes). The daily tier is picked by fire-time-of-day, never a counter, and the brief states which tier ran. SKILL.md carries the principle; the since-equivalent readings, cost targets and daily-duty clustering live in references/dispatch-runbook.md. Both ratcheted files stay at their ceilings (682/682, 243/243), additions paid by in-file trims. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
…the race re-read Before writing a dispatch brief, read the card's comments to the last page and quote any maintainer ruling verbatim into the brief's ruling partition as binding — or state that none exists. The race re-read answers 'is this card taken?'; it cannot answer 'has this been ruled?' (a ruling comment carries no session ID, and a ruled card put back in the queue is label- identical to a never-ruled one), and a brief written without it re-opens a closed fork and drops the ruling's own dispatch constraints. Nets -2 lines on the ratcheted SKILL.md (680/682 after this commit). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
…nt get_session reading measures the dispatching session State plainly in the contract-review chain that a mode:subagent get_session reading reports the DISPATCHING session's model (the two fields agreeing is one source quoted twice, not corroboration), so a subagent cannot attest the tier it actually ran at. Clause-② subagent dispatches therefore always keep needs:contract-review, and the dispatched-at-the-floor review skip is seat-session-only. SKILL.md at 681/682 after this commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
… row in the dispatch skill, windowed-history rule in AGENTS.md The prescribed shallow-history remedy was named in no instruction file, so a seat asking a windowed churn question had no way to find it: a shallow clone answers windowed git log/rev-list at exit 0 with no warning. AGENTS.md gains the rule (answer, or REFUSE; historyHorizon() is the read-only predicate), the pm-dispatch 机械守卫索引 gains the ratchet-paid row. Both files stay at their ceilings (961/961, 682/682), additions paid by in-file content trims. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
This was referenced Aug 22, 2026
os-zhuang
marked this pull request as ready for review
August 22, 2026 16:57
Contributor
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32586272156 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
This was referenced Aug 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #10190
Fixes #10544
Fixes #10523
Fixes #10508
Maintainer-authorized family fold (recorded on the chain-head claim, live PM chat 2026-08-22): four graded cards, one commit per member, one shared branch. Governed surfaces throughout (
.claude/skills/**,AGENTS.md) — draft PR, human merge only; never queue/arm/ready.Members (one commit each, in order)
c2d962af) — SKILL.md gains the principle in the 分诊座位职责 section: hourly rounds readsincewindows anchored to the previous round-close brief's timestamp from the seat post (the mutex guard's existing reading — no new state; label writes refreshupdated_at; anchoring on the brief covers a skipped-fire backlog); one daily fire runs the four-repo full reconciliation and clusters the already-daily duties; the tier is picked by fire-time-of-day, never a counter; the brief states which tier ran. Thesince-equivalent readings, cost targets and daily-duty clustering land inreferences/dispatch-runbook.md(new section 分诊两级盘点细则 with the maintainer's 2026-08-20 verbatim quote).ad9c80fe) — the pre-brief protocol (候选与批次) gains the decision re-read, symmetrical to the claim protocol's race re-read: read the card's comments to the last page before writing a brief; quote any maintainer ruling verbatim into the brief's ruling partition as binding, or state none exists. Lead 1 of the card only; leads 2–3 (greppable marker, body-carried ruling) are noted adjacencies, not implemented.9857ead3) — theneeds:contract-reviewchain now states: amode:subagentget_sessionreading measures the dispatching session (the two fields agreeing is one source quoted twice), so the downgrade fuse is valid only for seat sessions; clause-② subagent dispatches always keepneeds:contract-review, and the dispatched-at-the-floor review skip is seat-session-only. Composes with the 2026-08-21 self-review relaxation (that path is a seat session reading its own row) — no conflict measured.9e58b7d8) —AGENTS.md(Multi-agent working discipline) gains the windowed-history rule using the card's drafted wording (answer or REFUSE; shallow clones answer windowedgit log/rev-listat exit 0 with no warning;historyHorizon()is the read-only predicate), and the pm-dispatch 机械守卫索引 gains thescripts/pm/git-history.mjsrow, ratchet-paid. Both placements landed (the SKILL.md row was affordable).Ratchet ledger (all three files at their ceilings before AND after; verified at
9e58b7d8).claude/skills/pm-dispatch/SKILL.md.claude/skills/pm-dispatch/references/dispatch-runbook.mdAGENTS.mdOne dispatch mechanism assumption was falsified and is reported here: the runbook is not unratcheted — it carries its own 243-line ceiling at zero headroom, so member 1's runbook section is paid in-file too. Additions are paid by content deletions, never bare re-wrap: trimmed redundancy/incident-narrative in the runbook (读数成本三则 intro, 落卡细则 measured-narrative per its own 行文纪律, 活性巡查 tail, roster/SendMessage duplication with the main file, 紧急卡 restatement of a rule the main file owns, subagent-checkout incident detail), in SKILL.md (objectos onboarding history, dispatch-gates clause duplicated by the runbook's 清单取数补遗, one stale-premise rationale clause), and in AGENTS.md (merged-language incident narrative, duplicated-branch incident sentence, stash/registry incident detail — case law lives in git history per the ratchet's own header). Per-commit ratchet stays ≤ ceiling at every step (682 → 680 → 681 → 682).
Gates (final tree
9e58b7d8, derived bynode scripts/pm/dispatch-gates.mjson the actual change set; exits captured before any pipe)check:pm-skill-ratchet— ✓ all 20 files within ceilings (verdict lines: "682 lines (ceiling 682; headroom 0)", "243 (243; 0)", "961 (961; 0)")check:pm-skill-id-lint— ✓ "17 file(s) clean (pattern /#[0-9]{3,}/g)"check:skill-frame-sync— ✓ "binding sentence present in all 4; 4 count mention(s) agree";check:skill-frame-freshness— ✓ "frame itself is unchanged"check:pm-governed-prose— ✓ "2 instruction surface(s) name all 5 registered governed surfaces"check:pm-governed-merges— ✓ self-test 119 assertionscheck:doc-authoring— ✓ "389 files clean";check:docs-audit-scope— ✓;check:required-contexts— ✓pnpm --filter @objectstack/lint run check:doc-formula-expressions— ✓ (after building the lint dependency closure; first run failed only on unbuilt@objectstack/formuladist)check:nul-bytes— ✓ "no raw ASCII control bytes" (6414 files)Instruction-file-only diff, releases nothing →
skip-changeset(label applied and read back after PR creation).Generated by Claude Code
Generated by Claude Code