Build Log · September 17, 2026
Open the Owner Loop Through ForgeKit
Built the first ForgeKit MCP plugin — a doorway into the real Owner Loop, not a second one — then proved the full lifecycle by recovering a real Actor concurrency incident and shipping the change it produced.
- Alloy
- Owner Loop
- MCP Plugin
- canvas-2
- MCP tools
- 5
- new API routes
- 5
- passing tests
- 23
- real terminal Owner Loop cycle proven
- 1
MCP tools
new API routes
passing tests
real terminal Owner Loop cycle proven
Timeline
Start
Received the Charge, ran the Crucible
architect/qe/steward Council unanimously rejected a generic adapter registry — one in-app adapter for one Canvas app
+2h
Built the plugin + adapter
5-tool MCP server, thin canvas-2 adapter reusing existing lifecycle functions verbatim
+3h
Real end-to-end adapter proof
Idempotent submission, real AI-driven clarification round-trip against canvas-2's live DB
+4h
Zeb submitted a real request
A real Actor built, verified, and hit a real promotion-push concurrency incident
+5h
Recovered, deployed, verified live
Fixed the dispatch_status desync, ran finalize-owner-intent.mjs, deployed via the real deploy command, confirmed via direct HTTP
End
Merged, pushed, twice
Found and fixed a real gap between what was verified and what actually landed in the first commit
What shipped
packages/forgekit-owned-software/ — a private, local MCP (stdio) plugin: 5 tools (discover_apps, submit_owner_request, get_request_status, answer_clarification, get_request_result), a thin HTTP adapter-client with no DB/GitHub/deploy credential, a packaged skill teaching outcome-language discipline and refusal boundaries
experiments/canvas-2/lib/mcp-adapter.ts + mcp-auth.ts + 5 new API routes — the thinnest authenticated adapter, delegating entirely to canvas-2's existing lifecycle logic
New nullable mcp_idempotency_key column + partial unique index on requests
Refactored (not rewritten) lib/actions/requests.ts: submitRequest/replyToShaping's external interface unchanged, each now delegates to a new Core function the MCP adapter also calls directly
23 new passing tests (10 in the plugin package, 13 in canvas-2)
A real, complete Owner Loop cycle proof: a real Actor built and shipped a photo swap for canvas-2, recovered from a real documented concurrency incident, deployed, and independently confirmed live
“Wire up a real actor and then commit.”