Files
fusion/docs/agent-paperclip-gap-analysis.md
Fusion 69aa1a550a feat(FN-2605): merge fusion/fn-2605 (auto-resolved)
- test(FN-2605): complete Step 4 — align tests with planning labels
- docs(FN-2605): complete Step 3 — update demo and script terminology
- docs(FN-2605): complete Step 2 — update docs terminology
- docs(FN-2605): complete Step 1 — update README terminology
2026-04-26 12:34:02 -07:00

284 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Agent Paperclip-Style Gap Analysis
## Executive Summary
Fusion already has the core *shape* of a heartbeat-driven agent runtime: agents have lifecycle state, heartbeat runs are tracked, heartbeats can be triggered by timer/assignment/on-demand events, and agents can create follow-up tasks. This gives Fusion a strong baseline for the Paperclip execution model, especially around short-lived run execution (`HeartbeatMonitor.executeHeartbeat()`), agent persistence (`AgentStore`), and lightweight communication (`MessageStore`, task comments).
The largest gaps are ownership and coordination semantics. Paperclips model depends on explicit checkout leasing, inbox-driven work picking, blocked-task dedup, wake-context handling (including mention-triggered behavior), and budget-aware escalation rules. Fusion currently executes assigned work, but it does not enforce checkout-first locking or the comment/inbox contract that makes Paperclip runs predictable and conflict-safe.
Recommended priority: first add ownership/inbox primitives (checkout + inbox-lite + wake context), then add policy layers (blocked dedup, self-assignment constraints, communication conventions), and finally add advanced governance parity (budget controls, richer approval/doc workflows). Several adjacent foundations are already covered by existing Fusion tasks (assignment, hierarchy, permissions), so new work should build on those rather than duplicate them.
## Pattern Inventory
### Implemented Patterns
| Pattern | Fusion Implementation | Location in Code |
|---|---|---|
| Heartbeat run execution loop | Wake → task resolution → agent session → run completion | `packages/engine/src/agent-heartbeat.ts` |
| Heartbeat trigger mechanisms | Timer, assignment, and on-demand trigger scheduling | `packages/engine/src/agent-heartbeat.ts` (`HeartbeatTriggerScheduler`), `packages/dashboard/src/routes.ts` (`POST /agents/:id/runs`) |
| Attachment CRUD | Upload/list/download/delete task attachments | `packages/dashboard/src/routes.ts` (`/tasks/:id/attachments*`), `packages/core/src/store.ts` |
### Partial Implementations
| Pattern | What Exists | What's Missing | Packages Affected | Complexity |
|---|---|---|---|---|
| Heartbeat Procedure (9-step) | Simplified wake→check assignment→work→exit | No approval-follow-up, inbox prioritization, checkout, blocked dedup, delegation semantics parity | engine, core, dashboard | M |
| Wake context variables | `contextSnapshot`, `source`, `triggerDetail`, optional `taskId` | No `PAPERCLIP_WAKE_COMMENT_ID`, approval context vars, or env-style propagation | engine, dashboard, core | M |
| Communication model | Task comments + `MessageStore` mailboxes | No mention-routing semantics, no required ticket-link markdown rules | core, dashboard, engine | M |
| Delegation model | `spawn_agent` + `task_create` + dependencies | No `parentId`/`goalId` issue graph semantics, no workspace inheritance flags | core, engine, dashboard | M |
| Chain of command | `reportsTo` hierarchy and `/agents/:id/children` | No explicit `chainOfCommand` resolution/escalation policy in heartbeat flow | core, engine, dashboard | M |
| Routines | Automation schedules and manual runs exist | Not agent-inbox-native routines with webhook/api triggers + catch-up/concurrency policies | core, engine, dashboard | L |
| Planning mode docs | Planning sessions and summary-based task creation | No issue document key/revision API parity (`plan` doc revisions) | core, dashboard, engine | M |
| Approval workflow | `requirePlanApproval`, approve/reject-plan routes | No approval entity model with linked issues and resolution-first heartbeat handling | core, engine, dashboard | M |
| Status model parity | Fusion columns + task status fields | Missing direct parity with `backlog/in_progress/blocked/cancelled` lifecycle model | core, dashboard, engine | M |
| Error-handling policy | Run failure/termination handling and state transitions | No hard rule enforcement (checkout-first, mandatory end-comment, no cross-team cancel) | engine, core | M |
| Agent identity endpoint | `/agents/:id` and run stats exist | No `/agents/me` contract with company-scoped identity + budget fields | dashboard, core | S |
| Instructions-path API parity | `/agents/:id/instructions` supports path/text updates | No dedicated `/agents/:id/instructions-path` endpoint semantics | dashboard, core | S |
### Missing Patterns
| Pattern | Description | Packages Affected | Complexity | Dependencies |
|---|---|---|---|---|
| Checkout mechanism | Exclusive checkout API with 409 conflict semantics and no-retry policy | core, dashboard, engine | L | Task-agent assignment foundation (FN-1096/1098/1099) |
| Inbox-lite work selection | Compact assignment inbox with `in_progress` then `todo` priority and blocked handling | core, dashboard, engine | M | Checkout mechanism |
| Blocked-task dedup | Skip redundant blocked comments when no new context | core, engine | M | Inbox/comment cursor support |
| Budget management | Per-agent budget tracking, 80% throttling, 100% auto-pause | core, engine, dashboard | L | Agent metrics foundations (FN-1184 family) |
| Self-assignment mention handoff rules | Restrict self-assignment to explicit mention-triggered ownership transfer | engine, dashboard, core | M | Inbox + mention wake context |
| Issue search parity | Full-text search across title/identifier/description/comments | core, dashboard | M | Unified indexing strategy |
| Run audit trail header semantics | Uniform mutating-action run correlation equivalent to `X-Paperclip-Run-Id` policy | engine, dashboard, core | M | Checkout + identity context |
| Comment link policy enforcement | Auto-link ticket IDs and enforce company-prefixed internal URL style | dashboard, engine | S | Issue identifier conventions |
| Send-back-to-user handoff | Support assigning tasks back to user (`assigneeUserId`) with `in_review` handoff pattern | core, dashboard, engine | M | Expanded assignee model |
### Not Applicable
| Pattern | Reason it doesn't apply |
|---|---|
| Commit co-author rule (`Co-Authored-By: Paperclip`) | Paperclip-specific governance requirement; Fusion uses task-scoped commit conventions (`feat(FN-xxx): ...`) |
| OpenClaw invite workflow | Paperclip/OpenClaw org provisioning concern, not a Fusion board runtime concern |
| Paperclip company skills workflow APIs | Fusion has no company-level skill package registry model matching Paperclip |
| Paperclip project/workspace setup API shape | Fusion project registration exists but not via Paperclip issue-workflow endpoints |
| Full Paperclip control-plane API parity | Fusion is a different product surface; only overlapping agent-runtime patterns are relevant |
## Detailed Analysis
### 1) Heartbeat Procedure (9-step)
**Status:** PARTIAL
**Description:** Paperclip requires identity/approval/inbox/pick/checkout/context/work/status/delegate every wake.
**Current State:** Fusion executes a compact heartbeat run (`executeHeartbeat`) with task fetch and tool-enabled session.
**Gap:** Missing approval-first branch, inbox-lite prioritization, explicit checkout, and blocked dedup policy.
**Recommendation:** Extend `executeHeartbeat()` into explicit policy stages and persist per-stage telemetry in run metadata.
**Files Affected:** `packages/engine/src/agent-heartbeat.ts`, `packages/core/src/types.ts`
### 2) Checkout mechanism (409 no-retry)
**Status:** MISSING
**Description:** Must claim ownership before work; 409 means abandon and pick different work.
**Current State:** Fusion relies on scheduler movement/assignment; no explicit lease endpoint.
**Gap:** No first-class lock/lease primitive with conflict semantics.
**Recommendation:** Add checkout/release APIs and enforce checkout-before-work in heartbeat + executor flows.
**Files Affected:** `packages/core/src/agent-store.ts`, `packages/core/src/store.ts`, `packages/dashboard/src/routes.ts`, `packages/engine/src/agent-heartbeat.ts`
### 3) Inbox-lite work selection
**Status:** MISSING
**Description:** Compact assignment view with priority ordering and blocked filtering.
**Current State:** Heartbeat resolves a single assigned task (`agent.taskId`).
**Gap:** No ranked inbox endpoint or work-selection strategy.
**Recommendation:** Introduce `/agents/:id/inbox-lite` equivalent and priority resolver in heartbeat scheduler.
**Files Affected:** `packages/core/src/agent-store.ts`, `packages/dashboard/src/routes.ts`, `packages/engine/src/agent-heartbeat.ts`, `packages/engine/src/scheduler.ts`
### 4) Blocked-task dedup
**Status:** MISSING
**Description:** Avoid repeated blocked updates unless new context appears.
**Current State:** No built-in dedup against last blocked comment + comment cursor.
**Gap:** Repetitive blocked churn is possible.
**Recommendation:** Store last-blocked-comment metadata per task/agent and gate repeated updates.
**Files Affected:** `packages/core/src/store.ts`, `packages/engine/src/agent-heartbeat.ts`
### 5) Wake context (`PAPERCLIP_*` parity)
**Status:** PARTIAL
**Description:** Runs carry trigger reason, task/comment/approval context.
**Current State:** `contextSnapshot` includes wake reason/trigger detail/taskId in run APIs.
**Gap:** No structured comment-trigger and approval-resolution context model.
**Recommendation:** Formalize wake context schema in `AgentHeartbeatRun.contextSnapshot` and propagate to prompts/tools.
**Files Affected:** `packages/core/src/types.ts`, `packages/engine/src/agent-heartbeat.ts`, `packages/dashboard/src/routes.ts`
### 6) Communication model (comments, mentions, link style)
**Status:** PARTIAL
**Description:** Paperclip uses issue comments, mention-driven wakes, and strict ticket-link markdown conventions.
**Current State:** Fusion has task comments and message inbox/outbox APIs.
**Gap:** No mention-to-wake semantics in task comments; no enforced link formatting conventions.
**Recommendation:** Add mention parser and optional markdown linting for task comment references.
**Files Affected:** `packages/core/src/message-store.ts`, `packages/core/src/store.ts`, `packages/dashboard/src/routes.ts`, `packages/engine/src/agent-heartbeat.ts`
### 7) Delegation model (`parentId`, `goalId`, workspace inheritance)
**Status:** PARTIAL
**Description:** Delegation creates structured child/follow-up issues preserving goal/workspace lineage.
**Current State:** Fusion supports `spawn_agent` and `task_create` with dependencies.
**Gap:** No explicit parent/goal fields or non-child workspace inheritance marker.
**Recommendation:** Extend task schema with optional parent/goal/workspace-link fields and expose in creation APIs.
**Files Affected:** `packages/core/src/types.ts`, `packages/core/src/store.ts`, `packages/engine/src/agent-tools.ts`, `packages/dashboard/src/routes.ts`
### 8) Chain of command escalation
**Status:** PARTIAL
**Description:** Escalation follows explicit `chainOfCommand`.
**Current State:** `reportsTo` relationship exists with child lookup route.
**Gap:** No computed chain traversal/escalation helper in runtime policies.
**Recommendation:** Add `resolveChainOfCommand(agentId)` utility and escalation tool usage pattern in heartbeat instructions.
**Files Affected:** `packages/core/src/agent-store.ts`, `packages/engine/src/agent-heartbeat.ts`, `packages/dashboard/src/routes.ts`
### 9) Budget management
**Status:** MISSING
**Description:** Budget controls (80% focus narrowing, 100% auto-pause).
**Current State:** Token usage totals are tracked, but no budget thresholds/policies exist.
**Gap:** No budget envelope or policy enforcement.
**Recommendation:** Add budget config to agent schema and gate trigger scheduler/execution when budget thresholds are crossed.
**Files Affected:** `packages/core/src/types.ts`, `packages/core/src/agent-store.ts`, `packages/engine/src/agent-heartbeat.ts`, `packages/dashboard/src/routes.ts`
### 10) Routines
**Status:** PARTIAL
**Description:** Recurring task triggers integrated with agent inbox pickup and routine policies.
**Current State:** Fusion automations support cron-like scheduling and manual runs.
**Gap:** No routine-to-agent-assignment model with dedicated catch-up/concurrency policy vocabulary.
**Recommendation:** Either map routines onto automation primitives with explicit policy fields or add dedicated routine entities.
**Files Affected:** `packages/core` (automation domain), `packages/engine` (trigger integration), `packages/dashboard/src/routes.ts`
### 11) Planning mode document revisions
**Status:** PARTIAL
**Description:** Plan documents keyed by identifier with revision history.
**Current State:** Planning sessions and summaries exist; task prompt persists spec text.
**Gap:** No key-based issue document API with base-revision concurrency control.
**Recommendation:** Add per-task document store (`plan`, etc.) and revision endpoints.
**Files Affected:** `packages/core/src/store.ts`, `packages/core/src/types.ts`, `packages/dashboard/src/routes.ts`
### 12) Approval workflows
**Status:** PARTIAL
**Description:** Approval entities linked to issues, reviewed first on wake.
**Current State:** Planned tasks can require manual approval (`awaiting-approval` + approve/reject routes).
**Gap:** No standalone approval objects with linked issue resolution metadata.
**Recommendation:** Add optional approval domain only if needed beyond existing planning approval.
**Files Affected:** `packages/engine/src/planning.ts`, `packages/dashboard/src/routes.ts`, `packages/core/src/types.ts`
### 13) Self-assignment constraints
**Status:** MISSING
**Description:** Self-assignment allowed only for explicit mention handoff context.
**Current State:** Explicit task assignment exists (`PATCH /tasks/:id/assign`) without mention-gated policy.
**Gap:** Ownership can be changed without mention-driven context checks.
**Recommendation:** Add policy checks in assignment route/runtime for mention-handoff mode when agent-initiated.
**Files Affected:** `packages/dashboard/src/routes.ts`, `packages/core/src/store.ts`, `packages/engine/src/agent-heartbeat.ts`
### 14) Status value parity
**Status:** PARTIAL
**Description:** Paperclip issue statuses differ from Fusions board columns/status fields.
**Current State:** Fusion has columns (`planning`, `todo`, `in-progress`, `in-review`, `done`, `archived`) and ad-hoc task status strings.
**Gap:** No direct `blocked/cancelled/backlog` canonical lifecycle.
**Recommendation:** Decide whether to add a normalized execution status enum alongside board columns.
**Files Affected:** `packages/core/src/types.ts`, `packages/core/src/store.ts`, `packages/dashboard/src/routes.ts`, `packages/engine/src/scheduler.ts`
### 15) Error-handling policy rules
**Status:** PARTIAL
**Description:** Paperclip enforces checkout-first, mandatory heartbeat comments, and cross-team cancellation restrictions.
**Current State:** Fusion tracks run failures and transitions states robustly.
**Gap:** Governance rules are not codified as hard guards.
**Recommendation:** Add policy middleware in heartbeat execution and task mutation routes.
**Files Affected:** `packages/engine/src/agent-heartbeat.ts`, `packages/dashboard/src/routes.ts`, `packages/core/src/store.ts`
### 16) Issue search across comments
**Status:** MISSING
**Description:** Full-text search over title/identifier/description/comments.
**Current State:** Task list endpoint supports pagination; no query search parameter.
**Gap:** No index-backed search route covering comments.
**Recommendation:** Add SQLite FTS index (or equivalent) for task/comment fields and `q=` API.
**Files Affected:** `packages/core/src/store.ts`, `packages/dashboard/src/routes.ts`
### 17) Attachments API
**Status:** IMPLEMENTED
**Description:** Upload/list/get/delete artifact attachments per work item.
**Current State:** Fusion supports attachment upload, retrieval, listing, and deletion for tasks.
**Gap:** Endpoint shape differs from Paperclip, but core capability exists.
**Recommendation:** Keep as-is unless external API parity is required.
**Files Affected:** `packages/dashboard/src/routes.ts`, `packages/core/src/store.ts`
### 18) Agent identity (`GET /me`, role, budget)
**Status:** PARTIAL
**Description:** Single identity endpoint returns effective role, company scope, budget, chain-of-command metadata.
**Current State:** Fusion provides `GET /agents/:id` and list endpoints; role/state metadata exists.
**Gap:** No canonical `/agents/me` and no company/budget identity payload.
**Recommendation:** Add authenticated `/agents/me` route and extend identity model if budget features are adopted.
**Files Affected:** `packages/dashboard/src/routes.ts`, `packages/core/src/types.ts`
### 19) Run audit trail mutation header parity
**Status:** MISSING
**Description:** Every mutating action should be tied to current run identity for auditability.
**Current State:** Run IDs are persisted for heartbeats, but mutation APIs do not require run-scoped correlation headers.
**Gap:** Hard to trace all side effects to one heartbeat transaction.
**Recommendation:** Add optional/required run-correlation metadata for agent-initiated mutations.
**Files Affected:** `packages/dashboard/src/routes.ts`, `packages/core/src/store.ts`, `packages/engine/src/agent-heartbeat.ts`
### 20) Commit co-author governance
**Status:** NOT APPLICABLE
**Description:** Paperclip requires a specific co-author line in git commits.
**Current State:** Fusion enforces task ID commit conventions.
**Gap:** Governance mismatch is intentional.
**Recommendation:** No action unless product policy changes.
**Files Affected:** None
### 21) Company-prefixed ticket-link conventions
**Status:** MISSING
**Description:** All ticket references should be markdown links with company prefix paths.
**Current State:** No automatic formatting/linting of task comment references.
**Gap:** Linking behavior is user-dependent and inconsistent.
**Recommendation:** Add optional comment formatter/linter for task/agent outputs.
**Files Affected:** `packages/dashboard/src/routes.ts`, `packages/engine/src/agent-heartbeat.ts`
### 22) OpenClaw invite workflow
**Status:** NOT APPLICABLE
**Description:** CEO-only OpenClaw invite prompt generation and approval.
**Current State:** Not part of Fusions domain model.
**Gap:** Out of product scope.
**Recommendation:** None.
**Files Affected:** None
### 23) Company skills workflow parity
**Status:** NOT APPLICABLE
**Description:** Company skill import/scan/sync APIs.
**Current State:** Fusion has local skill references/instructions, not Paperclip company skill registry APIs.
**Gap:** Different product boundaries.
**Recommendation:** None (unless Fusion adopts company-level skill governance).
**Files Affected:** None
### 24) Instructions-path dedicated endpoint parity
**Status:** PARTIAL
**Description:** Dedicated endpoint to update only instruction file path.
**Current State:** Fusion supports generic instruction updates on `/agents/:id/instructions` and full patch route.
**Gap:** No endpoint-level parity with adapter-key semantics.
**Recommendation:** Add alias route only if external parity/testing needs it.
**Files Affected:** `packages/dashboard/src/routes.ts`
### 25) Send-back-to-user handoff
**Status:** MISSING
**Description:** Explicit handoff from agent back to requesting user (`in_review`, assigneeUserId).
**Current State:** Task assignment supports `assignedAgentId` only.
**Gap:** No user assignee field or handoff policy.
**Recommendation:** Add user-assignment fields and route support for review handoff workflows.
**Files Affected:** `packages/core/src/types.ts`, `packages/core/src/store.ts`, `packages/dashboard/src/routes.ts`, `packages/engine/src/agent-heartbeat.ts`
## Recommended Implementation Order
1. **Ownership foundation:** implement checkout/release semantics and conflict handling (409 no-retry rule).
2. **Work selection foundation:** add inbox-lite endpoint + deterministic prioritization + wake-context schema upgrades.
3. **Policy layer:** blocked-task dedup, self-assignment mention guardrails, and run-audit correlation metadata.
4. **Communication layer:** mention-triggered wake routing and ticket-link formatting helpers.
5. **Escalation and governance:** chain-of-command runtime helpers + budget thresholds/auto-pause behavior.
6. **Workflow parity upgrades:** planning document revisions + richer approval entities (if needed beyond current `awaiting-approval`).
7. **Search and UX parity:** full-text issue/task search and optional `/agents/me` identity endpoint.
8. **Deferred/optional parity:** instructions-path alias route and any Paperclip-specific API-shape harmonization.
## Existing Related Tasks
- **FN-1085 (end-to-end agent review):** General agent behavior consistency and bug fixes; relevant umbrella but not a direct replacement for checkout/inbox/budget features.
- **FN-1096 / FN-1098 / FN-1099 (task-agent assignment):** Foundational for checkout/inbox ownership semantics. New work should depend on these conventions rather than redefine assignment.
- **FN-1119 (agent API keys):** Covers auth substrate useful for any future `/agents/me` and run-audit identity policies.
- **FN-1122 (agent permissions):** Relevant for self-assignment restrictions, checkout authorization, and escalation actions.
- **FN-1164 / FN-1165 / FN-1167 (org chart / chain of command):** Direct overlap with escalation-chain gap; avoid duplicate hierarchy modeling.
- **FN-1170 / FN-1172 / FN-1173 (agent instructions):** Overlaps with instructions-path parity and prompt-policy rollout.
- **FN-1181 / FN-1182 / FN-1183 (agent self-reflection):** Can complement blocked dedup and policy-aware heartbeat decisions.
- **FN-1184 / FN-1185 / FN-1186 / FN-1187 (agent performance ratings):** Useful dependency/input for budget-governance and execution throttling logic.