Skip to content

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

Open

Description

@objectstack-fleet

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.md that 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 and check-skill-line-ratchet gets 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.mjs unfreeze-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.mjs split. 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-gates holds 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 in dispatch-gates --ran so a fresh worktree reports "DERIVED, dist-dependent, CI measures" in one line instead of five paragraphs. Pin: a dev report's --ran reconciliation names the family and no prose.
  • W6 — a section-level body patch door. issue_patch (or a small body-section.mjs) replaces one ## heading section of an issue or PR body, refuses when the heading is absent or ambiguous, strips exactly the trailing newline --jq adds, and reads back the whole body. Prior art finding(fleet-write): an issue_patch body of about 41 KB comes back with two multi-byte characters replaced by U+FFFD, about 16 KB apart, identically on a re-send — and dispatch.mjs reports 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-run runs 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/pm lines, 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

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    on Oct 7, 2026
  2. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage grade under the maintainer's dispatch hold (「创建卡片,暂时不派发。」, quoted in the body): domain:skills · priority:p3 · tracking added. pm:on-hold stays, and so does the body's Restart-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 enters pm:queue.
    • Why p3: these are long-horizon cost items. No gate judges wrongly while they wait, and the card itself says ⛔ no change to any verdict.
    • Dedupe: the open board has no other card on these items (MCP 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.
    • For the restart:
      • W2 and W3 are decisions (ceilings from 0 for 13 files; lifting ruling 208's freeze for the dispatch-gates.mjs split). Each is filed as its own needs-user-decision card for the director, ⛔ not folded into a child's PR body.
      • Each child is a tooling card. When it enters pm:queue, its first line carries Unblocks: #N or names the surface it guards.
  3. added
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    trackingGenerated anchor/tracker issue — not dispatchable; exempt from the half-state sweep's findings
    on Oct 7, 2026
  4. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    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 the Restart-when: line of this card. Skills seat 1 (seat post #7623), 2026-10-09T09:30Z.

    State: pm:on-hold removed in this act; the anchor itself never enters pm:queue (the triage grade 6032010144). What follows, in the order the grade asked: W1 (the platform-readings diet) is filed as the first tooling child 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 (the dispatch-gates.mjs unfreeze-and-split under ruling 208 R6, which also carries #22167's remainder) are each filed as a needs-user-decision card before any code is written; W4–W7 follow as tooling children, one per fire. Nothing is claimed here.

  5. removed
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    on Oct 9, 2026
  6. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Program progress after the hold lift — skills seat 1, session_01JmWtcHfGbC4ncw4GFKWuRA, 2026-10-09T09:38Z

    Checklist: W1 → #22452 (queued) · W2 → done (measured) · W3 → #22453 (decision box) · W4 · W5 · W6 · W7 (not yet filed).

  7. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    W1 landed — PR #22684 merged as 80b2da2d50; three readings carried for the next diet

    Skills seat 1 · session_01RdnZdPZH9ByduzPRWuH9tN · 2026-10-10T14:16Z · card #22452 (ACCEPT 6098117705, contract review 6098113640).

    • W1 is done: platform-readings.md 469 → 460 lines, nine readings deleted whole, each pinned to a named scripts/pm tool and self-test case (the table is in the PR body); the rule 「工具先行、文本其次」 stated once; the CEILINGS row 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 at 243dd3c62, so the diet is nine lines, not a section rewrite — the W1 row's wording over-estimated the file.
    • Carried, not filed (no card; this anchor is the carrier):
      1. scripts/pm/post-stamped.mjs header cites platform-readings.md :410 / :411 as 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.
      2. platform-readings.md L429 prescribes git fetch --shallow-since= after a shallow check-governed-merges refusal, while the tool prints fetch --unshallow and git-history.mjs records that --shallow-since can shorten history — a prose-vs-tool drift the next diet deletes or corrects.
      3. Ratchet trap: the file's CROSS_FILE_MOVES entry carries 144 lines of ordinary ruled raises above its was of 314, so any ceiling of 457 or lower reds crossFileMoveVerdict as an over-claim until a ruledRaises record 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 the CEILINGS row.
    • Program state: W1 done · W2 measured done · W3 landed 6a3f82ef · W4–W7 unfiled.

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surfacetrackingGenerated anchor/tracker issue — not dispatchable; exempt from the half-state sweep's findings

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions