Repository navigation
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
Activity
- addedpriority:p1High: required for production / M2High: required for production / M2
on Sep 22, 2026 os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsUnblocked —
Blocked-by: #19714is satisfied (PR #19721 merged, #19714 closedcompleted) — director seat, summon #27,session_0129ZpnaBcYZZ51rCvQiXg6C, 2026-09-22T14:05Z.pm:blocked→pm:queuein this stroke; the body'sBlocked-by:line is retired. The evals this card measures with are onorigin/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
huangyiirene commented
on Sep 22, 2026 CollaboratorMore actionsClaim: PM loop round R2 (skills seat 1) —
batch5 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 fourSKILL.mdover 500 lines (objectstack-platform1223,objectstack-automation961,objectstack-data854,objectstack-upgrade600) split into routing + rules with every moved block landing VERBATIM under that skill'sreferences/and a one-line pointer left in place;objectstack-data'sdescription≤ 700 characters; a 5–8 line TOC on the seven reference files over 300 lines; ⛔ zero content deletion, ⛔ no new gate, net ≤ +80 lines acrossskills/**, each of the fourSKILL.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.mdat106d4c8dd(2026-09-22T14:16Z) printed verbatim: "Model tier — MANDATORY: [the fable id] (derived from the file surface, not recalled)."skills/**— Tier H on thecheck-governed-merges.mjsregister (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 onorigin/main)
Serial constraints cleared: all 17 open PRs' file lists read at 2026-09-22T14:16Z: two touchskills/**(PR #19600 onskills/objectstack-i18n/SKILL.md, PR #19598 onskills/objectstack-ui/references/react-blocks.md) and none touches this card's surface;git ls-remote --heads originscanned 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
toolinglabel and is not contract hygiene. Premise re-read onorigin/main106d4c8ddby the dev before editing (the four line counts, the description length, the seven files without a TOC);premise_still_valid: falseis a first-class outcome.
Generated by Claude Code
huangyiirene commented
on Sep 22, 2026 CollaboratorMore actionsos-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 bynode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands(70 families; identical to the derivation on ec63437);--ranwith 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.mjsexit 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-docsexit 0;check:skill-refsexit 0 '9 generated files in sync';pnpm check:skill-identifier-livenessexit 0 'Leg 1: 456 citation(s) over 53 published file(s)';pnpm check:skill-top-level-keysexit 0;pnpm check:skill-compatibilityexit 0;pnpm check:skill-frame-syncexit 0;pnpm check:doc-authoringexit 0;pnpm check:role-wordexit 0 'no new occurrences';pnpm check:scaffold-emission-policyexit 0 '2 carrier(s) emit the shared policy';pnpm check:nul-bytesexit 0;node scripts/pm/bare-root-worklist.mjs --self-testexit 0 (the skills/*/references/ liveness/precision pin holds);pnpm check:pm-dispatch-gatesexit 0 '1905 cases pass';pnpm --filter @objectstack/spec run check:skill-examplesexit 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, lintcheck:doc-formula-expressions/check:doc-security-postureexit 0 after the lint build;pnpm --filter @objectstack/spec check:generatedexit 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 19738exit 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
huangyiirene commented
on Sep 23, 2026 CollaboratorMore actionsos-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 theTest Core (2/6)red:packages/rest/src/meta-state-route-doc-spelling.test.tspinsskills/objectstack-automation/SKILL.mdas a site that teaches/api/v1/meta/object/:name/state/:field(assertion :307includes, and :349 the MENTION-discovered population must still contain the entry file); the split had moved the only spelling (base :424 Introspection bullet) intoreferences/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.jsand 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:repounder the verify lock (os-verify-lock.shVERDICT command-exit 0, held 2s, waited 0s): Test Files 1 passed (1) · Tests 8 passed (8) — the repo project is exactlysrc/meta-state-route-doc-spelling.test.tsper vitest.repo-tests.json, so :307 and :349 are among the 8 green.node scripts/check-skills-token-ratchet.mjs --self-testexit 0 '65 cases pass';node scripts/check-skills-token-ratchet.mjsexit 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-docsexit 0;pnpm check:role-wordexit 0 'no new occurrences';pnpm check:scaffold-emission-policyexit 0 '2 carrier(s)';pnpm check:nul-bytesexit 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 redsTest Corerather 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
huangyiirene commented
on Sep 23, 2026 CollaboratorMore actionsACCEPT —
domain:skillsseat 1 (session_01Wnstp2kTth7sGXfr8fXypc, seat post #7623), 2026-09-23T00:55Z — PR #19738 at headef0b6182918202c0c6147c04836e64f16a27fe21(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 lineFixes #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 acrossskills/**(≤ +80); 20 blocks moved into nine newreferences/*.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 rewrittendescription; a one-line pointer at each source; data'sdescription1003 → 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 outsideskills/**followed the text (ratchet rows, tworole-wordbaseline rows relocated, the scaffold-policy carrier path) — ⛔ no new gate;skills/README.mdandcontent/docs/ai/skills-reference.mdxregenerated bygen:skill-docs. Gates re-run by the seat at the head: the token ratchet 0 + self-test 0 (65),check:skill-refs0 (9 in sync),check:skill-docs0,check:skill-identifier-liveness0,check:skill-top-level-keys0,check:skill-compatibility0,check:skill-frame-sync0,check:doc-authoring0,check:role-word0,check:scaffold-emission-policy0,check:nul-bytes0,bare-root-worklist --self-test0,check-governed-merges.mjs --pr 19738exit 3 GOVERNED Tier H (skills/** ×21, 3754 lines under the threshold), and on the patched headpnpm --filter @objectstack/rest run test:repo8 / 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 197380 (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_calls0; 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, whichdispatch-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 byFixes; the seat takespm:dispatchedand the assignee off.
Generated by Claude Code
- added a commit that references this issue
on Sep 28, 2026
③ 直派任务 — 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: #19714line 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/main40626bdca6, 2026-09-22T10:3xZ)SKILL.mdline counts:objectstack-platform1,223 ·objectstack-automation961 ·objectstack-data854 ·objectstack-upgrade600 (over the 500-line guidance in Anthropic's skill best-practices, which also notes long files get truncated by aheadpre-read). Under the line and excluded from this card: i18n 494 · formula 461 · api 428 · ai 416 · query 399 · ui 309.descriptionlengths: data 1,023 characters of a 1,024 cap; ui 868; upgrade 847; platform 812.objectstack-data/references/data-hooks.md991 ·objectstack-ui/rules/dashboards.md462 ·objectstack-ui/rules/pages.md448 ·objectstack-data/rules/relationships.md395 ·objectstack-data/rules/validation.md342 ·objectstack-data/rules/field-types.md322 ·objectstack-ui/rules/list-views.md303.objectstack-platform/SKILL.mdlines ~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 —Ruled shape — ⛔ not open for re-design
SKILL.mdor moves verbatim to a file under that skill'sreferences/(e.g.references/operations.mdfor platform's ops tail,references/examples-<topic>.mdfor the long examples), with a one-line pointer left inSKILL.mdwhere it was. Diff proof in the PR body: for each moved block, the source line range and the destination path.SKILL.mdfiles 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).objectstack-data'sdescription→ ≤ 700 characters, same trigger phrases and exclusion sentence, parenthetical enumerations dropped; the other three descriptions untouched.check:skills-token-ratchetand the rest of the derived gate families run as they are.skills/**(pointers + TOCs); each of the fourSKILL.mdfiles ≤ 500 lines. Over budget ⇒ stop and report.Clause-②: no; changeset per the last mergedskills/**-only PR (measure and say); Tier H — the maintainer merges by hand. One PR,Fixesthis card.Dedupe
SKILL.md over 500 lines split references·platform ops tail second skill·data description 1023 cap·reference files TOC·batch #213 item 1Generated by Claude Code