Replace the inline LOOP_HOST_CONTRACT constant in the Capability Registry generator with a generated-from-workflows contract (ADR-894 §3). The contract is now derived from inert `<!-- gsd:loop-host ... -->` marker blocks in the five step workflows, emitted as the committed gsd-core/bin/lib/loop-host-contract.cjs, and required by gen-capability-registry.cjs — one source of truth, no drift. Drift guards in gen-loop-host-contract.cjs: per-step point ownership (each step must declare exactly its canonical loop points), multiple-block + duplicate-key hard errors, and a word-boundary agent-role cross-check. Contract content is byte-identical to the former constant; registry-only, nothing wired into the live loop. Closes #903 Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
1.8 KiB
JavaScript
106 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* loop-host-contract.cjs — generated by scripts/gen-loop-host-contract.cjs
|
|
* DO NOT EDIT BY HAND. Run: node scripts/gen-loop-host-contract.cjs --write
|
|
* ADR-894 §3 — Loop Host Contract, generated from workflow markers.
|
|
* 12 points: discuss:pre/post, plan:pre/post, execute:pre/wave:pre/wave:post/post,
|
|
* verify:pre/post, ship:pre/post. Per-step agentRoles and coreArtifacts.
|
|
*/
|
|
|
|
const LOOP_HOST_CONTRACT = [
|
|
{
|
|
"step": "discuss",
|
|
"points": [
|
|
"discuss:pre",
|
|
"discuss:post"
|
|
],
|
|
"agentRoles": [
|
|
"orchestrator"
|
|
],
|
|
"coreArtifacts": {
|
|
"produces": [
|
|
"CONTEXT.md"
|
|
],
|
|
"consumes": []
|
|
}
|
|
},
|
|
{
|
|
"step": "plan",
|
|
"points": [
|
|
"plan:pre",
|
|
"plan:post"
|
|
],
|
|
"agentRoles": [
|
|
"researcher",
|
|
"planner",
|
|
"checker"
|
|
],
|
|
"coreArtifacts": {
|
|
"produces": [
|
|
"PLAN.md"
|
|
],
|
|
"consumes": [
|
|
"CONTEXT.md"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"step": "execute",
|
|
"points": [
|
|
"execute:pre",
|
|
"execute:wave:pre",
|
|
"execute:wave:post",
|
|
"execute:post"
|
|
],
|
|
"agentRoles": [
|
|
"executor",
|
|
"verifier"
|
|
],
|
|
"coreArtifacts": {
|
|
"produces": [
|
|
"SUMMARY.md"
|
|
],
|
|
"consumes": [
|
|
"PLAN.md"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"step": "verify",
|
|
"points": [
|
|
"verify:pre",
|
|
"verify:post"
|
|
],
|
|
"agentRoles": [
|
|
"orchestrator"
|
|
],
|
|
"coreArtifacts": {
|
|
"produces": [
|
|
"UAT.md"
|
|
],
|
|
"consumes": [
|
|
"SUMMARY.md"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"step": "ship",
|
|
"points": [
|
|
"ship:pre",
|
|
"ship:post"
|
|
],
|
|
"agentRoles": [
|
|
"orchestrator"
|
|
],
|
|
"coreArtifacts": {
|
|
"produces": [],
|
|
"consumes": [
|
|
"UAT.md"
|
|
]
|
|
}
|
|
}
|
|
];
|
|
|
|
module.exports = { LOOP_HOST_CONTRACT };
|