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. Full findings table = audit record: the dev posts audit/objectstack-ai/findings.md (seat scratchpad) verbatim as the first comment at claim time.
Audit summary
SKILL.md 592 lines / 6,791 tok (headroom 15) · evals/README.md 315 (headroom 0) · generated _index.md 819 — package 7,925. Real usage: zero *.skill.ts / *.tool.ts / *.agent.ts files in examples or apps; only 3 patterns have real usage — action.ai.exposed + ai.description (7 usages), the MCP action bridge (examples/app-todo/test/mcp-actions.e2e.ts + all of packages/mcp), and app.defaultAgent (1). Model registry, conversations, MCPServerRef/MCPToolBinding have zero consumers outside packages/spec. The "agents are platform-internal" boundary still holds (os g agent retired with a prescription; agent.tools/agent.knowledge are retiredKey() tombstones) — yet the package spends 1,777 tokens (26%) teaching that closed surface. Verdict RESTRUCTURE: weight inverted against usage; defineTool (0 usages, no runtime reader until ADR-0109 lands) gets a full section while action.ai (7 usages) gets 371 tokens near the bottom; the description promises three surfaces the body never teaches.
Top findings
| id |
span |
proposal |
Δtok |
| AI-B-02 |
SKILL.md:145-215 |
DELETE agent Required/Optional/Example (section opens "third parties do not author agents"); keep 2 retirement rows |
−600 |
| AI-C-01 |
:28-36,83-86,89-90,126-131,330-335,339-342,360,364-365 |
MERGE-INTO :28-36 — "runtime is cloud/EE, open = MCP" restated 8× = 715 tok; replace 7 with a marker |
−350 |
| AI-F-04 |
:289-335,552-565 |
*.tool.ts → a note row; ADR-0109: "no runtime reader until that lands" (stack.zod.ts:594-601) |
−230 |
| AI-D-03 |
:495-521 |
DELETE §Structured Output — agent-only field the file itself calls "declared only" |
−217 |
| AI-H-01 |
evals/README.md:1-44 |
planned-eval stub, lists 5 files that don't exist (DEFERRED, #14296 item 2) |
−195 |
| AI-D-07 |
:362-381 |
REWRITE-AS-CONSTRUCT — HITL narration; every symbol cloud-closed |
−165 |
| AI-D-05 |
:442-456 |
MERGE-INTO :409-413 table — 5 items restating keys from 30 lines above |
−150 |
| AI-A-02 |
:475-491 |
REWRITE-AS-CONSTRUCT — "Model Selection"/"Temperature" taste tables; the enforced fact (temperature min 0 max 2, agent.zod.ts:38) is missing |
−140 |
| AI-B-01 |
:40-50 |
DELETE "When to Use" |
−125 |
| AI-D-01 |
:63-73 |
DELETE "Why Three Tiers?" analogy table + a false best-practice blockquote |
−124 |
| AI-D-04 |
:461-473 |
DELETE vendor model catalogue; keep the enum blockquote |
−110 |
| AI-D-06 |
:526-529,541-544 |
DELETE pitfalls 1/2/4 — generic prompt advice the frontmatter disclaims |
−99 |
| AI-C-02 |
:138-141 |
DELETE ops callout — ai_usage_daily has no open-repo object |
−62 |
| AI-E-01 |
:251-275 |
REWRITE — the flagship defineSkill example declares tools: ['query_support_case', …]; none is in PLATFORM_PROVIDED_TOOL_NAMES or stack.tools[] or action_* — exactly the failure ai-skill-tool-unresolved (packages/lint/src/validate-ai-tool-references.ts:150-171) exists to catch; the package's own defineTool example defines create_case, so the two examples don't compose |
0 |
| AI-B-03 |
:20-218 |
reorder — first customer-authorable section starts at line 218 |
0 |
Net ≈ −2,303 of 7,925 (29%) after +312 of paid additions.
Incidental falsehoods (fix in this flight)
SKILL.md:71-73 — "Direct tool assignment to agents is supported but considered legacy." FALSE: agent.tools is a retiredKey() tombstone → parse error (agent.zod.ts:234-236); the same file says so at :168. HIGH.
SKILL.md:579-580 — "any CEL predicate (e.g. a tool's availability condition)". FALSE: ToolSchema carries no CEL expression (tool.zod.ts:132-168); the only AI CEL carriers are ai/model-registry promptTemplate.system/.user. The same wrong premise sits in skills/README.md:104-105 ("AI tool params") — record it under "follow-up for skills/README.md". HIGH.
- Residue (code fact, not a doc edit):
SKILL.md:96-98 says metadata_assistant is "not vocabulary" while packages/platform-objects/src/apps/studio.app.ts:50 pins defaultAgent: 'metadata_assistant' — file as an out-of-scope card.
Three funded additions
- Open-edition MCP wiring (+180, paid by AI-D-03):
MCPServerPlugin / MCPServerRuntime from @objectstack/mcp, the /api/v1/mcp endpoint, the tool names a client sees (list_actions, run_action, query_records, describe_object).
skill.tools[] resolution ladder + the platform tool registry (+0, paid by AI-B-02): the ADR-0109 default path and the ~30 real names in packages/spec/src/system/constants/platform-tool-names.ts:38-80.
- Trigger-condition operator↔value shape column (+30, paid by AI-D-01 + AI-B-01):
in/not_in → array, eq/neq → string, contains → either (skill.zod.ts:37-50,130-175).
Flight scope
IMPLEMENT (same-file, shrink-only): all rows above and in the findings file at HIGH or MED; the three funded additions; falsehoods 1–2; AI-E-01 rewrite so the flagship example resolves; AI-A-01 description edit (stop promising conversations / model registry / MCP integrations the body does not teach, or teach MCP via addition 1).
ANCHOR RULINGS: MCP server / plugin wiring → this package teaches the open-edition path; objectstack-platform keeps plugin mechanics. Formula/CEL → objectstack-formula (delete the false CEL claim).
DEFER: AI-H-01 (eval stub, #14296 item 2); AI-B-04 (generator map vs body mismatch — out-of-scope card for the spec lane's build-skill-references.ts SKILL_MAP).
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; ⛔ do not touch the ratchet script.
- ⛔ Never edit another package's files or
skills/README.md prose; follow-ups go in the PR body. Generated files untouched. Regenerate the README index only if a drift gate requires it (report which).
- Live surface with zero measured usage ⇒ one row pointing at its schema; retired/tombstoned ⇒ delete. A false claim matching a spec
.describe() string ⇒ spec-side twin card.
- 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 keyed by finding id; per-file token delta;
needs:contract-review on both carriers (falsehood 1 and the trigger-operator column are contract-semantics claims).
Refs: #14292 · #14296 · #13658.
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 objectstackorigin/maina59f78d. Full findings table = audit record: the dev postsaudit/objectstack-ai/findings.md(seat scratchpad) verbatim as the first comment at claim time.Audit summary
SKILL.md592 lines / 6,791 tok (headroom 15) ·evals/README.md315 (headroom 0) · generated_index.md819 — package 7,925. Real usage: zero*.skill.ts/*.tool.ts/*.agent.tsfiles in examples or apps; only 3 patterns have real usage —action.ai.exposed+ai.description(7 usages), the MCP action bridge (examples/app-todo/test/mcp-actions.e2e.ts+ all ofpackages/mcp), andapp.defaultAgent(1). Model registry, conversations,MCPServerRef/MCPToolBindinghave zero consumers outsidepackages/spec. The "agents are platform-internal" boundary still holds (os g agentretired with a prescription;agent.tools/agent.knowledgeareretiredKey()tombstones) — yet the package spends 1,777 tokens (26%) teaching that closed surface. Verdict RESTRUCTURE: weight inverted against usage;defineTool(0 usages, no runtime reader until ADR-0109 lands) gets a full section whileaction.ai(7 usages) gets 371 tokens near the bottom; the description promises three surfaces the body never teaches.Top findings
SKILL.md:145-215:28-36,83-86,89-90,126-131,330-335,339-342,360,364-365:28-36— "runtime is cloud/EE, open = MCP" restated 8× = 715 tok; replace 7 with a marker:289-335,552-565*.tool.ts→ a note row; ADR-0109: "no runtime reader until that lands" (stack.zod.ts:594-601):495-521evals/README.md:1-44:362-381:442-456:409-413table — 5 items restating keys from 30 lines above:475-491temperaturemin 0 max 2,agent.zod.ts:38) is missing:40-50:63-73:461-473:526-529,541-544:138-141ai_usage_dailyhas no open-repo object:251-275defineSkillexample declarestools: ['query_support_case', …]; none is inPLATFORM_PROVIDED_TOOL_NAMESorstack.tools[]oraction_*— exactly the failureai-skill-tool-unresolved(packages/lint/src/validate-ai-tool-references.ts:150-171) exists to catch; the package's owndefineToolexample definescreate_case, so the two examples don't compose:20-218Net ≈ −2,303 of 7,925 (29%) after +312 of paid additions.
Incidental falsehoods (fix in this flight)
SKILL.md:71-73— "Direct tool assignment to agents is supported but considered legacy." FALSE:agent.toolsis aretiredKey()tombstone → parse error (agent.zod.ts:234-236); the same file says so at:168. HIGH.SKILL.md:579-580— "any CEL predicate (e.g. a tool's availability condition)". FALSE:ToolSchemacarries no CEL expression (tool.zod.ts:132-168); the only AI CEL carriers areai/model-registrypromptTemplate.system/.user. The same wrong premise sits inskills/README.md:104-105("AI tool params") — record it under "follow-up for skills/README.md". HIGH.SKILL.md:96-98saysmetadata_assistantis "not vocabulary" whilepackages/platform-objects/src/apps/studio.app.ts:50pinsdefaultAgent: 'metadata_assistant'— file as an out-of-scope card.Three funded additions
MCPServerPlugin/MCPServerRuntimefrom@objectstack/mcp, the/api/v1/mcpendpoint, the tool names a client sees (list_actions,run_action,query_records,describe_object).skill.tools[]resolution ladder + the platform tool registry (+0, paid by AI-B-02): the ADR-0109 default path and the ~30 real names inpackages/spec/src/system/constants/platform-tool-names.ts:38-80.in/not_in→ array,eq/neq→ string,contains→ either (skill.zod.ts:37-50,130-175).Flight scope
IMPLEMENT (same-file, shrink-only): all rows above and in the findings file at HIGH or MED; the three funded additions; falsehoods 1–2; AI-E-01 rewrite so the flagship example resolves; AI-A-01 description edit (stop promising conversations / model registry / MCP integrations the body does not teach, or teach MCP via addition 1).
ANCHOR RULINGS: MCP server / plugin wiring → this package teaches the open-edition path; objectstack-platform keeps plugin mechanics. Formula/CEL → objectstack-formula (delete the false CEL claim).
DEFER: AI-H-01 (eval stub, #14296 item 2); AI-B-04 (generator map vs body mismatch — out-of-scope card for the spec lane's
build-skill-references.tsSKILL_MAP).Flight constraints (binding)
Fixes #<this card>; governed ⇒ stays draft; review requests are the seat's step.skills/README.mdprose; follow-ups go in the PR body. Generated files untouched. Regenerate the README index only if a drift gate requires it (report which)..describe()string ⇒ spec-side twin card.node scripts/check-skills-token-ratchet.mjs,pnpm --filter @objectstack/spec check:skill-examples,pnpm check:skill-compatibility,pnpm check:skill-identifier-liveness, plusnode scripts/pm/dispatch-gates.mjs --commands <changed paths>; record the head sha.needs:contract-reviewon both carriers (falsehood 1 and the trigger-operator column are contract-semantics claims).Refs: #14292 · #14296 · #13658.