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.
This one is not a broken example. It is an entry with nothing to parse against, which is a different and arguably worse condition — and it is the reason the sweep classifies it as unbound rather than green.
Measured
grep over packages/spec/src finds no export const TriggerSchema anywhere, and no TriggerSchema binding exists on any of the four metadata-authoring subpaths the catalog's other entries resolve from (@objectstack/spec/data, /ui, /ai, /automation). The only near names on that surface are SkillTriggerConditionSchema, TimeRelativeTriggerSchema, WebhookTriggerType and resolveFlowTriggerKind — none of them an authorable trigger metadata type.
The obvious candidate is HookSchema (packages/spec/src/data/hook.zod.ts), which is the live "fires on data events for an object" surface. The entry's example does not parse as one either:
[events] invalid_type :: Invalid input: expected array, received undefined
[] unrecognized_keys :: Unrecognized key(s) on this hook: `event`, `flow`.
Did you mean `event` -> `events`? Until this shape was closed, these were dropped
silently — the hook still registered and ran.
So the entry is doubly adrift: event (singular) is a strict-object alias of events — the same alias-as-a-documented-key failure class measured on the flow entry at #14782 — and flow is not a hook key at all, because a hook's code slot is handler.
The decision this needs
The workflow entry in the same catalog already models the honest answer for a topic with no type behind it: it was rewritten as an explicit "ObjectStack has no standalone Workflow authoring type" redirect. trigger may need the same treatment, pointing at Flow with type: 'record_change' and at HookSchema, or it may need to become a real Hook entry under the name operators look for. That is an operator-facing documentation judgement, not a mechanical fix.
Guard state
The sweep landed for #14811 does not silently skip this entry. It asserts the reason: that TriggerSchema is absent from the searched surface, and that the example is not a Hook either — so the classification is defended rather than assumed, and the day either fact changes the test turns red.
Reproduce
pnpm --filter @objectstack/cli exec vitest run test/commands.test.ts
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.This one is not a broken example. It is an entry with nothing to parse against, which is a different and arguably worse condition — and it is the reason the sweep classifies it as unbound rather than green.
Measured
grepoverpackages/spec/srcfinds noexport const TriggerSchemaanywhere, and noTriggerSchemabinding exists on any of the four metadata-authoring subpaths the catalog's other entries resolve from (@objectstack/spec/data,/ui,/ai,/automation). The only near names on that surface areSkillTriggerConditionSchema,TimeRelativeTriggerSchema,WebhookTriggerTypeandresolveFlowTriggerKind— none of them an authorabletriggermetadata type.The obvious candidate is
HookSchema(packages/spec/src/data/hook.zod.ts), which is the live "fires on data events for an object" surface. The entry's example does not parse as one either:So the entry is doubly adrift:
event(singular) is a strict-object alias ofevents— the same alias-as-a-documented-key failure class measured on theflowentry at #14782 — andflowis not a hook key at all, because a hook's code slot ishandler.The decision this needs
The
workflowentry in the same catalog already models the honest answer for a topic with no type behind it: it was rewritten as an explicit "ObjectStack has no standalone Workflow authoring type" redirect.triggermay need the same treatment, pointing atFlowwithtype: 'record_change'and atHookSchema, or it may need to become a real Hook entry under the name operators look for. That is an operator-facing documentation judgement, not a mechanical fix.Guard state
The sweep landed for #14811 does not silently skip this entry. It asserts the reason: that
TriggerSchemais absent from the searched surface, and that the example is not aHookeither — so the classification is defended rather than assumed, and the day either fact changes the test turns red.Reproduce