Uh oh!
There was an error while loading. Please reload this page.
pm-dispatch: REST channel as the default read path, plus the per-operation channel map - #11749
Merged
Merged
Conversation
…r-operation channel map Three folded cards, one quota-family change to the pm-dispatch reference surface. Policy flip: platform-readings.md's API-quota section now states the read order as git -> REST -> MCP/GraphQL, with the container curl channel (App installation token, REST core 15,000/hr, independent bucket) as the DEFAULT path for list/dedup/card/PR reads. The GraphQL pool is reserved for the operations with no REST twin. Every measured fact and provenance date already in the file is preserved; the three channel-partition rows consolidated into two, which paid for the two new right-sized-read rows in place. New references/rest-channel.md carries the per-operation mapping (read side, write side, the GraphQL-only handful, the git zero-quota bucket, the channel boundary), each row with its measurement date, plus the queue-routing readings. Ratchet: platform-readings.md LOWERED 133 -> 130 (shrink, no ruling needed); new CEILINGS row for rest-channel.md at its landed 46, headroom 0. Data rows only - no mechanism change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
This was referenced Aug 24, 2026
hotlong
marked this pull request as ready for review
August 24, 2026 15:11
hotlong
enabled auto-merge
August 24, 2026 15:11
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 24, 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.
Fixes#11364
Fixes#11375
Fixes#11366
Three folded cards from one quota family, one ruling stroke. Governed surface (
.claude/**) — this PR stays draft; human merge is the review.Ruling provenance
Which card drove which hunk
#11364 — the policy flip (
references/platform-readings.md, API-quota section). The read order is now stated as git → REST → MCP/GraphQL, with the container curl channel (App installation token, REST core 15,000/hr, independent bucket — measured 14,938 remaining while this seat's GraphQL pool was exhausted twice in one day) as the default path for list / dedup / card / PR / label reads. GraphQL is reserved for the operations with no REST twin. Every measured fact and provenance date already in the file is preserved; three channel-partition rows consolidated into two, and the downstream wording that still called REST a "退路" was brought in line (the degraded-read row, the "graphql remaining below 1000" rule, and the search-zero fallback row).#11375 — the content (new
references/rest-channel.md, 46 lines). The card body's mapping table lands as its own fact sheet: read side, write side, the GraphQL-only handful, the git zero-quota bucket, and the channel boundary, each ✓ row carrying its 2026-08-23 provenance date. Plus the 2026-08-24 addendum rows:merged_by= enqueuing actor (not bypass evidence), the distinguishing reading for queue routing, and the rename-coupling row (objectui, 9 required checks).#11366 — the two quota rows (
references/platform-readings.md). (a) Right-sizeperPageto the expected population — points scale with nodes/100, so a 3-item read atperPage:100pays ~33× the points; composes with the existing 107-point measurement rather than restating it. (b) Pace label/comment mutations ~1s apart — the 2,000-point/minute secondary limit sits beside the hourly pool and mutations count 5× for it, so a same-second batch trips the minute wall while the hourly pool is still green.Ratchet (
scripts/pm/check-skill-line-ratchet.mjs). Data rows only — no mechanism change (#11106 owns the bytes-vs-lines question and is not addressed here). New CEILINGS entry forrest-channel.mdat its landed 46, headroom 0, with a provenance comment in the same pattern as the state-machine / contract-review entries.platform-readings.mdLOWERED 133 → 130 — shrinking needs no ruling, and the consolidation paid for both new rows in place with three lines left over.Two premise corrections, declared rather than papered over
merge_groupzero-count reading is dead, and did not land as written. The dispatched row said "repo-wideevent=merge_grouprun count, zero on an enforced queue = empty required set". That inference was falsified on the same card 29 minutes after the addendum was written (count went 0 → 8 at 2026-08-24T11:04:47Z), and re-measured 224 in this session before writing the row. Landing it verbatim would have written a known-false inference into doctrine. What landed instead is the durable form the correction itself identifies: the count answers "has it happened yet", not "does the mechanism exist"; a zero count is a weak prior; the decisive reading is the attempted action. The measured history (0 → 8 → 224) is kept in the row as its own tombstone. Readings (a) and (b) — the direct-merge 405 and theadded_to_merge_queuetimeline event — survive untouched, and the fact sheet adds a third attempted-action reading (update-branch on a queued PR).platform-readings.mdalready carries a 2026-08-24 measured row thatissue transferhas no REST route. Landing "the only four" verbatim while the sibling file measures a fifth would have shipped a contradiction, soissue transferis listed as item 5 with its own provenance and a pointer to the existing rebuild recipe. Additive — no row from the card's table was dropped or rewritten.Also checked and not changed:
references/dispatch-runbook.md. #11364's body asked for the same reorder there, but the runbook carries no read-order policy — its single quota row is a pre-dispatch batch-sizing rule, unaffected by the flip. Editing it would have been a no-op at best.One home each
Verified per-fact across the two files:
maintainer_can_modify/transfer 路由/merged_bylive only inrest-channel.md;14,938/2,000 点/分/ the 107-point measurement live only inplatform-readings.md.added_to_merge_queueappears in both by design — the full doctrine row (spelling, boundary, theauto_merge-field warning) stays inplatform-readings.md, and the fact sheet composes with it by pointer, which is what the addendum asked for.Gates
Derived from the real changeset via
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackwith no path arguments (exit 0; provenance line names this repo at the commit below). All 12 matched families run green at HEAD41b3060d, exit codes captured before any pipe:Additionally run:
check:pm-dispatch-gatesandcheck:pm-governed-prose(both exit 0). The derivation flags these as artifact rosters sitting in a directory one of the changed paths is in — asilentverdict that "reads as a clearance and is not" — so they were run rather than inferred.No changeset:
.claude/**andscripts/pm/**publish nothing.skip-changesetapplied additively and read back.Generated by Claude Code
Generated by Claude Code