- 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
22 KiB
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. Paperclip’s 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 Fusion’s 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 Fusion’s 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
- Ownership foundation: implement checkout/release semantics and conflict handling (409 no-retry rule).
- Work selection foundation: add inbox-lite endpoint + deterministic prioritization + wake-context schema upgrades.
- Policy layer: blocked-task dedup, self-assignment mention guardrails, and run-audit correlation metadata.
- Communication layer: mention-triggered wake routing and ticket-link formatting helpers.
- Escalation and governance: chain-of-command runtime helpers + budget thresholds/auto-pause behavior.
- Workflow parity upgrades: planning document revisions + richer approval entities (if needed beyond current
awaiting-approval). - Search and UX parity: full-text issue/task search and optional
/agents/meidentity endpoint. - 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/meand 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.