Skip to main content

Identity

FieldValue
Workflow IDmSJmBzpIcuCKz1WT
Webhook path/webhook/forge-resolve-next-ticket
n8n instancehttps://hab.so1.io
Local JSON/FORGE Resolve-Next-Ticket.json (untracked)
Node count43 (cleaned; was 77 with duplicates)
PurposeStrategic planner: reads GitHub epic/block/task structure, assembles prompts, delegates execution

Architecture

FORGE Webhook (POST)
  → Set Configuration (10 fields from webhook body)
  → Fetch Epic Issue (GitHub API)
  → Parse Epic Body (extract block references)
  → Override Block? ──(YES)──> Fetch Override Block
  │                  (NO)
  → Split Blocks to Items → Iterate → Resolve & Select Next Block
  → Parse Block for Tasks → Iterate Tasks → Aggregate Tasks
  → Assemble FORGE Prompt
  → Execution Mode (Switch v3)
    ├── "api"    → Call Claude API → Closure Chain → Return Result
    ├── "tommy"  → Build TOMMY Payload → Trigger TOMMY → Closure Chain
    └── "manual" → Return Prompt (no execution)

Three Execution Modes

ModeBehaviourTimeout
manualReturns the assembled prompt for human review. No execution.120s
apiCalls Claude API directly, then auto-closes GitHub issues on success.120s
tommyDelegates to TOMMY workflow via HTTP POST. Auto-closes on ALL_PASS.600s

Webhook Input Schema

{
  "gh_org": "traceo-ai",
  "gh_repo": "traceo-mcp-server",
  "epic_issue_number": 22,
  "block_issue_number": null,
  "execution_mode": "manual",
  "ssh_host": "root@vps.devarno.cloud",
  "project_path": "/root/projects/so1-platform"
}
  • execution_mode: Controls the Switch node routing (manual / api / tommy)
  • block_issue_number: Optional override. If omitted, FORGE finds the next open block.
  • ssh_host / project_path: Only used in tommy mode.

Set Configuration Node (10 fields)

IDFieldSourceDefault
a1gh_org$json.body.gh_org(required)
a2gh_repo$json.body.gh_repo(required)
a3epic_issue$json.body.epic_issue_number(required)
a4override_block$json.body.block_issue_number""
a5exec_mode$json.body.execution_mode"manual"
a6target_repo$json.body.target_repo_for_code""
a7api_base(hardcoded)https://api.github.com
a8claude_key$json.body.claude_api_key""
a9ssh_host$json.body.ssh_host"root@vps.devarno.cloud"
a10project_path$json.body.project_path"/root/projects/so1-platform"

Issue Closure Chain

Both api and tommy modes run on success:
  1. Prepare Closure — Maps task data for the loop
  2. Close Task Issues — SplitInBatches loop
  3. Comment + Close each task issue
  4. Comment + Close the block issue
  5. Return Result to webhook caller

Credentials

NameIDTypeUsed by
GitHub (Dev4rno)FhglvXmXMeC2SQTlgithubApiAll GitHub HTTP Request nodes (~15)
google_ai_keyPdEKB19B1R0PQ4thhttpHeaderAuthCall Claude API (api mode only)
Critical: After any PUT update via the n8n API, all credential bindings detach. Re-select each credential in the n8n UI and save.

Duplicate Node History

The FORGE JSON historically contained 29 duplicate nodes with 1 suffix. These were stripped during 2026-03-27 deployment (77 → 43 nodes). If the local JSON still has them, strip before pushing — see the n8n Deployment skill.

Known Issues

  • Vercel proxy timeout: Rover UI routes through Vercel (maxDuration = 300). Tommy-mode executions exceeding 5 minutes time out at Vercel (n8n continues).
  • GitHub issue structure assumed: FORGE expects epics with markdown checklists referencing block issues, and blocks referencing task issues. Parsing is regex-based.