NF-3: ForgePort + agent-runner nodes #324

Closed
opened 2026-04-24 11:29:50 +00:00 by code-lead · 1 comment
Collaborator

As the platform, I want every ForgePort method and the worker-dispatch primitives registered as nodes so that the default flow can express today's dispatch paths in data.

Acceptance criteria

forge.* nodes

  • One node per ForgePort method (see spec § Operation catalog — forge.* namespace): get_issue, list_issues, add_labels, remove_label, create_issue, patch_issue, update_assignees, create_comment, list_comments, get_pull_request, list_pull_requests, request_review, list_reviews, merge_pull_request, get_blockers, add_blocker, get_aggregate_status, list_workflow_runs, create_label, read_file, write_file.
  • Each resolves the adapter via createForgeAdapterForRepo(repo, token).

agent.* nodes

  • agent.dispatch(type, repo, issue, skill, args) enqueues on the worker via dispatchByType; returns { taskId }.
  • Completion of that task publishes task.completed / task.failed back into the executor as a new trigger (hook into the worker lifecycle).
  • agent.cancel(taskId) returns boolean.
  • agent.raise_cap(agent, repo, issue, usd) matches today's /raise-cap path.

Validation + rate-limit

  • Input schemas validate at graph-load time.
  • Per-node counter for the per-flow rate-limit budget (default 20 mutations / run).

Out of scope

  • mcp.* nodes — NF-9.
  • Custom retry policies (nodes inherit the adapter's built-in retry).

References

As the platform, I want every `ForgePort` method and the worker-dispatch primitives registered as nodes so that the default flow can express today's dispatch paths in data. ## Acceptance criteria ### `forge.*` nodes - [ ] One node per `ForgePort` method (see spec § Operation catalog — `forge.*` namespace): get_issue, list_issues, add_labels, remove_label, create_issue, patch_issue, update_assignees, create_comment, list_comments, get_pull_request, list_pull_requests, request_review, list_reviews, merge_pull_request, get_blockers, add_blocker, get_aggregate_status, list_workflow_runs, create_label, read_file, write_file. - [ ] Each resolves the adapter via `createForgeAdapterForRepo(repo, token)`. ### `agent.*` nodes - [ ] `agent.dispatch(type, repo, issue, skill, args)` enqueues on the worker via `dispatchByType`; returns `{ taskId }`. - [ ] Completion of that task publishes `task.completed` / `task.failed` back into the executor as a new trigger (hook into the worker lifecycle). - [ ] `agent.cancel(taskId)` returns boolean. - [ ] `agent.raise_cap(agent, repo, issue, usd)` matches today's `/raise-cap` path. ### Validation + rate-limit - [ ] Input schemas validate at graph-load time. - [ ] Per-node counter for the per-flow rate-limit budget (default 20 mutations / run). ## Out of scope - `mcp.*` nodes — NF-9. - Custom retry policies (nodes inherit the adapter's built-in retry). ## References - Spec: [`specs/node-flows.md`](../src/branch/main/specs/node-flows.md) § Operation catalog (v1). - Depends on NF-2 (#323).
Author
Collaborator

🤖 Auto-assigned to boss (heuristic: area:agents → boss (architecture-touching)). Reply /unassign to reroute.

🤖 Auto-assigned to **boss** (heuristic: area:agents → boss (architecture-touching)). Reply `/unassign` to reroute.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks#324
No description provided.