Repository navigation
program(pm): rule-text diet and guard-script split for the skills lane — 3,020 lines of skill text, 126k lines of pm scripts (two files 65k), 58 commits in two weeks; plus a body section-patch door and template files for seat writes #22060
Description
Filing gate: ③ a maintainer-directed task. After the seat's assessment of the skills lane in this session (eight optimization items), the maintainer answered, verbatim: 「创建卡片,暂时不派发。」 — this card is the program anchor for the long-horizon items of that assessment (rule-text diet, guard-script split, the dist-dependent NOT MEASURED pattern, a section-level body patch door, template files for seat writes). ⛔ Not a single-point card: each work item below becomes its own card when work starts, one per fire; ⛔ not a claim, ⛔ not a dispatch. Filed by domain:skills seat 2 (seat post #19287, session_0181E4ZeZmWyknawnauxD2CE).
Reader: triage first-touch → domain:skills (tracking if triage reads it as a program anchor); when the hold lifts, the skills seat files the first child and dispatches it.
Dedupe: REST listings, closed included (labels=tooling since 2026-09-07: 417; every issue updated since 2026-10-01: 625; domain:skills since 2026-09-23: 109; union 1,030) grepped for ratchet|platform-readings|rule text|text diet|split.*(dispatch-gates|half-states) → 18 hits; the precedent is #13597 (closed: PM corpus audit, maintainer-directed — classify every instruction line keep / duplicate / demote / delete, then rewrite and re-lock); body.*(section|patch)|issue_patch.*body → 4, prior art #20571 (closed: a 41 KB issue_patch body came back with two U+FFFD replacements); template → 0. #21719 (closed) covered the verify-lock hold of check:pm-dispatch-gates.
Maintainer hold at filing, verbatim: 「创建卡片,暂时不派发。」 — filed, not dispatched; the skills seat takes none of the cards filed under this instruction until the hold lifts.
Restart-when: the maintainer or the director seat comments on this card lifting the dispatch hold
What is measured (the checkout at origin/main 93125aee, the board over the two weeks before this filing)
| surface | reading |
|---|---|
| Skill text | 3,020 lines: SKILL.md 319 (ceiling 342), .claude/agents/os-dev.md 402, 25 reference files 2,299; platform-readings.md alone 469 lines; 13 references carry CEILINGS 0 (no ceiling) |
| Churn | 58 commits touching the skill, the agent file or scripts/pm in two weeks (16 fix, 21 docs); execution-duties.md 14, SKILL.md 13, landing-operations.md 9 |
| Guard scripts | 36 files, 126,032 lines; check-half-states.mjs 34,938 + dispatch-gates.mjs 29,870 = 51% of the total; 27 check:pm-* package scripts; 35 of 36 scripts carry --self-test |
| Self-test cost | pnpm check:pm-dispatch-gates battery 842.7 s and 1,023.8 s in the two dev reports of this shift (1,976 cases), under the shared verify lock |
| Dev gate runs | dispatch-gates --commands derived 82 and 44 commands for two small PRs; 5 and 4 of them NOT MEASURED every time for want of dist/ in a fresh worktree (check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content, check:doc-formula-expressions), each report re-stating the same narrowing prose |
| Seat writes | about 15 GitHub writes by this seat in one shift, 5 refused by the tools (bare stamp ×2, a future stamp, a 258-byte title, an --ack-through miss) plus one claim corrupted by shell expansion of backticks and fixed by comment_edit; a body re-fetched with gh api --jq .body carries one extra trailing newline that a whole-body issue_patch then stores |
Work items (each a future single-point card; none is claimed here)
- W1 — platform-readings diet. Every reading in
platform-readings.mdthat a tool now enforces (relative ids, AND-label listing, stamp contract, title cap, footer behaviour …) is deleted from the text; the rule becomes "tool first, text second": a new reading lands as a tool behaviour or a self-test row, and the text keeps only what no tool can hold. Pin: the file shrinks andcheck-skill-line-ratchetgets a ceiling for it. - W2 — ceilings for the 13 ceiling-0 references. A maintainer ruling sets a number per file (the ratchet header says raising a ceiling needs a ruling quoted in the PR; setting one from 0 is the same act). Decision point, folded into the first child's PR body.
- W3 —
dispatch-gates.mjsunfreeze-and-split plan. The file is frozen under ruling 208; the split (gate roster as data, one small engine, tiered self-test fast/slow) needs the maintainer to lift the freeze for exactly that refactor. Decision point. - W4 —
check-half-states.mjssplit. Same shape as W3 without the freeze: data tables out of the engine, self-test tiers, the lock hold measured before and after (finding(pm):pnpm check:pm-dispatch-gatesholds the shared verify lock about 20 minutes per run, so sibling devs' locked scanner runs queue out at 540 s — the lock's own holder-side starvation warning fired on every run this shift #21719's measurement reused). - W5 — the dist-dependent NOT MEASURED family. Either a pre-built
dist/the dev worktree can reuse (a cache keyed on the workspace lockfile) or a declared family indispatch-gates --ranso a fresh worktree reports "DERIVED, dist-dependent, CI measures" in one line instead of five paragraphs. Pin: a dev report's--ranreconciliation names the family and no prose. - W6 — a section-level body patch door.
issue_patch(or a smallbody-section.mjs) replaces one## headingsection of an issue or PR body, refuses when the heading is absent or ambiguous, strips exactly the trailing newline--jqadds, and reads back the whole body. Prior art finding(fleet-write): anissue_patchbody of about 41 KB comes back with two multi-byte characters replaced by U+FFFD, about 16 KB apart, identically on a re-send — anddispatch.mjsreports success without comparing the read-back #20571 (U+FFFD on a long body) is the second pin. - W7 — template files for seat writes. The claim comment, the seat post body and the contract-review record become template files plus a fill script;
post-stamped --dry-runruns as the lint before every write. Pin: a claim never passes through a shell variable again (the backtick expansion of this shift).
Done when (for the program)
- Every W above has its own card filed and dispatched, or a one-line maintainer ruling drops it (recorded here).
- Re-measured after the children land: skill text lines,
scripts/pmlines, the dispatch-gates battery seconds, and refusals per 15 seat writes — against the table above. - ⛔ No new gate; ⛔ no change to what any gate judges (W3/W4 are refactors with byte-identical verdicts, pinned by their self-tests); ⛔ no weakening of the stamp contract (W7 removes the hand-typing, not the refusal).
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 7, 2026
Triage grade under the maintainer's dispatch hold (「创建卡片,暂时不派发。」, quoted in the body):
domain:skills·priority:p3·trackingadded.pm:on-holdstays, and so does the body'sRestart-when:line (the maintainer or the director lifts the hold).Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-07T06:01Z. ⛔ Not a claim, ⛔ not a dispatch.tracking: this is a program anchor. Each of W1–W7 becomes its own card when work starts, and the anchor itself never enterspm:queue.search_issues, objectstack, over dispatch-gates NOT MEASURED, the section body patch, the guard-script split and the platform-readings diet). Every hit is closed, apart from this card.dispatch-gates.mjssplit). Each is filed as its ownneeds-user-decisioncard for the director, ⛔ not folded into a child's PR body.toolingcard. When it enterspm:queue, its first line carriesUnblocks: #Nor names the surface it guards.docs(pm-dispatch): a card that narrows a published accept set is Clau…
objectstack-fleet commentedon Oct 9, 2026
Maintainer ruling recorded — the 2026-10-07 dispatch hold on this program anchor is lifted. Provenance, three items: the maintainer (os-elon-musk); verbatim 「skills 车道所有卡都可以派发」 (read 2026-10-09T09:10Z), after 「你可以派发」 (read 2026-10-09T00:11Z); said in this seat's session chat (
session_01JmWtcHfGbC4ncw4GFKWuRA). They answer theRestart-when:line of this card. Skills seat 1 (seat post #7623), 2026-10-09T09:30Z.State:
pm:on-holdremoved in this act; the anchor itself never enterspm:queue(the triage grade 6032010144). What follows, in the order the grade asked: W1 (the platform-readings diet) is filed as the firsttoolingchild with its guarded surface on its first line and dispatched in the lane's next round; W2 (ceilings for the ceiling-0 references) and W3 (thedispatch-gates.mjsunfreeze-and-split under ruling 208 R6, which also carries #22167's remainder) are each filed as aneeds-user-decisioncard before any code is written; W4–W7 follow astoolingchildren, one per fire. Nothing is claimed here.objectstack-fleet commentedon Oct 9, 2026
Program progress after the hold lift — skills seat 1,
session_01JmWtcHfGbC4ncw4GFKWuRA, 2026-10-09T09:38Ztooling·domain:skills·priority:p3·pm:queue, guarded surface on its first line,Part of #22060) — the lane's next pick after this round's three in-flight cards.origin/mainda159f74e6the ratchet prints a non-zero ceiling for every reference file (node scripts/pm/check-skill-line-ratchet.mjs: 0 rows readceiling 0; the 13 ceiling-0 rows the filing counted are not there). No card; nothing to decide.dispatch-gates.mjsunfreeze-and-split): filed as the decision card [Decision] lift the ruling-208 freeze on scripts/pm/dispatch-gates.mjs for exactly the roster-as-data split (W3 of the skills-lane diet program; carries the Clause-② note remainder), or keep it frozen #22453 (needs-user-decision), options A / B / C with the four-facet block; [finding] dispatch-gates --tier's Clause-② note says a card that "changes contract accept/reject behaviour" owes a contract review and is spec-lane work; execution-duties.md's Clause-② is widening only, so a narrowing card has two answers #22167's remainder rides its letter.Checklist: W1 → #22452 (queued) · W2 → done (measured) · W3 → #22453 (decision box) · W4 · W5 · W6 · W7 (not yet filed).
objectstack-fleet commentedon Oct 10, 2026
W1 landed — PR #22684 merged as
80b2da2d50; three readings carried for the next dietSkills seat 1 ·
session_01RdnZdPZH9ByduzPRWuH9tN· 2026-10-10T14:16Z · card #22452 (ACCEPT6098117705, contract review6098113640).platform-readings.md469 → 460 lines, nine readings deleted whole, each pinned to a namedscripts/pmtool and self-test case (the table is in the PR body); the rule 「工具先行、文本其次」 stated once; theCEILINGSrow 460. Measured against the W1 text: the readings it expected to find in the file (relative ids, the stamp contract, the title cap, the ONE-OF guard, the four-step label write, the no-run UNCONFIRMED rule, the H rows) are not stated there at243dd3c62, so the diet is nine lines, not a section rewrite — the W1 row's wording over-estimated the file.scripts/pm/post-stamped.mjsheader citesplatform-readings.md:410/:411as the issue-footer fact cells; those readings sat at L414/L415 before W1 and sit at L406/L407 after — stale line pointers in a tool header's prose; no reader acts on them.platform-readings.mdL429 prescribesgit fetch --shallow-since=after a shallowcheck-governed-mergesrefusal, while the tool printsfetch --unshallowandgit-history.mjsrecords that--shallow-sincecan shorten history — a prose-vs-tool drift the next diet deletes or corrects.CROSS_FILE_MOVESentry carries 144 lines of ordinary ruled raises above itswasof 314, so any ceiling of 457 or lower redscrossFileMoveVerdictas an over-claim until aruledRaisesrecord is retired (measured with the exported function: 460 and 458 green, 457 and 440 red). A deeper diet's file surface must include that entry, not only theCEILINGSrow.6a3f82ef· W4–W7 unfiled.Generated by Claude Code