Found by the catalog sweep landed for #14811, which parses every SCHEMAS entry's example in packages/cli/src/commands/explain.ts against its real schema. Rewriting catalog entries was ruled out of scope on that card (triage comment 5520209463, step 3), so this is filed unassigned for triage. Suggested domain: domain:cli.
Measured
AgentSchema (@objectstack/spec/ai) rejects the agent entry's example with three issues:
[label] invalid_type :: Invalid input: expected string, received undefined
[model] invalid_type :: Invalid input: expected object, received string
[tools] invalid_type :: `agent.tools` was removed in @objectstack/spec 17 — use `skills`.
An agent reaches exactly the tools its surface-compatible skills declare
(ADR-0064), so move each reference into a skill: a platform tool by its
registered name, or `action_<NAME>` for one of your own AI-exposed Actions.
This is NOT a rename — there is no key the value moves to: the migration
DELETES the key and emits a notice naming each tool that was listed, and you
re-declare each one in a skill by hand.
Why this is the sharpest of the batch
tools is a removed key with an explicit migration notice attached — the catalog is teaching authors a key the spec deletes on sight, and the entry's optional table lists it as { name: 'tools', type: 'ToolReference[]' }. This is the same failure class as the flow entry's steps / trigger aliases measured at #14782, one version further along: not an alias that redirects, a key that is gone.
Three separate corrections are needed and the tools one is not mechanical — per the spec's own message there is no key the value moves to, so someone has to author the replacement skills declaration by hand.
Both the entry's required / optional tables and its example need the pass: label is absent from the example although the schema requires it, and model: 'gpt-4o' is a string where the schema wants an object.
Reproduce
pnpm --filter @objectstack/cli exec vitest run test/commands.test.ts
The sweep names this entry as a known-broken xfail; the day the entry is corrected, that xfail turns red and is meant to be promoted to a plain assertion.
Found by the catalog sweep landed for #14811, which parses every
SCHEMASentry'sexampleinpackages/cli/src/commands/explain.tsagainst its real schema. Rewriting catalog entries was ruled out of scope on that card (triage comment5520209463, step 3), so this is filed unassigned for triage. Suggested domain:domain:cli.Measured
AgentSchema(@objectstack/spec/ai) rejects theagententry's example with three issues:Why this is the sharpest of the batch
toolsis a removed key with an explicit migration notice attached — the catalog is teaching authors a key the spec deletes on sight, and the entry'soptionaltable lists it as{ name: 'tools', type: 'ToolReference[]' }. This is the same failure class as theflowentry'ssteps/triggeraliases measured at #14782, one version further along: not an alias that redirects, a key that is gone.Three separate corrections are needed and the
toolsone is not mechanical — per the spec's own message there is no key the value moves to, so someone has to author the replacementskillsdeclaration by hand.Both the entry's
required/optionaltables and itsexampleneed the pass:labelis absent from the example although the schema requires it, andmodel: 'gpt-4o'is a string where the schema wants an object.Reproduce
The sweep names this entry as a known-broken xfail; the day the entry is corrected, that xfail turns red and is meant to be promoted to a plain assertion.