Uh oh!
There was an error while loading. Please reload this page.
refs(pm-dispatch): qualify the REST prescriptions as per-session, and bank four platform readings - #12091
Merged
Merged
Conversation
…-> 299) Pays for the platform-readings consolidation without raising the ratchet ceiling. This commit changes NO words: it joins each paragraph back to one logical line and re-wraps it with the ratchet gate's own exported `wrapLine`, which by construction only ever moves whitespace (a space becomes a newline, or a newline is inserted between two wide characters). Multi-line 「…」 ruling quotations are left byte-for-byte alone -- their line structure is the author's and the gate exempts it, so the re-wrap never makes a quoted maintainer ruling un-greppable. Proof, both directions, run before the write: - every paragraph collapsed back to one logical line is byte-identical before and after; - the whitespace-stripped whole file is byte-identical before and after (this is what catches a space wrongly inserted or dropped at a join). Gates on this commit: check:pm-skill-ratchet, check:doc-authoring, check:nul-bytes, check:skill-frame-sync, check:pm-skill-id-lint all green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
…atform readings platform-readings.md prescribed REST in three places as if it were always available, while recording one bullet earlier that the direct-REST gate is a per-session authorization snapshot. A seat that read in order learned the fallback existed, reached for it mid-outage, and got a 403 with no next step named. Both measurements stand -- the correction is the modality. Landed on this branch: - REST availability is a SESSION property: probe once at shift start (the round-opening /rate_limit curl doubles as it), bank it for the shift, and read the degradation ladder when the gate is shut -- git-first, then a SINGLE-label MCP list plus a local intersect (the labels array is OR, so a multi-label request only ever comes back wider than either input), then wait for reset. The three prescriptions now point at it instead of each re-deriving a channel choice. - An empty dedupe is NOT a reading until a known-hit control answered in the same session -- unconditional, not "verify when the result looks odd". - undraft goes through the MCP update_pull_request draft:false and nowhere else: raw GraphQL is refused in-session (and the refusal's own advice to use REST is wrong here), raw REST PATCH answers 200 and does nothing. - enable_pr_auto_merge's mergeMethod is inert -- SQUASH reads back as `merge`; harmless because the queue performs the merge and its own method governs, this repo being squash-only. - The downgrade fuse's get_session reading forks by host: where the ccd host excludes the current session by contract, the transcript-JSONL "model": field is the valid substitute, own-session only. - The auto-mode classifier's verdicts are shape-sensitive, not capability boundaries: retry the core action BARE before reporting blocked. Paid entirely by compression, no ceiling raised. The API-quota section stated the channel prescription four times over; consolidating it into one gate bullet plus pointers is the purse. The ceiling is LOWERED 315 -> 314. Gates (verdict lines quoted in the PR body): check:pm-skill-ratchet, check:doc-authoring, check:nul-bytes, check:skill-frame-sync, check:pm-skill-id-lint, plus the families the changeset re-derivation added for scripts/**. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
hotlong
marked this pull request as ready for review
August 25, 2026 09:16
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 25, 2026
This was referenced Aug 25, 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 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.
Closes#11835, closes#11573, closes#11577, closes#11114
Part of #11604
One file:
.claude/skills/pm-dispatch/references/platform-readings.md(plus one ceilingnumber in the ratchet). #11604 stays open — only its REST-403-per-session item lands here.
The unifying edit (#11835)
The table prescribed REST in three places as if it were always available, while recording
one bullet earlier that the direct-REST gate is a session-start authorization
snapshot. Both measurements stand; what was missing is the modality. A seat reading in
order learned the fallback existed, reached for it mid-outage, and got a 403 with no next
step named — exactly when it had the least room to improvise.
The three prescriptions no longer each re-derive a channel choice. One new bullet carries
the probe and the ladder; the others point at it.
Per-item checklist
/rate_limitcurl doubles as it), bank per shift, ⛔ never infer from another seat's reading (2026-08-24, three seats in one window: two 403, one 200)search_issues归零 · MCP 参数两陷阱search_issues归零 bulletupdate_pull_request draft:false(three PRs, read back each time); raw GraphQL refused in-session and its own "use REST" advice is wrong here; raw RESTPATCHanswers 200 and does nothingenable_pr_auto_mergebulletMERGE" recorded as an unreliable echoauto_merge.merge_methodismergetoo; harmless because the queue performs the merge and its method governs, this repo being squash-only ⇒ ⛔ don't burn calls toggling itget_sessionexisted everywhere"model":field, host-authored, own-session onlypermissions.allowis the only deterministic channelCeiling: paid by compression, and LOWERED
platform-readings.mdwas at 315 / 315, headroom 0. It lands at 314, and theceiling in
scripts/pm/check-skill-line-ratchet.mjsis lowered315 → 314to bank it.Nothing was raised.
Two commits, deliberately separate, because they want different kinds of review:
1.
bd7e064— canonical re-wrap, whitespace only (315 → 299). Changes no words. Itjoins each paragraph back to one logical line and re-wraps it with the ratchet gate's own
exported
wrapLine, which by construction only moves whitespace. Multi-line 「…」 rulingquotations are left byte-for-byte alone, so no quoted maintainer ruling stops being
greppable on one line. Proven before the write, both directions, and re-checked after:
that catches a space wrongly inserted or dropped at a join.
2.
01bcccae— the content diff. Review this one. Against the base, 17 paragraphschanged and 4 bullets are new; everything else in the file is untouched content. To see
only that, compare the two joined forms rather than the wrapped diff.
Where the ~26 lines of content were paid from — all inside the channel/quota family this
edit unifies, every measured fact and every date retained, restatement removed:
list/search,
ghCLI, 红窗调度, and again inside git 先行). Consolidated to one gatebullet plus pointers — that redundancy is the purse.
search_issues归零 lost its duplicated REST recipe and its "don't hand-scan" clause wasmerged into ladder rung ②, where it had read as opposed advice.
两个瘦身参数 (the ratchet's own doctrine: provenance is one line, stories live on cards).
Gates
Union run after the final commit, at
01bcccae4. Exit codes captured before any pipe;verdict lines are the gates' own:
check:pm-skill-ratchet→✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/platform-readings.md is 314 lines (ceiling 314; headroom 0).check:doc-authoring→✓ doc authoring guard: 389 files clean — no bare metadata literals.check:nul-bytes→check-nul-bytes: OK (scanned 6704 text file(s) -- 6704 tracked, 0 untracked-not-ignored; skipped 6 binary; no raw ASCII control bytes).check:skill-frame-sync→✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filescheck:pm-skill-id-lint→✓ check-skill-id-lint: 22 file(s) clean (pattern /#[0-9]{3,}/g).scripts/pm/dispatch-gates.mjs(run with no paths, so it derives its own change set) addedfamilies the dispatch word did not name, because this branch also edits
scripts/**. Allgreen at the same head:
check:agent-test-spelling,check:cross-package-test-inputs,check:entry-guard,check:parse-guard,check:pm-governed-merges,check:pnpm-filter-targets,check:doc-formula-expressions,scripts/check-ci-filter-parity.mjs,scripts/check-cross-package-test-inputs.mjs.Two of those first reported PREREQUISITE NOT MET rather than a finding (a fresh worktree
has no
node_modules;@objectstack/formulaand@objectstack/lintwere not built).Both were green once installed and built — recorded because the un-run state exits 1 and
would read as a failure.
Also self-scanned beyond the gate for raw control bytes in both changed files: no match.
No changeset — nothing here is published;
.claude/**andscripts/**ship to nobody.Governed surface (
.claude/skills/**) ⇒ draft, human merge. #11604 is not addressed herebeyond its item 2 and remains open.
Generated by Claude Code