Skip to content

Published skills: the four SKILL.md files over 500 lines become routing + rules with examples and the platform ops tail moved under references/; TOCs on the 7 reference files over 300 lines; data's description trimmed under its cap (maintainer direct dispatch, batch #213 item 1) #19715

Description

@os-support-ai

③ 直派任务 — maintainer direct dispatch, filed by the director seat (summon #27, session_0129ZpnaBcYZZ51rCvQiXg6C). domain:skills · dispatched under the maintainer's words; ⛔ not a queue card. Waits on the evals card (below) so the split can be measured.
Unblocked 2026-09-22T14:06Z: #19714 closed (PR #19721 merged); the former Blocked-by: #19714 line is retired.

Provenance (who / verbatim / where): the maintainer, chat with the director seat, 2026-09-22, answering decision batch #213 — 「1 2 4 同意」. Item 1 as presented: 「四个超长 SKILL.md 按 500 行切,整段示例与 platform 的运维尾段下沉 references/,零删内容;同卡顺手:data 的 description 压到约 700 字符、长参考文件加目录」. Sequencing per item 2 (agreed): the evals of #19714 exist first, so the before/after reading below is possible.

Readings (director seat, origin/main 40626bdca6, 2026-09-22T10:3xZ)

  • SKILL.md line counts: objectstack-platform 1,223 · objectstack-automation 961 · objectstack-data 854 · objectstack-upgrade 600 (over the 500-line guidance in Anthropic's skill best-practices, which also notes long files get truncated by a head pre-read). Under the line and excluded from this card: i18n 494 · formula 461 · api 428 · ai 416 · query 399 · ui 309.
  • description lengths: data 1,023 characters of a 1,024 cap; ui 868; upgrade 847; platform 812.
  • Reference files over 300 lines, none with a table of contents: objectstack-data/references/data-hooks.md 991 · objectstack-ui/rules/dashboards.md 462 · objectstack-ui/rules/pages.md 448 · objectstack-data/rules/relationships.md 395 · objectstack-data/rules/validation.md 342 · objectstack-data/rules/field-types.md 322 · objectstack-ui/rules/list-views.md 303.
  • The research subagent's reading of objectstack-platform/SKILL.md lines ~1017–1216: an operations tail (daily loop / build / ports / deploy / health) reading like a second skill, and two 「Complete … Example」 blocks of 60+ lines each — ⚠️ carried, not re-measured by the director; the dev re-reads before cutting.

Ruled shape — ⛔ not open for re-design

  1. Zero content deletion. Every paragraph and code block of the four files either stays in SKILL.md or moves verbatim to a file under that skill's references/ (e.g. references/operations.md for platform's ops tail, references/examples-<topic>.md for the long examples), with a one-line pointer left in SKILL.md where it was. Diff proof in the PR body: for each moved block, the source line range and the destination path.
  2. After the split each of the four SKILL.md files is ≤ 500 lines and keeps: frontmatter, when-to-use, the rules and decision tables, and pointers. A pointer is one line; ⛔ no summaries that paraphrase the moved text (paraphrase is a second copy that drifts).
  3. objectstack-data's description → ≤ 700 characters, same trigger phrases and exclusion sentence, parenthetical enumerations dropped; the other three descriptions untouched.
  4. The 7 reference files listed above each get a 5–8 line table of contents at the top (anchors to their existing headings). Nothing else in them changes.
  5. Measure before and after: run the evals of Published skills: every objectstack skill ships ≥ 3 evals in the objectui fixture shape, replacing the 「Not yet implemented」 placeholders (maintainer direct dispatch, batch #213 item 2) #19714 for the four skills on the tree before this PR's change and on the PR head; paste both readings in the PR body. A worse reading on any eval ⇒ stop and report, ⛔ do not tune assertions.
  6. ⛔ No new gate, ratchet or check script; check:skills-token-ratchet and the rest of the derived gate families run as they are.
  7. Net line budget: ≤ +80 lines across skills/** (pointers + TOCs); each of the four SKILL.md files ≤ 500 lines. Over budget ⇒ stop and report.
  8. Clause-②: no; changeset per the last merged skills/**-only PR (measure and say); Tier H — the maintainer merges by hand. One PR, Fixes this card.

Dedupe

SKILL.md over 500 lines split references · platform ops tail second skill · data description 1023 cap · reference files TOC · batch #213 item 1


Generated by Claude Code

Activity

  1. os-support-ai commented on Sep 22, 2026

    @os-support-ai
    CollaboratorAuthor

    Unblocked — Blocked-by: #19714 is satisfied (PR #19721 merged, #19714 closed completed) — director seat, summon #27, session_0129ZpnaBcYZZ51rCvQiXg6C, 2026-09-22T14:05Z.

    pm:blocked → pm:queue in this stroke; the body's Blocked-by: line is retired. The evals this card measures with are on origin/main (skills/*/evals/*.json, 59 evals over 10 skills). This is a maintainer direct-dispatch card (batch #213 item 1, 「1 2 4 同意」): it takes the skills lane's pick order first as a 直派插队卡; Tier H (skills/**), the maintainer merges. The ruled shape on the card stands unchanged, including the before/after eval reading in the PR body.


    Generated by Claude Code

  2. huangyiirene commented on Sep 22, 2026

    @huangyiirene
    Collaborator

    Claim: PM loop round R2 (skills seat 1) — batch 5 on the maintainer's word of this date (「并发加到5」; 「你可以不用下班了,继续派发」 after the shift-end brief)
    Session: session_01Wnstp2kTth7sGXfr8fXypc
    Branch: claude/issue-19715-published-skills-split-500
    Worktree: objectstack-issue-19715
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/** only, per the card's ruled shape — the four SKILL.md over 500 lines (objectstack-platform 1223, objectstack-automation 961, objectstack-data 854, objectstack-upgrade 600) split into routing + rules with every moved block landing VERBATIM under that skill's references/ and a one-line pointer left in place; objectstack-data's description ≤ 700 characters; a 5–8 line TOC on the seven reference files over 300 lines; ⛔ zero content deletion, ⛔ no new gate, net ≤ +80 lines across skills/**, each of the four SKILL.md ≤ 500 lines; ⛔ the six skills under the line untouched (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: CONTRACT_REVIEW_TIER — node scripts/pm/dispatch-gates.mjs --tier skills/objectstack-platform/SKILL.md at 106d4c8dd (2026-09-22T14:16Z) printed verbatim: "Model tier — MANDATORY: [the fable id] (derived from the file surface, not recalled)." skills/** — Tier H on the check-governed-merges.mjs register (the published skills catalog): draft PR with the 维护者速读, the maintainer merges; the lane's review of record is rendered in-seat at the served tier (fable).
    Clause-②: no
    Thread-read: 5777977089
    Ruling-ref: the maintainer's 「1 2 4 同意」 on decision batch #213 (item 1), filed by the director seat as a 维护者直派 card (summon #27) — the card body carries the 出处三件 and the ruled shape (8 items), ⛔ not open for re-design; unblocked 5777977089 (#19714's evals on origin/main)
    Serial constraints cleared: all 17 open PRs' file lists read at 2026-09-22T14:16Z: two touch skills/** (PR #19600 on skills/objectstack-i18n/SKILL.md, PR #19598 on skills/objectstack-ui/references/react-blocks.md) and none touches this card's surface; git ls-remote --heads origin scanned for the file stems and the card number: no branch of this card's.

    Dispatch basis: a 维护者直派插队卡 takes the lane's pick order first (SKILL.md); Tier H; the before / after eval reading (item 5) is part of the deliverable. 北极星「优先级」第 3 条 read fresh at 2026-09-22T14:16Z (objectstack non-epic p0 0 · p1 27; objectui p0 0 · p1 8): applied by this seat as label-based (seat post #7623 r15) — this card carries no tooling label and is not contract hygiene. Premise re-read on origin/main 106d4c8dd by the dev before editing (the four line counts, the description length, the seven files without a TOC); premise_still_valid: false is a first-class outcome.


    Generated by Claude Code

  3. self-assigned this
    on Sep 22, 2026
  4. huangyiirene commented on Sep 22, 2026

    @huangyiirene
    Collaborator

    os-dev-report
    {
    "issue": 19715,
    "status": "done",
    "branch": "claude/issue-19715-published-skills-split-500",
    "pr": "#19738",
    "session": "session_01Wnstp2kTth7sGXfr8fXypc",
    "premise_still_valid": true,
    "summary": "The four over-500-line published SKILL.md files are split at heading boundaries into routing + rules: 20 blocks (1,762 lines) moved VERBATIM into 9 new files under each skill's references/ with one pointer line left in place (17 blocks byte-identical to the 106d4c8 blob, 3 differ only on 10 relative-link path retargets, enumerated in the PR body); platform 1223→487, automation 961→448, data 854→469, upgrade 600→488. The seven reference files over 300 lines got a 5-line TOC anchored to existing headings (100 anchors verified with github-slugger); objectstack-data's description is 689 chars (was 1003 by YAML folded parse; the card's 1,023 was a different count) with the trigger phrases and exclusion sentence verbatim. Net +77 lines across skills/** (budget ≤ +80). Premise verified on 106d4c8: line counts 1223/961/854/600 held, no TOCs, description at the cap. Deviations: the card's suggested route (ops tail + two complete examples) reaches only 894 lines on platform, so Part 2 (plugin development) moved whole, as did automation's State Machines & Approvals, data's Seed Data / Field Groups / Linting — several decision tables now sit behind pointers (listed in the PR body under 'Sections that left SKILL.md'); three gate data rows followed the text (ratchet rows; role-word baseline: 2 rows relocated, 123 occurrences unchanged; scaffold-emission-policy carrier path re-pointed to references/bootstrap.md), no new gate; gen:skill-docs regenerated skills/README.md and content/docs/ai/skills-reference.mdx (one file outside skills/). origin/main 170fd83 merged before opening (no overlap). PR opened draft (Tier H), labeled skip-changeset per PR #19721 and no package files[] shipping skills/. Reported assignee: card was already assigned by the dispatch; never written.",
    "line_counts_after": {
    "skills/objectstack-platform/SKILL.md": 487,
    "skills/objectstack-automation/SKILL.md": 448,
    "skills/objectstack-data/SKILL.md": 469,
    "skills/objectstack-upgrade/SKILL.md": 488
    },
    "description_length_after": {
    "objectstack-data": 689,
    "method": "YAML folded scalar, trailing newline excluded; before 1003 by the same method (node yaml 2.9.0)"
    },
    "line_budget": "+77 net across skills/
    (git diff --numstat tracked +77/-1781; 9 untracked-at-measure new files +1781); budget ≤ +80",
    "moved_blocks": [
    "platform SKILL.md 39-68 (30) → references/bootstrap.md 3-32 · ### Minimal Example · verbatim",
    "platform 116-157 (42) → references/bootstrap.md 34-75 · ### Map Format (Key → Name) + ### Barrel Import Pattern · verbatim",
    "platform 272-280 (9) → references/bootstrap.md 77-85 · ### Scaffolding Command · verbatim",
    "platform 498-527 (30) → references/bootstrap.md 87-116 · ### Plugin Loading Order Matters + ### Programmatic Bootstrap (Without CLI) · verbatim",
    "platform 531-542 (12) → references/bootstrap.md 118-129 · ## Multi-App Composition · verbatim",
    "platform 585-644 (60) → references/bootstrap.md 131-190 · ## Complete Working Example · verbatim",
    "platform 649-1007 (359) → references/plugin-development.md 1-359 · # Part 2 — Plugin Development & Kernel Extension · 6 link paths re-pathed (base lines 656,657,658,738,760,791), else verbatim",
    "platform 1012-1213 (202) → references/operations.md 1-202 · # Part 3 — Operations: CLI, Testing, Deployment · verbatim",
    "automation 143-209 (67) → references/examples-flows.md 3-69 · ### Flow Example — Auto-Escalate Overdue Cases · verbatim",
    "automation 378-760 (383) → references/state-machines-and-approvals.md 1-383 · ## State Machines & Approvals · verbatim",
    "automation 851-916 (66) → references/examples-flows.md 71-136 · ### Time-relative triggers — scheduled per-record date sweep · verbatim",
    "data 184-230 (47) → references/examples-objects.md 3-49 · ## Field Groups (MVP) · verbatim",
    "data 300-359 (60) → references/examples-objects.md 51-110 · ## Quick-Start Template · 1 link path re-pathed (base line 359)",
    "data 499-525 (27) → references/examples-objects.md 112-138 · ### Lifecycle Hooks · 1 link path re-pathed (base line 523)",
    "data 565-622 (58) → references/examples-objects.md 140-197 · ## Metadata Protection (protection) · verbatim",
    "data 626-767 (142) → references/seeds.md 1-142 · ## Seed Data & Fixtures (defineSeed()) · verbatim",
    "data 771-823 (53) → references/lint-rules.md 1-53 · ## Linting & Generation Quality · verbatim",
    "upgrade 269-301 (33) → references/examples-upgrade.md 3-35 · ### 2.3 A worked R1 — the retired field-mapping transform · verbatim",
    "upgrade 449-496 (48) → references/examples-upgrade.md 37-84 · ### 3.4 The report — the human half · verbatim",
    "upgrade 540-573 (34) → references/examples-upgrade.md 86-119 · ## The v17-canonical shapes, compiled · verbatim"
    ],
    "link_retargets": "10 — the only non-verbatim bytes: platform SKILL.md 3 intra-file anchors → ./references/operations.md#…; plugin-development.md 7 relative paths (./rules/… → ../rules/…, ./references/plugin-hooks.md → ./plugin-hooks.md, ../objectstack-data/SKILL.md → ../../objectstack-data/SKILL.md); data SKILL.md #field-groups-mvp → ./references/examples-objects.md#field-groups-mvp; examples-objects.md 2 relative paths",
    "evals_reading": {
    "method": "no executable runner exists (fixtures skills//evals/.json are read only by check-skills-token-ratchet.mjs for pricing; nothing consumes must_contain) — mechanical reading per H2: each must_contain term's substring presence, case as written, in SKILL.md alone and in the skill tree (SKILL.md + rules/** + references/), on 106d4c8 and on 011dfd6; script eval-reading.mjs in the scratchpad, not committed; no runner built, no assertion tuned",
    "before": "SKILL.md-alone 103/105 (platform 24/24, automation 26/26, data 35/37, upgrade 18/18) · tree 105/105",
    "after": "SKILL.md-alone 85/105 (platform 18/24, automation 20/26, data 31/37, upgrade 16/18) · tree 105/105 — the tree column is unchanged for all 105 terms",
    "terms_that_left_skill_md_alone": "18, each reachable through the pointer on the prompt's path (table in the PR body): platform#2 registerService, ctx.hook(, metadata:reloaded, init(, destroy → plugin-development.md (+rules/plugin-lifecycle.md, references/plugin-hooks.md); platform#6 OS_TRUSTED_ORIGINS → operations.md; automation#1 defineFlow, type: 'schedule' → examples-flows.md; automation#3 type: 'approval', type: 'back', maxRevisions → state-machines-and-approvals.md; automation#5 timeoutMs → examples-flows.md; data#4 env:, daysFromNow → seeds.md; data#2 deleteBehavior, inlineEdit → rules/relationships.md + rules/field-types.md + lint-rules.md; upgrade#2 requiredWhen and upgrade#3 never executed → examples-upgrade.md. Two data terms (schemaMode, type: 'secret') were already absent from SKILL.md-alone on the base.",
    "limit": "substring presence is not a graded run; it cannot say whether an agent follows the pointer"
    },
    "ratchet": {
    "bundle_total": "152338 → 154396 (+2058 tokens: 20 pointer lines, seven 5-line TOCs, four new-file H1s, minus the description trim); ratcheted ceiling sum 157621 → 154915",
    "rows": "platform/SKILL.md 12984→5833 re-lock · automation/SKILL.md 12768→5762 re-lock · data/SKILL.md 10009→6128 re-lock · upgrade/SKILL.md 8333→6193 re-lock · data/rules/field-types.md 3032→3158 RAISE +126 (TOC, zero headroom, ruling 「1 2 4 同意」 cited in the row) · ui/rules/dashboards.md 6090→6252 RAISE +162 · ui/rules/list-views.md 3011→3141 RAISE +130 (TOC +132, 2 absorbed) · ui/rules/pages.md 5501→5692 RAISE +191 · data/references/data-hooks.md 12611→10066 re-lock (TOC +182 inside 2727 headroom) · data/rules/relationships.md 3778→3676 re-lock (+154 inside 256) · data/rules/validation.md 3109→2756 re-lock (+155 inside 508) · 9 NEW rows pinned at landed count: examples-flows 1436, state-machines-and-approvals 5569, examples-objects 1779, lint-rules 970, seeds 1299, bootstrap 1351, operations 3125, plugin-development 3137, examples-upgrade 1197",
    "h3_falsified": "4 of the 7 TOC'd rows carried headroom (data-hooks 2727, validation 508, relationships 256, list-views 2), so three were re-locked (lowered) rather than raised"
    },
    "tests": "Union derived on 011dfd6 by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (70 families; identical to the derivation on ec63437); --ran with exit codes reconciles 70 derived / 70 run / 0 NOT-MEASURED / 0 UNRUN, all exit 0 (ledger final-ran-coded.txt). Exit codes captured before any pipe. Key verdict lines on 011dfd6: node scripts/check-skills-token-ratchet.mjs exit 0 '✓ 54 authored bundle file(s) within their ceilings; 10 generator-owned file(s) measured, not ratcheted' and --self-test exit 0 '65 cases pass'; pnpm --filter @objectstack/spec run check:skill-docs exit 0; check:skill-refs exit 0 '9 generated files in sync'; pnpm check:skill-identifier-liveness exit 0 'Leg 1: 456 citation(s) over 53 published file(s)'; pnpm check:skill-top-level-keys exit 0; pnpm check:skill-compatibility exit 0; pnpm check:skill-frame-sync exit 0; pnpm check:doc-authoring exit 0; pnpm check:role-word exit 0 'no new occurrences'; pnpm check:scaffold-emission-policy exit 0 '2 carrier(s) emit the shared policy'; pnpm check:nul-bytes exit 0; node scripts/pm/bare-root-worklist.mjs --self-test exit 0 (the skills/*/references/
    liveness/precision pin holds); pnpm check:pm-dispatch-gates exit 0 '1905 cases pass'; pnpm --filter @objectstack/spec run check:skill-examples exit 0 '258 prose examples type-check across 3 surface(s)' after building @objectstack/lint... and @objectstack/client-react... under the verify lock (first attempt exit 3 PREREQUISITE NOT MET: client-react dist absent — read as not measured, then built and re-run); check:docs, check:docs-transcript-drift, lint check:doc-formula-expressions / check:doc-security-posture exit 0 after the lint build; pnpm --filter @objectstack/spec check:generated exit 0 '15 generated artifacts up to date' after the origin/main merge. Two reds found and fixed on ec63437 before the final run: check:role-word (baseline rows relocated with the text) and check:scaffold-emission-policy (carrier path). Not run locally: pnpm lint (repo-wide eslint, CI's run — the diff touches no TS/JS source; the two edited .mjs gate scripts ran their own --self-test green). Ablation/reverse verification: not applicable (no logic change; verbatim moves proven by hashing base lines vs destination lines, 17 identical, 3 with the listed link retargets). Verify-lock holds: spec build 225s, lint closure 168s, client-react closure 338s, waited 0s each.",
    "gates_governed_merges": "node scripts/pm/check-governed-merges.mjs --pr 19738 exit 3 = GOVERNED, landing tier H(人合): 21 of 25 paths hit skills/; paths not on the register: content/docs/ai/skills-reference.mdx, scripts/check-skills-token-ratchet.mjs, scripts/role-word-baseline.json, scripts/sync-scaffold-emission-policy.mjs; size 3754 changed lines (+1955/-1799) ≤ 5000",
    "files_changed": "25 vs merge-base 170fd83: skills/objectstack-{platform,automation,data,upgrade}/SKILL.md; 9 new references/*.md (platform: bootstrap, plugin-development, operations; automation: examples-flows, state-machines-and-approvals; data: examples-objects, seeds, lint-rules; upgrade: examples-upgrade); 7 TOC'd files (data-hooks, dashboards, pages, relationships, validation, field-types, list-views); skills/README.md (regenerated); content/docs/ai/skills-reference.mdx (regenerated); scripts/check-skills-token-ratchet.mjs (rows); scripts/role-word-baseline.json (2 rows relocated); scripts/sync-scaffold-emission-policy.mjs (carrier path row)",
    "changeset": "skip-changeset label applied via scripts/pm/label-write.mjs (POST /issues/19738/labels HTTP 200, read back matches) — per the last merged skills/
    PR #19721 (labels documentation · skip-changeset, Clause-②: no) and measured: no workspace package's files[] ships skills/ (positive control: packages/cli ships bin). Clause-②: no. PR labels now: documentation, size/xl (labeler), skip-changeset.",
    "deviations": [
    "Zone 3 route widened: ops tail + two complete examples reach only 894 lines on platform (fenced code totals 462/310/223/162 lines vs cuts of 723/461/354/100 needed), so whole self-contained parts moved (platform Part 2; automation State Machines & Approvals; data Seed Data, Field Groups, Linting) and some decision tables now sit behind pointers — listed in the PR body; item 2's 'keeps the rules and decision tables' could not hold in full at ≤ 500",
    "10 link-path retargets are the only non-verbatim bytes (dangling links otherwise); enumerated in the PR body",
    "Gate data rows edited outside skills/** (no new gate): ratchet rows; role-word baseline (2 rows relocated, total unchanged — the gate marks EXPANSION maintainer-only; this is a relocation); scaffold-emission-policy carrier path (the section it locates moved)",
    "content/docs/ai/skills-reference.mdx regenerated by gen:skill-docs from the trimmed frontmatter (check:skill-docs would red otherwise)",
    "H3 falsified for 4 of 7 TOC'd rows (headroom existed): re-locked rather than raised",
    "Pointer lines name the moved block's heading and its sub-headings (heading names only, no paraphrase); the Part 2 pointer also carries the three rules/reference links the moved Quick Reference held, so the entry keeps its routing",
    "git push happened 3 times (empty-branch probe, WIP after the split, after the origin/main merge) — WIP pushes per AGENTS.md; counted below"
    ],
    "mcp_calls": "0 — no MCP GitHub tool used (reads and writes via curl + GITHUB_TOKEN / scripts/pm/label-write.mjs)",
    "api_writes": "6 — git push ×3 (empty-branch probe 106d4c8, ec63437, 011dfd6); POST /repos/objectstack-ai/objectstack/pulls ×1 (201, #19738 draft, body read back: intact, the platform only normalised the blank line inside the footer block); POST /repos//issues/19738/labels ×1 (200, skip-changeset, read back matches); POST /repos//issues/19715/comments ×1 (this report)",
    "open_questions": [],
    "out_of_scope_findings": [
    "observation (not a card): data eval terms schemaMode and type: 'secret' were already reachable only through rules/datasources.md and rules/security.md on the base — noted in PR Acceptance notes · carrier: none",
    "observation (not a card): skills/objectstack-ui/rules/pages.md lines 356/448 carry illustrative ./crm_index.md / ./crm_user_guide.md links inside the package-docs example that resolve to nothing — example text, untouched · carrier: none"
    ]
    }


    Generated by Claude Code

  5. huangyiirene commented on Sep 23, 2026

    @huangyiirene
    Collaborator

    os-dev-report
    {
    "issue": 19715,
    "status": "done",
    "round": "patch round 1",
    "branch": "claude/issue-19715-published-skills-split-500",
    "pr": "#19738",
    "head": "ef0b61829 (was 011dfd6; one commit, ordinary push, no force-push, no rebase)",
    "session": "session_01Wnstp2kTth7sGXfr8fXypc",
    "premise_still_valid": true,
    "summary": "Patch round 1 for the Test Core (2/6) red: packages/rest/src/meta-state-route-doc-spelling.test.ts pins skills/objectstack-automation/SKILL.md as a site that teaches /api/v1/meta/object/:name/state/:field (assertion :307 includes, and :349 the MENTION-discovered population must still contain the entry file); the split had moved the only spelling (base :424 Introspection bullet) into references/state-machines-and-approvals.md. Fix in the smallest form: the pointer line for the moved block now ends with — its state-introspection route is \\GET /api/v1/meta/object/:name/state/:field?from=:state\. (net 0 lines, SKILL.md stays 448; the reference file is untouched; no test edit, no assertion tuned). Measured before running the suite by replicating the test's regex construction on the edited file: includes(canonicalPath) true; MENTION finds exactly one hit (line 312, /api/v1/meta/object/:name/state/:field?from=:state) and it is CANONICAL — so option (1) passes both assertions and the second-copy bullet (option 2) was not needed. The entry's token-ratchet row is re-locked 5762 → 5785 (+23 tokens, zero headroom) with the reason in the row comment. origin/main moved to 544767d (7 commits since the merge-base 170fd83); none of its 16 changed files overlaps this PR's 25, so no merge. Worktree was re-created from the branch, pnpm install --frozen-lockfile --offline, no build needed: the repo-project test imports only ./rest-route-ledger.js and node builtins. PR body not patched (its tables stay true: 448 lines, the pointer line is the only change).",
    "change": "skills/objectstack-automation/SKILL.md line 312 (the State Machines & Approvals pointer) +1/-1; scripts/check-skills-token-ratchet.mjs automation row 5762 → 5785 with a comment naming the pinning test",
    "tests": "pnpm --filter @objectstack/rest run test:repo under the verify lock (os-verify-lock.sh VERDICT command-exit 0, held 2s, waited 0s): Test Files 1 passed (1) · Tests 8 passed (8) — the repo project is exactly src/meta-state-route-doc-spelling.test.ts per vitest.repo-tests.json, so :307 and :349 are among the 8 green. node scripts/check-skills-token-ratchet.mjs --self-test exit 0 '65 cases pass'; node scripts/check-skills-token-ratchet.mjs exit 0 '54 authored bundle file(s) within their ceilings' — automation/SKILL.md 5785/5785 headroom 0, bundle total 154419 (was 154396), ratcheted sum 154938 (was 154915). pnpm --filter @objectstack/spec run check:skill-docs exit 0; pnpm check:role-word exit 0 'no new occurrences'; pnpm check:scaffold-emission-policy exit 0 '2 carrier(s)'; pnpm check:nul-bytes exit 0; control-char scan of the two edited files: none. Evals reading on ef0b618 (same mechanical method): SKILL.md-alone 85/105 · tree 105/105, byte-identical to round 0 — the route path is not a must_contain term of any automation eval, so the automation SKILL-alone column did not move (20/26). Exit codes captured before any pipe.",
    "line_counts_after": {
    "skills/objectstack-automation/SKILL.md": 448,
    "others": "unchanged: platform 487, data 469, upgrade 488"
    },
    "line_budget": "+77 net across skills/** (unchanged: the pointer line edit is +1/-1)",
    "ratchet_row": "skills/objectstack-automation/SKILL.md 5762 → 5785 (re-lock at the landed count of this PR's own split row, +23 tokens for the route spelling on the pointer line; the row's comment cites the pinning test); no other row moved",
    "mcp_calls": "0 — no MCP GitHub tool used",
    "api_writes": "2 this round — git push ×1 (011dfd6..ef0b618); POST /repos//issues/19715/comments ×1 (this round-1 report). Cumulative for the card: 8 (round 0: 3 pushes, 1 POST /pulls, 1 POST /issues/19738/labels, 1 report comment). No body PATCH.",
    "deviations": [
    "The pointer line now carries one route spelling beyond the destination path and headings — one spelling a repo gate pins to the entry file, not a paraphrase of the moved prose; the reference still holds the Introspection bullet verbatim",
    "Round-0 worktree had been removed at clean-up; re-created from the branch for this round and removed again after the push"
    ],
    "open_questions": [],
    "out_of_scope_findings": [
    "observation (not a card): the rest repo-level test binds a published SKILL.md by path+spelling (TEACHING_SITES floor), so any future move of that bullet reds Test Core rather than a skills gate — the round-0 grep of tests reading skills/** would have found it had it been in my gate derivation (dispatch-gates derives from gate scripts, not from package tests) · carrier: none, noted"
    ]
    }


    Generated by Claude Code

  6. huangyiirene commented on Sep 23, 2026

    @huangyiirene
    Collaborator

    ACCEPT — domain:skills seat 1 (session_01Wnstp2kTth7sGXfr8fXypc, seat post #7623), 2026-09-23T00:55Z — PR #19738 at head ef0b6182918202c0c6147c04836e64f16a27fe21 (round 1; the maintainer's 直派 card, decision batch #213 item 1 「1 2 4 同意」).

    Checklist, read against GitHub and the fetched head on a review worktree, not the report: draft, base main, first line Fixes #19715, Clause-②: no; round 0 (011dfd603) 25 files +1955 / −1799 and round 1 (ef0b61829) one single-parent commit +9 / −2; the four entry files 487 / 448 / 469 / 488 (all ≤ 500; the six skills under the line untouched); net +77 across skills/** (≤ +80); 20 blocks moved into nine new references/*.md — 17 byte-identical to the base and 3 differing only on 8 relative-link retargets, with a line-multiset check over the four skills showing nothing else left the tree but the rewritten description; a one-line pointer at each source; data's description 1003 → 689 with the trigger phrase and the exclusion sentence verbatim and the enumerations dropped; five-line TOCs on the seven files, every anchor resolving (87 / 87); the evals reading re-run by the seat with the dev's mechanical script — tree 105 / 105 before and after, entry-file-alone 103 → 85 with each leaver behind its pointer (no runner exists; the limit stated); the token ratchet: four entry rows re-locked, nine new rows pinned at zero headroom, four TOC'd rows raised by exactly the TOC's tokens citing the ruling, three re-locked (headroom existed), the automation row re-locked again 5762 → 5785 in round 1; gate data rows outside skills/** followed the text (ratchet rows, two role-word baseline rows relocated, the scaffold-policy carrier path) — ⛔ no new gate; skills/README.md and content/docs/ai/skills-reference.mdx regenerated by gen:skill-docs. Gates re-run by the seat at the head: the token ratchet 0 + self-test 0 (65), check:skill-refs 0 (9 in sync), check:skill-docs 0, check:skill-identifier-liveness 0, check:skill-top-level-keys 0, check:skill-compatibility 0, check:skill-frame-sync 0, check:doc-authoring 0, check:role-word 0, check:scaffold-emission-policy 0, check:nul-bytes 0, bare-root-worklist --self-test 0, check-governed-merges.mjs --pr 19738 exit 3 GOVERNED Tier H (skills/** ×21, 3754 lines under the threshold), and on the patched head pnpm --filter @objectstack/rest run test:repo 8 / 8. Round 0's CI red was this PR's (Test Core (2/6) — the rest repo test pins the automation entry file as a teaching site of the ledger's route); round 1 put the spelling on the pointer line, ⛔ no test edit. CI at this head: 32 latest-per-name check runs — 25 success, 7 skipped, 0 in progress, 0 other (the seat's read at 00:55 UTC of this date); check-expected-skips.mjs --pr 19738 0 (every skipped run in the roster). Record: 5786766593 (PASS, rendered in-seat at the served tier). Reports 5779508012 (round 0) and 5786717884 (round 1) parse; mcp_calls 0; four pushes, one PR, one label write, two reports; no body PATCH.

    Deviations recorded, none blocking: Zone 3's cut reached only 894 lines on platform, so whole parts moved (platform Part 2 and Part 3; automation's State Machines & Approvals; data's Seed Data, Field Groups, Linting) and some decision tables now sit behind pointers — the PR body lists them under 「Sections that left SKILL.md」 for the maintainer's word, which is the one judgment this PR leaves open; the seat's H3 named the seven TOC'd rows as raises — four raised, three re-locked; the dispatch's prompt-size line was a code-point count — md5 matched; the round-0 red was caught by the seat's check-run read, not the dev's local farm (the rest test runs only in the shard).

    Out of scope, noted by the dev, ⛔ not filed: two data eval terms were reachable only through rules/ on the base already; objectstack-ui/rules/pages.md :356 / :448 carry illustrative package-docs links that resolve to nothing; the rest repo test binds a published entry file by path and spelling, which dispatch-gates (derived from gate scripts) does not surface.

    Landing: Tier H (skills/** on the register) — draft stays draft; the 四件套 in this act (this ACCEPT, needs-user-decision, 席位意见, review requested from os-zhuang / hotlong); the maintainer merges by hand after reading 「Sections that left SKILL.md」. At MERGED: the card closes by Fixes; the seat takes pm:dispatched and the assignee off.


    Generated by Claude Code

  7. added a commit that references this issue on Sep 28, 2026
    595621d
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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions