Skip to content

Skills optimization flight — skills/objectstack-platform: RESTRUCTURE (≈ −5,970 tok, −25%) — an orphan rules file with zero inbound links, the canonical hooks reference two hops from the entry file, "When to Use" printed twice, and requires: / engines.protocol / onEnable (every real config) taught nowhere #14299

Description

@os-litant

Member card of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectstack origin/main a59f78d; 50 findings PLAT-A … PLAT-I. The full findings table is the audit record: the dev posts it verbatim as the first comment on this card at claim time (seat scratchpad audit/objectstack-platform/findings.md).

Audit summary

8 files / 2,656 lines / 24,278 tokens (12.9% of the bundle, 3rd largest); all 6 ratcheted files at 0–4 tokens of headroom. File graph: rules/bootstrap-patterns.md (1,093 tok) is an orphan — zero inbound links repo-wide and ~fully duplicated by SKILL.md; references/plugin-hooks.md (2,628, hand-authored, the canonical hooks reference) is reachable only via rules/plugin-hooks-events.md (985), a file that calls itself a "compact pointer" and then restates it. Real usage: 5 patterns; plugin authoring and the os validate/os dev loop well covered; objectstack.config.ts partial (teaches shapes the 4 real configs never use, omits 3 they all use); requires: capability tokens and the onEnable export have zero coverage. CLI verification clean: every os command at SKILL.md:1117-1214 resolves, and the negative claims hold. Example gate: 80 TypeScript fences, 2 marked — both teach data authoring; zero plugin/kernel/service examples are type-checked. Verdict RESTRUCTURE (net ≈ −5,970 tok, −24.6%).

Top findings (|Δtok| × confidence)

