⚠️ EXPERIMENTAL. Derive an emit TOOL from an OutputContract — the same
contract the fork rail renders as a vigiles:ok / vigiles:err fenced block.
const emit = experimental_emitTool(contract);
// emit.tool → serve from your MCP server
// emit.instruction → paste into the (unforked) skill's body
The two tracks are NESTED ({ track, ok? , err? }), not flattened into one bag
of fields. That is deliberate: a flat union cannot say which fields are required
on which track, so "success fields mixed with error fields" would be a
well-formed call. Nested, it is not expressible.
🔴 required in the returned schema is DESCRIPTION, not enforcement — measured,
see the module header (4). Validate what arrives with
experimental_parseEmitted.
⚠️ EXPERIMENTAL. Derive an emit TOOL from an
OutputContract— the same contract the fork rail renders as avigiles:ok/vigiles:errfenced block.const emit = experimental_emitTool(contract); // emit.tool → serve from your MCP server // emit.instruction → paste into the (unforked) skill's body
The two tracks are NESTED (
{ track, ok? , err? }), not flattened into one bag of fields. That is deliberate: a flat union cannot say which fields are required on which track, so "success fields mixed with error fields" would be a well-formed call. Nested, it is not expressible.🔴
requiredin the returned schema is DESCRIPTION, not enforcement — measured, see the module header (4). Validate what arrives withexperimental_parseEmitted.