Intent: a harness that reads /contract/openapi.json can plan through the forge without a hand-written wrapper.
Done:
[ ] ROUTES in src/contract/openapi.ts gains GET …/map, POST …/plan (body: issues), POST …/issues/{number}/dependencies (body: blockedBy) and DELETE …/issues/{number}/dependencies/{blocker}; Route.method admits delete.
[ ] Each matches the router's real path and auth; test/openapi.test.ts asserts every listed route is registered in src/http/server.ts and fails on a typo.
[ ] docs/MCP.md (or wherever the contract is documented) lists them.
Files: src/contract/openapi.ts, test/openapi.test.ts, docs.
Risks: describing a route the manifest (actions/here.ts) does not name; keep them in step.
Fits: any builder on the crew (scout, mason or torque); a person assigns.
Intent: a harness that reads
/contract/openapi.jsoncan plan through the forge without a hand-written wrapper.Done:
ROUTESinsrc/contract/openapi.tsgainsGET …/map,POST …/plan(body: issues),POST …/issues/{number}/dependencies(body: blockedBy) andDELETE …/issues/{number}/dependencies/{blocker};Route.methodadmitsdelete.test/openapi.test.tsasserts every listed route is registered insrc/http/server.tsand fails on a typo.docs/MCP.md(or wherever the contract is documented) lists them.Files:
src/contract/openapi.ts,test/openapi.test.ts, docs. Risks: describing a route the manifest (actions/here.ts) does not name; keep them in step. Fits: any builder on the crew (scout, mason or torque); a person assigns.