# id · span · proposal Δtok
1 PLAT-B-01 · rules/bootstrap-patterns.md:1-142 · DELETE — orphan, duplicated by SKILL.md:209-234,327-339,351-357,389-397 −1,093
2 PLAT-B-02 · rules/plugin-hooks-events.md:1-108 · MERGE-INTO references/plugin-hooks.md (the self-declared pointer restates it) −985
3 PLAT-D-03 · rules/service-registry.md:270-319 · DELETE naming conventions + toBeDefined() test + 10 best-practices −452
4 PLAT-D-02 · rules/plugin-lifecycle.md:293-340 · DELETE "Version your plugin", reverse-domain names, two vacuous vitest blocks −409
5 PLAT-C-05 · 5 in-package sites · DELETE 4 of 5 — the data:* boundary is stated 7× counting frontmatter + catalog −310
6 PLAT-B-03 · SKILL.md:39-49 + :699-708 · DELETE — "When to Use This Skill" twice −276
7 PLAT-H-01 · evals/README.md · planned stubs (DEFERRED, #14296 item 2) −246
8 PLAT-D-04 · references/plugin-hooks.md:312-327 · DELETE 7 best-practices restating the same file −235
9 PLAT-E-01 · SKILL.md:527-542 · REWRITE-AS-CONSTRUCT — Host Pattern uses defineStack/SqlDriver un-imported, CrmApp/TodoApp undefined, { ... } → TS1109 −227
10 PLAT-D-08 · rules/plugin-lifecycle.md:201-230 vs rules/service-registry.md:193-223 · DELETE the lifecycle copy −225
11 PLAT-C-01 · SKILL.md:548-576 · DELETE → pointer — duplicates objectstack-data seeds and writes object: by hand, which data forbids −190
12 PLAT-D-01 · SKILL.md:735-758 · DELETE ASCII decision tree restating the table 2 lines above −183
13 PLAT-C-02 · SKILL.md:626-663 · REWRITE-AS-CONSTRUCT — re-teaches field types in a spelling 7/7 real object files don't use −180
14 PLAT-B-07 · rules/service-registry.md:145-158 · MERGE-INTO SKILL.md:1008-1024 −174
15 PLAT-D-06 · references/plugin-hooks.md:252-311 · DELETE second near-identical vitest block −150

Also load-bearing: PLAT-F-05 (composeStacks() — zero usages outside spec + tests, −165 → one row), PLAT-F-06 (driver-as-plugins: taught as canonical; zero app configs do it — the CLI wires it at serve.ts:2687-2745, −100), PLAT-B-06 (−129), PLAT-D-07 (−210), PLAT-G-01 (projectenvironment, five spans, against skills/README.md:88).

Imprecision to fix

SKILL.md:79-80 says the blank template ships "One example object, in-memory driver, Hono server" — the template's config has neither driver nor Hono plugin (packages/create-objectstack/src/templates/blank/objectstack.config.ts:40-44); both arrive from CLI auto-registration. State it as the running app, not the file.

Three funded additions

  1. manifest.engines: { protocol: '^17' } — one Manifest Reference row (+40, paid by PLAT-C-01): 4 real usages incl. every create-objectstack project; grep engines skills/objectstack-platform/ → 0.
  2. requires: [...] capability tokens — a token table in the Boot Sequence (+120, paid by PLAT-D-07 + PLAT-B-03): packages/cli/src/commands/serve.ts:1446-1560 ~20 providers; 3 real configs declare it.
  3. The onEnable export — 4 lines in the Boot Sequence (+60, paid by PLAT-B-06 + PLAT-D-01): 4 real sites.

Flight scope

IMPLEMENT (shrink-only): delete rules/bootstrap-patterns.md (orphan) and rules/plugin-hooks-events.md (its unique content folded into references/plugin-hooks.md and paid there by PLAT-D-04 + PLAT-D-06); link references/plugin-hooks.md directly from SKILL.md; drop both deleted files' ceiling rows; every other DELETE / MERGE-INTO / REWRITE-AS-CONSTRUCT row at HIGH or MED; the three funded additions; PLAT-G-01 vocabulary; PLAT-B-05 reorder (free — bring defineStack() above the preamble); os:check on the self-contained plugin/kernel examples that pass.

ANCHOR RULINGS: references/plugin-hooks.md path stays STABLE — objectstack-data's hooks file links here and the data flight re-points its link to this path. Seeds → anchor objectstack-data (PLAT-C-01: delete + pointer). Field types → objectstack-data (PLAT-C-02). data:* boundary: keep ONE statement in SKILL.md. The api flight deletes its datasource/service-registry copies and points at SKILL.md:353-357 / rules/service-registry.md — keep those stable. The upstream-reporting residue of objectstack-pm-dispatch points at SKILL.md:59-70 — keep that section.

DEFER (pending #14296): PLAT-H-01 (eval stubs, item 2).

Flight constraints (binding)

  • ONE draft PR, first line Fixes #<this card>; governed ⇒ stays draft; review requests are the seat's step.
  • Token ratchet: no ratcheted file may grow; additions paid by deletions in the SAME file; ⛔ re-wrap is not payment; ⛔ no ceiling raise; ⛔ no new files; scripts/check-skills-token-ratchet.mjs touched ONLY to drop the rows of the two deleted files.
  • ⛔ Never edit another package's files: MERGE-INTO another package = DELETE here + one-line pointer; a missing/weaker anchor goes in the PR body under "follow-up for ".
  • Generated files untouched (references/_index.md); frontmatter edits ⇒ regenerate skills/README.md.
  • Live surface with zero measured usage ⇒ one row pointing at its schema, never delete the last mention; retired/tombstoned surface ⇒ delete.
  • Gates: node scripts/check-skills-token-ratchet.mjs, pnpm --filter @objectstack/spec check:skill-examples, pnpm check:skill-compatibility, pnpm check:skill-identifier-liveness, plus node scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.
  • PR body: per-item 落点 | before | after list keyed by finding id; per-file token delta; needs:contract-review on both carriers if any operator/contract-semantics claim changes.

Refs: #14292 · #14296 · #13658.

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillspriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions