What We Learned
The FORGE×TOMMY pipeline — which reads a GitHub epic, selects the next unblocked block, decomposes it into tasks, executes each via Claude CLI on a remote VPS, and closes GitHub issues — reached verified end-to-end autonomous operation for the first time. The pipeline required 16 bug fixes to get there, most of which were undocumented n8n v1.x behavioral differences from older versions. The critical unlocks were three: (1) fixing n8n’s internal webhook routing to allow the two workflows to run concurrently without deadlock, (2) teaching claude CLI to commit and push its own changes rather than leaving them unstaged, and (3) recovering tasklet identity through the SSH node which silently discards all input data.Why It Matters
FORGE×TOMMY is the execution layer for SO1 development autonomy. Once the pipeline is stable, the path from “GitHub epic with 22 blocks” to “all 22 blocks implemented, tested, and deployed” becomes a scheduling problem rather than an execution problem. An operator triggers FORGE, monitors executions in the n8n UI, and unblocks dependencies — the actual code writing, committing, and issue tracking is fully automated. Block 17 (frontend app shell: 5 tasks) ran in 9 minutes at a cost of approximately $0.086/task. A full 22-block epic at this rate represents roughly 3-4 hours of autonomous execution time at low cost.The Verification Methodology
The session used 4-stream parallel analysis throughout: (1) primary recommendation, (2) independent alternative, (3) critical reviewer, (4) logical consistency check. This pattern consistently surfaced root causes faster than linear debugging — particularly in the SplitInBatches port inversion where the standard assumption (port 0 = loop output) was precisely backwards in the deployed n8n version.The Remaining Gap
One architectural decision remains: FORGE’s issue closure chain runs only when TOMMY returns synchronously. With long-running blocks (>10 min), the HTTP connection from FORGE to TOMMY may time out before completion. The mitigation islocalhost:5678 routing (reduces deadlock) plus monitoring executions via the n8n API when the response is empty.