Uh oh!
There was an error while loading. Please reload this page.
Codify the triage direct-session operating mode: self-timed rounds, transcript-verified verdict subagents, Director backstop - #12744
Merged
Conversation
…ier-gated duties run via transcript-verified subagents Codifies the six 2026-08-27 maintainer rulings recorded on the triage operating-mode card (the 14:07Z ruled shape, the five-piece package, and the chain timed-processing split): 1. Triage seat = normal direct session, whole seat at opus (the mechanical trio needs at most opus). 2. Tier-gated duties (proxy-adjudication, Clause-2/contract-review increments) run via a subagent dispatched with explicit `model`. 3. Transcript tier verification: before any verdict is adopted or any label cleared, the dispatching session greps the subagent transcript for the per-message API-stamped model field; every verdict-producing turn must read the contract-review tier; fallback evidence voids the verdict. Dispatch params are configuration; the reading measures serving. 4. No-edit guardrail: the parent adopts a verdict verbatim or voids it whole (mechanical void reasons only); it never rewrites, trims, or improves verdict content. 5. Self-timer default: armed at round END, delay at most 55 minutes (the 1-hour prompt-cache TTL minus measured timer jitter keeps the shift on one cache chain; overage and compaction boundaries recorded as a note); overridable by explicit maintainer request. 6. Chain timed-processing split: standing contract-review processing = the triage timed round; the Director seat = summon-time backstop plus the BLOCKED branch inside adjudication batches; anti-double-run hard line; every round report carries the review roster beside the adjudication one. All three files stay at their zero-headroom ratchet ceilings (1005/48/75); every added line is paid by same-file cuts whose surviving homes are listed in the PR body. Fail-safe direction untouched everywhere: unverifiable means skip/void, never self-report; the Director's own get_session fuse for its direct-session duties stays as-is. Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq Co-authored-by: Claude <noreply@anthropic.com>
os-litant
marked this pull request as ready for review
August 27, 2026 16:16
os-litant
enabled auto-merge
August 27, 2026 16:16
os-litant
disabled auto-merge
August 27, 2026 16:17
os-zhuang
approved these changes
Aug 27, 2026
os-zhuang
approved these changes
Aug 27, 2026
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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#12706
Codifies the six maintainer rulings recorded on the card (2026-08-27) into the pm-dispatch governed protocol text. All ruling quotes verbatim, untranslated.
The six rulings
claude-fable-5subagent dispatched with explicitmodel— the dispatch-param mechanism, not session self-introspection.modelfield; every verdict-producing turn must readclaude-fable-5; fallback evidence voids the verdict (redo or maintainer path). Dispatch params are configuration; the fuse measures serving.Per-file clause rewrites
.claude/skills/pm-dispatch/SKILL.md(1005 lines before and after)modelfable subagent, each verdict past transcript verification (2026-08-27 裁), or the at-tier Director seat; mechanics live inreferences/contract-review.md. The 2026-08-26 hard-gate quote and the 2026-08-12 confidence-gate conditions are unchanged..claude/skills/pm-dispatch/references/contract-review.md(48 lines before and after).claude/skills/pm-dispatch/references/lanes/director.md(75 lines before and after)Cut ledger (net 0 per file; every cut names its surviving home)
SKILL.md:
references/platform-readings.md(写侧 sanitizer 条款); incident case law lives in git history per house rules.references/platform-readings.md(状态核验/门禁放行判据 entry).references/platform-readings.md(断粮检测 section); the fact-table pointer stays in the bullet.contract-review.md:
references/lanes/director.md交接台账.references/landing-operations.mdsection B.references/platform-readings.md(读数陷阱, get_session entry).director.md:
../contract-review.md(归属 and 载体纪律), pointed at by the same bullet.Ratchet readings (at 0006e0c)
Gates — all re-run at HEAD 0006e0c; every exit captured before any pipe via the verify-lock VERDICT line
pnpm check:pm-skill-ratchet— exit 0; per-file verdict lines quoted above.pnpm check:pm-skill-id-lint— exit 0; "✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g)."pnpm check:skill-frame-sync— exit 0; "✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files".pnpm check:skill-frame-freshness— exit 0; "✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now)."pnpm check:pm-governed-prose— exit 0; "✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md) and claim no others."node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(9 matched families for this diff; run without paths, changeset derived by the script from merge-base): additionallypnpm check:agent-test-spelling(exit 0),pnpm check:doc-authoring(exit 0; "✓ doc authoring guard: 48 published skill files clean — no internal issue-id references."),pnpm check:pm-governed-merges(exit 0; self-test 206 assertions plus live generator certification),pnpm check:nul-bytes(exit 0; "check-nul-bytes: OK (scanned 7072 text file(s) ... no raw ASCII control bytes)"), andpnpm --filter @objectstack/lint run check:doc-formula-expressions(exit 0; "✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 424 files / 1451 TS blocks judged clean"). The last gate refused twice with PREREQUISITE NOT MET (unbuilt @objectstack/formula, then @objectstack/lint) — both recorded as NOT MEASURED, both packages built, gate re-run green.check-governed-queue-guard— CI-only (governed-surface-guard.yml) ⇒ NOT MEASURED locally.Acceptance replay — one triage round under the new text
claude-fable-5subagent is dispatched with explicitmodelper task; before adopting either verdict or clearing any label, the session greps the subagent transcript's per-messagemodelfield — every verdict-producing turn reads the contract-review tier, and a fallback stamp voids that verdict whole (redo or maintainer path); the parent adopts verbatim or voids whole, never edits.Not touched
seat-post-protocol.md (pointed at, not edited), decision-analysis.md, state-machine.md, every script, the four-copy decision frame, the governed-surface namings. Fail-safe direction intact everywhere: unverifiable ⇒ skip/void, never self-report; the Director's own get_session fuse for its direct-session duties stays as-is.
Draft on purpose — the diff touches a governed surface (.claude/skills), human merge only. skip-changeset: internal agent instruction text, nothing publishes.
Generated by Claude Code
Generated by Claude Code