Uh oh!
There was an error while loading. Please reload this page.
skills(pm): PM-supplied dedup reading rides the dispatch prompt; dev search-before-file goes REST - #11870
Merged
Merged
Conversation
…'s own search goes REST Dev usage shaping (option 2 of the 1+2+3 quota ruling): the GraphQL pool is the scarce bucket, and the dispatched dev — not PM patrol — is the fleet's biggest consumer of it. - dispatch-runbook.md: the two dispatch-time readings are now ONE row with one shared judgement — a reading the PM already holds is handed down once, never re-run by N devs. The gate list was already there; the dedup/board reading is the new half (query + timestamp, whole batch shares it, dispatch word says "treat as given, re-verify only the increment"). - os-dev.md rule 3: search-before-file and list reads go through the REST channel (list endpoint + local grep), composed BY POINTER with references/rest-channel.md — stated once, no second copy of the channel table. Both files land exactly at their line ceilings (405 / 242), paid for in place: the runbook's two reading rows merged into one, and the file-surface bullet reflowed from 3 lines to 2 with byte-identical text. No edit to rest-channel.md or platform-readings.md (both at ceiling, headroom 0). 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 25, 2026 00:35
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#11365
Option ② of the maintainer's 2026-08-23 quota ruling (verbatim, untranslated: 「1+2+3」) — dev usage shaping. The GraphQL pool is the scarce bucket and the dispatched dev, not PM patrol, is the fleet's biggest consumer of it: one dev measured ~5,658 GraphQL points in ~15 minutes, dominated by dedup/search reads that every dev in a batch re-runs independently.
Two shaping rules land, one per side, in the two files the claim comment declared.
PM side —
.claude/skills/pm-dispatch/references/dispatch-runbook.mdThe runbook already told the PM to take the gate list at the dispatch moment and hand it down (dev never enumerates the whole farm). The dedup/board reading is the same shape, so it landed as the second half of one row rather than a second row: a single judgement — a reading the PM already holds is handed down once; N devs never re-run it — then ① the gate list (unchanged content) and ② the dedup/board reading (query + timestamp, shared by the whole batch, dispatch word says "treat as given, re-verify only the increment, never re-run the scan"). The dev-side counterpart of both stays pointed at the os-dev definition, stated once instead of twice.
Dev side —
.claude/agents/os-dev.md(rule 3, 立单纪律)search-before-fileand list reads now go through the REST channel — list endpoint + local grep — composed by pointer withreferences/rest-channel.md, whose 「语义搜索」 row already spells that fallback. The channel table is not copied; one clause names the rule, the reason (GraphQL is the fleet's tightest bucket) and the pointer. The same clause carries the dev half of the PM rule: the dedup reading arriving in the dispatch prompt is treated as given, only its increment is re-verified.Line ratchet — both files land exactly at ceiling, paid in place
.claude/agents/os-dev.md.claude/skills/pm-dispatch/references/dispatch-runbook.mdNo ceiling was raised, and
scripts/pm/check-skill-line-ratchet.mjsis untouched. os-dev.md spends the 2 lines of headroom the ratchet header calls "the budget for ordinary rule edits". The runbook had none, so its addition was paid twice over, in place:条款住 os-dev 定义collapsed from two occurrences to one);文件面两句原文bullet reflowed from 3 lines to 2 — byte-identical text, only the line breaks move. Verified mechanically, not by eye: whitespace-normalized old lines 219–221 vs new lines 220–221 compare equal, 121 characters each side.No edit to
rest-channel.md(46/46) orplatform-readings.md(130/130) — the two files the dispatch named as hard constraints. Composition with the first is by pointer only, so no ceiling arithmetic is owed for either.state-machine.mdand the patrol scripts (owned by the sibling dispatch this wave) are likewise untouched — the file surface is exactly the two files above.Gates
Derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no path args; the script took the change set from git itself). Nine families matched; all nine run and green at the final commit7b246a30, exit codes captured before any pipe:check:agent-model-declared✓ check-agent-model-declared: 1 agent definition(s) under .claude/agents/ all declare a modelcheck:agent-test-spelling✓ check-agent-test-spelling: 0 violations — 357 file(s) · 1108 launcher-rooted run(s) · 8 separator(s) JUDGEDcheck:doc-authoring✓ doc authoring guard: 389 files clean — no bare metadata literals.check:doc-formula-expressions✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 421 files / 1448 TS blocks judged clean by @objectstack/formula.check:nul-bytescheck-nul-bytes: OK (scanned 6601 text file(s) … no raw ASCII control bytes).check:pm-governed-merges✓ check-governed-merges --self-test: 129 assertions …check:pm-skill-id-lint✓ check-skill-id-lint: 22 file(s) clean (pattern /#[0-9]{3,}/g).check:pm-skill-ratchet✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 405 lines (ceiling 405; headroom 0).and… dispatch-runbook.md is 242 lines (ceiling 242; headroom 0).check:skill-frame-sync✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filescheck:doc-formula-expressionsfirst exited 1 twice withPREREQUISITE NOT MET(@objectstack/formula, then@objectstack/lintnot built) — nothing was measured on those runs; both packages were built and the gate then judged green. Reported because a reader of the first log would otherwise see a red that says nothing about this diff.Repo-wide
pnpm lintwas narrowed to the changed files, and the narrowing is measured, not assumed: (1) the population comes from eslint's own config, which supplies no configuration for.md— both changed files come backFile ignored because no matching configuration was supplied; (2)--format jsonreports 2 files judged, 0 errors; (3) the diff contains no TS/JS and no eslint config change, so no untouched file's verdict can move. No changeset: the diff is.claude/**-only and publishes nothing — declared with theskip-changesetlabel.Governed surface (
.claude/**) ⇒ draft PR, human merge. Not flipped ready, auto-merge not enabled.Generated by Claude Code