Skip to content

docs(pm-dispatch): downgrade fuse reads the get_session machine reading, not self-belief; extend the fuse to auto-adjudication - #10363

Merged
qq9340100 merged 1 commit into
mainfrom
claude/issue-10300-machine-read-fuse
Aug 20, 2026
Merged

docs(pm-dispatch): downgrade fuse reads the get_session machine reading, not self-belief; extend the fuse to auto-adjudication#10363
qq9340100 merged 1 commit into
mainfrom
claude/issue-10300-machine-read-fuse

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#10300

Card-scope ruling (maintainer-surfaced live incident, 2026-08-20), implemented verbatim — three deltas, two files, net-0 lines on both:

1. Contract-review sub-round fuse becomes a machine reading (SKILL.md, review-chain clause)

The sub-round's opening self-check is now a mandatory get_session call (claude-code-remote MCP, no args) reading external_metadata.last_served_model; a reading unequal to CONTRACT_REVIEW_TIER skips the sub-round whole, labels stay. Safe-park semantics unchanged — only the reading source changes. The forbidden input is named in the clause: 「⛔ 自述档位不是读数」. Tier single-source is preserved: the clause compares against the CONTRACT_REVIEW_TIER constant, no model name added.

2. Same fuse for auto-adjudication (SKILL.md, confidence-gate item 5)

The 置信门 previously had no fuse at all — a silently downgraded fire would adjudicate below the ruled tier. It now takes the same machine reading before adjudicating; on mismatch the fire's adjudication is skipped whole and the card stays in the decision inbox on the maintainer path, which is always safe.

3. One measured row in platform-readings.md (exactly 134/134)

Sessions cannot detect their own downgrade from context: fallback banners render UI-side only (measured 2026-08-20 — a triage fire fell Fable to Opus 5 to Opus 4.8 silently and still self-asserted the review tier at the fuse). get_session.external_metadata.last_served_model is the authoritative serving-model reading; session_context.model is the CONFIGURED model and must not be the fuse input. Paid net-0 by a real dedup: the quota-wall bullet's "the wall signal is the failure itself / note the reset time" sentence duplicated the main file's standing principle (「权威的墙信号是失败本身……把它记下来」) and was compressed to the fact-supplement that is unique to the table (the measured message shape).

Premise independently re-verified this session: the claude-code-remote get_session tool contract states session_context.model is the selected model and external_metadata.last_served_model is the model that served the latest turn.

Composes with the clause-① narrowing landed in PR 10311 (adjacent subject, untouched) and with the mutex third reading landed in PR 10208.

Verification (all at head c83ae97, clean tree)

Gate list re-derived from the actual diff via node scripts/pm/dispatch-gates.mjs (no paths — merge-base derivation, 2 paths vs merge base 9a1ed7a): exactly the 7 dispatched families, no additions. All run locally, each verdict from the gate's own printed line, exit codes captured before any pipe:

  • check:pm-skill-ratchet — SKILL.md 681 lines (ceiling 682, headroom 1 untouched); platform-readings.md 134 lines (ceiling 134, headroom 0, exact net-0)
  • check:pm-skill-id-lint — 16 file(s) clean
  • check:pm-governed-prose — 2 instruction surface(s) name all 5 registered governed surfaces
  • check:pm-governed-merges — self-test, 81 assertions
  • check:skill-frame-sync — 4 copies structurally isomorphic across 3 files (frame untouched)
  • check:doc-authoring — 380 files clean
  • check:doc-formula-expressions — 22 record-scoped formula examples judged clean (deps built first: pnpm --filter closure build under the shared verify lock)
  • scripts/check-nul-bytes.mjs — OK, 6102 text files, no raw control bytes

Reverse verification on the ratchet gate, from the committed state: appended one probe line to platform-readings.md (mutation confirmed on disk — marker grep count 1, wc 135), gate went red with its own verdict line "135 lines; the ratchet ceiling is 134"; restored via git checkout from the branch (marker count 0, wc 134), gate green again. Expected direction observed: red on mutation.

Governed surface (.claude/**): draft, human merge only — never ready, never queued, never auto-merge. Review requested from os-zhuang. Tests-and-instructions-only change, publishes nothing: skip-changeset applied.


Generated by Claude Code

…ng, not self-belief; extend the fuse to auto-adjudication
The contract-review sub-round's opening self-check becomes a mandatory
get_session call reading external_metadata.last_served_model (self-asserted
tier is named as forbidden input); the auto-adjudication confidence gate
gains the same fuse with the same skip-and-park outcome. One measured row
lands in platform-readings.md (net-0): sessions cannot detect their own
silent downgrade from context; session_context.model is the CONFIGURED
model and must not be the fuse input.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019T1sSZbQTnLhrK9HhNdNiB
@qq9340100qq9340100 added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s labels Aug 20, 2026 — with Claude
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 20, 2026
@qq9340100
qq9340100 marked this pull request as ready for review August 20, 2026 17:16
@qq9340100
qq9340100 added this pull request to the merge queueAug 20, 2026
Merged via the queue into main with commit be9dfe8Aug 20, 2026
26 checks passed
@qq9340100
qq9340100 deleted the claude/issue-10300-machine-read-fuse branch August 20, 2026 17:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

1 participant

@qq9340100