Skip to content

[finding] The objectstack-ai generated reference index advertises 6 schemas the SKILL.md never teaches and omits the one it names — SKILL_MAP in build-skill-references.ts is unreconciled with the body #14462

Description

@os-litant

Out-of-scope by-product of the skills optimization flight on #14305 (audit finding AI-B-04, deferred there by the card's own scope: the generator lives in packages/spec, and that flight was shrink-only inside skills/objectstack-ai/). Filed unassigned. No edit was made — the map is generator-owned and belongs to the spec lane.

Measured at origin/main d16df74

packages/spec/scripts/build-skill-references.ts:98-109 maps the objectstack-ai package to 10 schemas:

ai/agent.zod.ts        ai/tool.zod.ts          ai/skill.zod.ts
ai/model-registry.zod.ts   ai/conversation.zod.ts  ai/mcp.zod.ts
ai/embedding.zod.ts    ai/knowledge-source.zod.ts
ai/knowledge-document.zod.ts   ai/usage.zod.ts

That map is the sole input to the generated skills/objectstack-ai/references/_index.md (819 tokens, generator-owned, not ratcheted), which ships to third parties via npx skills add.

Two directions of mismatch:

  1. Advertised, never taught. The SKILL.md body teaches agent, tool, skill, knowledge-source — and, after the Skills optimization flight — skills/objectstack-ai: RESTRUCTURE (≈ −2,300 tok, −29%) — 26% of the file teaches the agent surface it forbids its readers, the flagship defineSkill example declares four tools that resolve to nothing, and the open-edition MCP path (the only AI path without a cloud licence) is taught nowhere #14305 flight, model-registry (the provider enum and promptTemplate CEL carriers). conversation, mcp, embedding, knowledge-document and usage are listed in the index and never mentioned in the body. Three of those five also have zero consumers outside packages/spec (the audit's census grepped ConversationSchema, ModelRegistryEntry/ModelRegistrySchema, MCPServerRef/MCPToolBinding across packages/** and examples/**). An index promising a schema the body cannot help with invites the agent to Read into node_modules for guidance that does not exist.
  2. Taught, never advertised. ai/solution-blueprint.zod.ts exists (packages/spec/src/ai/solution-blueprint.zod.ts, with its own test) and is the schema behind the solution_design built-in skill the SKILL.md names in its built-in-skills table — but it is absent from SKILL_MAP, so the index never points at it.

The ruling this needs

Either direction is defensible, and they are not the same decision:

  • Narrow the map to what the body teaches, on the "a published index is a promise" reading. Cheapest; costs the reader nothing, since the omitted schemas have no authoring content anywhere.
  • Widen the body to earn the extra schemas. Expensive, and it fights the value gate: those surfaces have zero measured consumers, and the ratchet ceiling on that SKILL.md is 6,806 tokens.
  • Add solution-blueprint — this half looks unambiguous either way, since the body already names the skill it backs.

Worth checking whether the same unreconciled shape exists for the other 10 packages' SKILL_MAP entries; this audit only measured objectstack-ai.

Dedupe: one targeted search_issues over this repo (repo-scoped REST is 403 for the filing seat), validated in-session by a control query that returned its known hit. Nothing open covers this.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions