c25ba27e57
ExecutionPlanCompiler treated the plan's single 'produces' string as a
registry kind id, while the architect prompt described it as a unique
artifact id referenced by needs/edges — the model followed the prompt,
invented descriptive ids (files_created), and every freestyle plan
failed to compile. Collapsing both onto one string is also unsound:
two stages producing the same kind would collide on slot name and make
artifact_validated edge conditions ambiguous.
Plan stages now carry an optional 'kind' selecting the registered kind
(mirroring TOML's produces = { name, kind }); 'produces' stays the
unique slot name. Missing 'kind' falls back to the old produces-as-kind
reading so existing plans still compile. Vocabulary entry, architect
prompt, and execution_plan schemas updated to match.
47 lines
1.3 KiB
JSON
47 lines
1.3 KiB
JSON
{
|
|
"type": "object",
|
|
"properties": {
|
|
"goal": { "type": "string" },
|
|
"stages": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": { "type": "string" },
|
|
"role": { "type": "string" },
|
|
"prompt": { "type": "string" },
|
|
"needs": { "type": "array", "items": { "type": "string" } },
|
|
"produces": { "type": "string" },
|
|
"kind": { "type": "string" },
|
|
"tools": { "type": "array", "items": { "type": "string" } }
|
|
},
|
|
"required": ["id", "prompt", "produces"]
|
|
}
|
|
},
|
|
"edges": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"from": { "type": "string" },
|
|
"to": { "type": "string" },
|
|
"condition": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": { "type": "string" },
|
|
"artifact_id": { "type": "string" },
|
|
"field": { "type": "string" },
|
|
"value": { "type": "string" },
|
|
"operator": { "type": "string" }
|
|
},
|
|
"required": ["type"]
|
|
}
|
|
},
|
|
"required": ["from", "to", "condition"]
|
|
}
|
|
}
|
|
},
|
|
"required": ["goal", "stages", "edges"],
|
|
"additionalProperties": true
|
|
}
|