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
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
[← Back to repository root](../README.md)
|
||||
|
||||
Fusion is an AI-orchestrated task board that turns ideas into reviewed, merged code using a structured workflow: **triage → todo → in-progress → in-review → done**.
|
||||
Fusion is an AI-orchestrated task board that turns ideas into reviewed, merged code using a structured workflow: **planning → todo → in-progress → in-review → done**.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -151,10 +151,10 @@ Recommended priority: first add ownership/inbox primitives (checkout + inbox-lit
|
||||
### 12) Approval workflows
|
||||
**Status:** PARTIAL
|
||||
**Description:** Approval entities linked to issues, reviewed first on wake.
|
||||
**Current State:** Triaged specs can require manual approval (`awaiting-approval` + approve/reject routes).
|
||||
**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 triage-plan approval.
|
||||
**Files Affected:** `packages/engine/src/triage.ts`, `packages/dashboard/src/routes.ts`, `packages/core/src/types.ts`
|
||||
**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
|
||||
@@ -167,7 +167,7 @@ Recommended priority: first add ownership/inbox primitives (checkout + inbox-lit
|
||||
### 14) Status value parity
|
||||
**Status:** PARTIAL
|
||||
**Description:** Paperclip issue statuses differ from Fusion’s board columns/status fields.
|
||||
**Current State:** Fusion has columns (`triage`, `todo`, `in-progress`, `in-review`, `done`, `archived`) and ad-hoc task status strings.
|
||||
**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`
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[← Docs index](./README.md)
|
||||
|
||||
Fusion uses multiple agent roles for triage, execution, review, and merge workflows.
|
||||
Fusion uses multiple agent roles for planning, execution, review, and merge workflows.
|
||||
|
||||
## Agent Field Parity Matrix
|
||||
|
||||
@@ -64,7 +64,7 @@ The `taskId` field is suppressed in API responses when the linked task is in a t
|
||||
- `GET /api/agents/stats` — `assignedTaskCount` excludes agents with terminal linked tasks
|
||||
|
||||
**Non-terminal task statuses (taskId is preserved):**
|
||||
- `triage`
|
||||
- `planning`
|
||||
- `todo`
|
||||
- `in-progress`
|
||||
- `in-review`
|
||||
@@ -126,12 +126,12 @@ Agent deletion is available from both the detail header lifecycle controls and t
|
||||
Fusion includes built-in templates for role prompts:
|
||||
|
||||
- `default-executor`
|
||||
- `default-triage`
|
||||
- `default-planning`
|
||||
- `default-reviewer`
|
||||
- `default-merger`
|
||||
- `senior-engineer`
|
||||
- `strict-reviewer`
|
||||
- `concise-triage`
|
||||
- `concise-planning`
|
||||
|
||||
These can be assigned per role using `agentPrompts.roleAssignments`.
|
||||
|
||||
@@ -235,7 +235,7 @@ agent-presets/
|
||||
├── designer/soul.md
|
||||
├── marketing-manager/soul.md
|
||||
├── technical-writer/soul.md
|
||||
├── triage/soul.md
|
||||
├── planning/soul.md
|
||||
└── reviewer/soul.md
|
||||
```
|
||||
|
||||
@@ -302,11 +302,11 @@ The **Prompts** section in the Settings modal provides a user-friendly interface
|
||||
| `executor-guardrails` | executor | Behavioral guardrails and constraints |
|
||||
| `executor-spawning` | executor | Instructions for spawning child agents |
|
||||
| `executor-completion` | executor | Completion criteria and signaling |
|
||||
| `triage-welcome` | triage | Introductory section for the triage/specification agent |
|
||||
| `triage-context` | triage | Context-gathering instructions |
|
||||
| `triage-welcome` | planning | Introductory section for the planning agent |
|
||||
| `triage-context` | planning | Context-gathering instructions |
|
||||
| `reviewer-verdict` | reviewer | Verdict criteria and format |
|
||||
| `merger-conflicts` | merger | Merge conflict resolution instructions |
|
||||
| `agent-generation-system` | — | System prompt for AI-assisted agent specification generation |
|
||||
| `agent-generation-system` | — | System prompt for AI-assisted agent plan generation |
|
||||
| `workflow-step-refine` | — | System prompt for refining workflow step descriptions |
|
||||
|
||||
### How It Works
|
||||
@@ -433,7 +433,7 @@ Heartbeat runs from the Agents panel run on a **separate control-plane lane** th
|
||||
|
||||
| Component | Path | Concurrency |
|
||||
|-----------|------|------------|
|
||||
| TriageProcessor | Task lane | Semaphore-gated |
|
||||
| PlanningProcessor | Task lane | Semaphore-gated |
|
||||
| TaskExecutor | Task lane | Semaphore-gated |
|
||||
| Scheduler | Task lane | Semaphore-gated |
|
||||
| onMerge | Task lane | Semaphore-gated |
|
||||
|
||||
@@ -8,7 +8,7 @@ This document describes the actual architecture of Fusion as implemented in this
|
||||
|
||||
## 1) Overview
|
||||
|
||||
Fusion is an AI-orchestrated task board. It takes tasks through a structured lifecycle (`triage → todo → in-progress → in-review → done → archived`) and automates triage, execution, review, merge, and operational recovery.
|
||||
Fusion is an AI-orchestrated task board. It takes tasks through a structured lifecycle (`planning → todo → in-progress → in-review → done → archived`) and automates planning, execution, review, merge, and operational recovery.
|
||||
|
||||
At a high level, Fusion is split into:
|
||||
- **Core domain + persistence** (`@fusion/core`)
|
||||
@@ -37,7 +37,7 @@ At a high level, Fusion is split into:
|
||||
│ │
|
||||
┌────────▼───────────────────────▼───────┐
|
||||
│ Engine Runtime │
|
||||
│ Scheduler / Triage / Executor / Merger │
|
||||
│ Scheduler / Planning / Executor / Merger │
|
||||
│ Heartbeat / Self-healing / Autopilot │
|
||||
└────────┬───────────────────────┬────────┘
|
||||
│ │
|
||||
@@ -61,7 +61,7 @@ At a high level, Fusion is split into:
|
||||
| Package | Published | Role | Key files |
|
||||
|---|---|---|---|
|
||||
| `@fusion/core` | Private | Domain model, stores, SQLite adapters, settings, shared types | `packages/core/src/types.ts`, `store.ts`, `db.ts`, `central-core.ts`, `agent-store.ts` |
|
||||
| `@fusion/engine` | Private | AI orchestration runtime (triage, scheduler, executor, merger, recovery) | `packages/engine/src/triage.ts`, `scheduler.ts`, `executor.ts`, `merger.ts`, `project-runtime.ts` |
|
||||
| `@fusion/engine` | Private | AI orchestration runtime (planning, scheduler, executor, merger, recovery) | planning processor, `scheduler.ts`, `executor.ts`, `merger.ts`, `project-runtime.ts` |
|
||||
| `@fusion/dashboard` | Private | Express API server + React app | `packages/dashboard/src/server.ts`, `routes.ts`, `sse.ts`, `websocket.ts`, `packages/dashboard/app/App.tsx` |
|
||||
| `@runfusion/fusion` | **Published** | CLI binary (`fn`) + Pi extension | `packages/cli/src/bin.ts`, `commands/*`, `project-resolver.ts`, `extension.ts` |
|
||||
| `@fusion/desktop` | Private | Electron shell around Fusion dashboard/client | `packages/desktop/src/main.ts`, `ipc.ts`, `preload.ts`, `scripts/build.ts` |
|
||||
@@ -284,7 +284,7 @@ The QMD backend (`qmd`) delegates read/write I/O to the file backend and schedul
|
||||
**Dashboard API:**
|
||||
- `GET /api/memory/backend` — Returns current backend status and capabilities
|
||||
|
||||
See [Memory Plugin Contract](./memory-plugin-contract.md) for the full specification.
|
||||
See [Memory Plugin Contract](./memory-plugin-contract.md) for the full plan.
|
||||
|
||||
---
|
||||
|
||||
@@ -293,7 +293,7 @@ See [Memory Plugin Contract](./memory-plugin-contract.md) for the full specifica
|
||||
`@fusion/engine` executes the autonomous workflow.
|
||||
|
||||
### Agent roles
|
||||
- **Triage**: `TriageProcessor` (`triage.ts`) generates task specs (`PROMPT.md`) and selects eligible triage tasks by priority first, then FIFO (`createdAt` ascending) within each priority tier.
|
||||
- **Planning**: the planning processor generates task plans (`PROMPT.md`) and selects eligible planning tasks by priority first, then FIFO (`createdAt` ascending) within each priority tier.
|
||||
- **Executor**: `TaskExecutor` (`executor.ts`) implements tasks in worktrees
|
||||
- **Reviewer**: `reviewStep()` (`reviewer.ts`) performs plan/code reviews
|
||||
- **Merger**: `aiMergeTask()` (`merger.ts`) merges approved work
|
||||
@@ -596,14 +596,14 @@ Some data remains intentionally filesystem-based:
|
||||
## 9) Task Lifecycle
|
||||
|
||||
Lifecycle constants are defined in `packages/core/src/types.ts`:
|
||||
- Columns: `triage`, `todo`, `in-progress`, `in-review`, `done`, `archived`
|
||||
- Columns: `planning`, `todo`, `in-progress`, `in-review`, `done`, `archived`
|
||||
- Transition rules via `VALID_TRANSITIONS`
|
||||
|
||||
### Lifecycle flow
|
||||
|
||||
```text
|
||||
triage
|
||||
│ (TriageProcessor writes PROMPT.md)
|
||||
planning
|
||||
│ (Planning processor writes PROMPT.md)
|
||||
▼
|
||||
todo
|
||||
│ (Scheduler selects task, dependencies satisfied)
|
||||
@@ -620,7 +620,7 @@ done
|
||||
```
|
||||
|
||||
### Execution detail
|
||||
- **Triage phase**: `TriageProcessor` generates executable spec
|
||||
- **Planning phase**: the planning processor generates an executable plan
|
||||
- **Execution phase**: `TaskExecutor` performs implementation, tool calls, tests/build commands
|
||||
- **Review phase**: optional `reviewStep()` workflow depending on prompt review level (bypassed in fast mode)
|
||||
- **Merge phase**: `aiMergeTask()` handles merge strategy and post-merge workflow steps
|
||||
@@ -641,7 +641,7 @@ Task steps use statuses: `pending`, `in-progress`, `done`, `skipped`.
|
||||
|
||||
Fusion has two complementary agent models:
|
||||
|
||||
1. **Task pipeline agents** (triage/executor/reviewer/merger) managed by engine runtime
|
||||
1. **Task pipeline agents** (planning/executor/reviewer/merger) managed by engine runtime
|
||||
2. **Persistent registered agents** managed by `AgentStore`
|
||||
|
||||
### Persistent agent storage
|
||||
|
||||
@@ -71,7 +71,7 @@ fn dashboard --dev
|
||||
| `--no-auth` | Disable bearer-token auth. Not recommended when binding to `0.0.0.0`. |
|
||||
| `--paused` | Start with the engine paused (automation disabled). |
|
||||
| `--interactive` | Interactive port selection. |
|
||||
| `--dev` | Start dashboard only (no AI engine, no triage/scheduler). |
|
||||
| `--dev` | Start dashboard only (no AI engine, no planning/scheduler). |
|
||||
|
||||
### Interactive Terminal UI (TTY Mode)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ pnpm build
|
||||
|---|---|
|
||||
| `@fusion/core` | Shared domain types, stores, persistence, and core utilities |
|
||||
| `@fusion/dashboard` | Express API + React UI (including dashboard TUI in CLI) |
|
||||
| `@fusion/engine` | Scheduling, triage, execution, merge orchestration |
|
||||
| `@fusion/engine` | Scheduling, planning, execution, merge orchestration |
|
||||
| `@fusion/desktop` | Electron shell around Fusion dashboard/client |
|
||||
| `@fusion/mobile` | Capacitor + PWA mobile packaging |
|
||||
| `@fusion/plugin-sdk` | Plugin SDK for building Fusion extensions |
|
||||
|
||||
@@ -37,7 +37,7 @@ Method used:
|
||||
| dashboard | 8 | `mission-routes.ts`, `script-store.ts`, `subtask-breakdown.ts`, `terminal.ts`, `plugins/{network,splash-screen,status-bar}.ts`, `test-request.ts` |
|
||||
| cli | 4 | `commands/settings-export.ts`, `commands/settings-import.ts`, `companies-sh-parser.ts`, `runtime/native-patch.ts` |
|
||||
|
||||
### Finding 2.2 — Risk triage for key backend files
|
||||
### Finding 2.2 — Risk review for key backend files
|
||||
|
||||
- **High**
|
||||
- `packages/dashboard/src/subtask-breakdown.ts` — AI/session orchestration and persistence interactions; only route-level behavior is exercised.
|
||||
|
||||
@@ -191,7 +191,7 @@ You can create tasks from the board or CLI.
|
||||
|
||||
1. Type a short request in the quick entry input.
|
||||
2. Press Enter.
|
||||
3. Task appears in **Triage** and the triage agent generates `PROMPT.md`.
|
||||
3. Task appears in **Planning** and the planning agent generates `PROMPT.md`.
|
||||
|
||||
### Option B: Plan Mode (Board)
|
||||
|
||||
@@ -231,8 +231,8 @@ fn task plan "Implement role-based access control"
|
||||
|
||||
Fusion uses six columns:
|
||||
|
||||
1. **Triage** — raw idea; AI writes spec
|
||||
2. **Todo** — specified and queued
|
||||
1. **Planning** — raw idea; AI writes plan
|
||||
2. **Todo** — planned and queued
|
||||
3. **In Progress** — executor implements in a dedicated worktree
|
||||
4. **In Review** — implementation complete, awaiting merge/finalization
|
||||
5. **Done** — merged and complete
|
||||
|
||||
@@ -55,7 +55,7 @@ Fusion currently has two related but distinct memory systems:
|
||||
| `readProjectMemoryWithBackend()` | Backend-aware read helper |
|
||||
| `searchProjectMemory()`, `getProjectMemory()` | Backend-aware search/get wrappers |
|
||||
| `resolveMemoryInstructionContext()` | Backend-aware instruction context |
|
||||
| `buildTriageMemoryInstructions()` | Triage prompt memory instructions |
|
||||
| Planning instruction builder | Planning prompt memory instructions |
|
||||
| `buildExecutionMemoryInstructions()` | Executor prompt memory instructions |
|
||||
| `buildReviewerMemoryInstructions()` | Reviewer prompt memory instructions |
|
||||
| `readProjectMemory()` | Direct canonical long-term file read |
|
||||
@@ -319,10 +319,10 @@ Contract-critical behavior is covered by:
|
||||
- `packages/core/src/project-memory.test.ts`
|
||||
- canonical long-term path bootstrap/read behavior
|
||||
- `resolveMemoryInstructionContext()` branching
|
||||
- triage/execution/reviewer instruction generation per backend
|
||||
- planning/execution/reviewer instruction generation per backend
|
||||
- `packages/core/src/store.test.ts`
|
||||
- memory bootstrap behavior when memory is enabled/disabled and toggled
|
||||
- `packages/engine/src/triage.test.ts` and `packages/engine/src/executor.test.ts`
|
||||
- Engine planning and executor tests
|
||||
- memory instruction injection behavior by settings/backend
|
||||
|
||||
---
|
||||
|
||||
@@ -53,7 +53,7 @@ The dashboard supports mission planning workflows where you can:
|
||||
When missions are created through the interview planning workflow, Fusion automatically generates contract assertions for each feature:
|
||||
|
||||
- **Assertion text source priority**: `acceptanceCriteria` → `feature.description` → fallback text (`"Verify implementation of: {feature.title}"`)
|
||||
- **Assertions are linked to features**: Each auto-generated assertion is automatically linked to its feature, enabling mission validation rollup and enriched triage context
|
||||
- **Assertions are linked to features**: Each auto-generated assertion is automatically linked to its feature, enabling mission validation rollup and enriched planning context
|
||||
- **Verification fields**: Milestone and slice verification criteria from the interview are stored in dedicated `verification` fields rather than concatenated into descriptions
|
||||
- **Partial plans handled**: Auto-generation is robust to partial plans (missing slices/features or empty criteria) without throwing errors
|
||||
|
||||
@@ -87,13 +87,13 @@ Typical flow:
|
||||
|
||||
## `autopilotEnabled` vs `autoAdvance`
|
||||
|
||||
- **`autopilotEnabled`**: primary control for autopilot behavior — enables background monitoring, orchestration, and automatic slice activation when a slice completes. Also triggers auto-triage (converting features to tasks) when a slice is activated.
|
||||
- **`autopilotEnabled`**: primary control for autopilot behavior — enables background monitoring, orchestration, and automatic slice activation when a slice completes. Also triggers auto-planning (converting features to tasks) when a slice is activated.
|
||||
- **`autoAdvance`**: legacy fallback for backward compatibility with existing mission data. Kept for compatibility — new missions should use `autopilotEnabled`.
|
||||
|
||||
**Auto-triage behavior:**
|
||||
**Auto-planning behavior:**
|
||||
|
||||
- `autopilotEnabled=true` → features in activated slices are automatically triaged (converted to tasks)
|
||||
- `autopilotEnabled=false`, `autoAdvance=true` → features are triaged (legacy compat)
|
||||
- `autopilotEnabled=true` → features in activated slices are automatically planned (converted to tasks)
|
||||
- `autopilotEnabled=false`, `autoAdvance=true` → features are planned (legacy compat)
|
||||
- `autopilotEnabled=false`, `autoAdvance=false` → manual slice activation only
|
||||
|
||||
**Slice progression (on slice completion):**
|
||||
@@ -144,7 +144,7 @@ interface MissionContractAssertion {
|
||||
id: string; // e.g., "CA-A3B7CD-E9F2"
|
||||
milestoneId: string; // Parent milestone
|
||||
title: string; // Human-readable title
|
||||
assertion: string; // Behavioral specification
|
||||
assertion: string; // Behavioral plan
|
||||
status: AssertionStatus; // pending | passed | failed | blocked
|
||||
orderIndex: number; // Sort order within milestone
|
||||
featureIds: string[]; // Linked features (many-to-many)
|
||||
@@ -246,7 +246,7 @@ interface MissionFixFeatureLineage {
|
||||
}
|
||||
```
|
||||
|
||||
The fix feature is **auto-triaged** (converted to tasks) for immediate execution. Each fix increments `implementationAttemptCount`.
|
||||
The fix feature is **auto-planned** (converted to tasks) for immediate execution. Each fix increments `implementationAttemptCount`.
|
||||
|
||||
**Default retry budget:** 3 (`DEFAULT_IMPLEMENTATION_RETRY_BUDGET`). When `implementationAttemptCount >= maxRetryBudget`, the feature transitions to `blocked`.
|
||||
|
||||
@@ -291,7 +291,7 @@ These are independent tracking mechanisms — autopilot monitors mission progres
|
||||
- `inProgressCount`, `passedCount`, `failedCount`, `blockedCount`
|
||||
|
||||
**MissionEvent audit types:**
|
||||
- `slice_activated`, `feature_triaged`, `feature_completed`
|
||||
- `slice_activated`, `feature_planned`, `feature_completed`
|
||||
- `validation:started`, `validation:passed`, `validation:failed`, `validation:blocked`
|
||||
- `fix_feature:created`, `feature:blocked`
|
||||
|
||||
@@ -320,7 +320,7 @@ interface MissionAssertionFailureRecord {
|
||||
| Symptom | Diagnosis | Resolution |
|
||||
|---------|-----------|------------|
|
||||
| Feature stuck in "validating" | `activeValidations` set may be stale; engine restart needed | Check logs for validator errors; restart engine to trigger `recoverActiveMissions()` |
|
||||
| Fix feature not auto-triaging | `triageFeature()` may have errored; check logs | Manual triage via `fn mission triage-feature <id>`; investigate `triageFeature()` errors |
|
||||
| Fix feature not auto-planning | `planFeature()` may have errored; check logs | Manual planning via `fn mission plan-feature <id>`; investigate `planFeature()` errors |
|
||||
| Budget exhaustion loop | `implementationAttemptCount >= maxRetryBudget` (default: 3) | Increase `maxRetryBudget` in mission settings or fix root cause |
|
||||
| Blocked mission not advancing | `MilestoneValidationRollup.state` shows `blocked` | Identify blocked assertions; operator must resolve root cause |
|
||||
| Validation agent errors | AI session creation failed or `VALIDATION_TIMEOUT_MS` (10 min) exceeded | Check model configuration and logs; verify AI provider auth |
|
||||
|
||||
@@ -51,8 +51,8 @@ Defaults from `DEFAULT_GLOBAL_SETTINGS`; key scope from `GLOBAL_SETTINGS_KEYS`.
|
||||
| `modelOnboardingComplete` | `boolean` | `undefined` | Whether AI onboarding has been completed or dismissed. |
|
||||
| `executionGlobalProvider` | `string` | `undefined` | Global baseline provider for task execution. Project `executionProvider` overrides this. |
|
||||
| `executionGlobalModelId` | `string` | `undefined` | Global baseline model ID for task execution. |
|
||||
| `planningGlobalProvider` | `string` | `undefined` | Global baseline provider for planning/triage. Project `planningProvider` overrides this. |
|
||||
| `planningGlobalModelId` | `string` | `undefined` | Global baseline model ID for planning/triage. |
|
||||
| `planningGlobalProvider` | `string` | `undefined` | Global baseline provider for planning. Project `planningProvider` overrides this. |
|
||||
| `planningGlobalModelId` | `string` | `undefined` | Global baseline model ID for planning. |
|
||||
| `validatorGlobalProvider` | `string` | `undefined` | Global baseline provider for validator/reviewer runs. Project `validatorProvider` overrides this. |
|
||||
| `validatorGlobalModelId` | `string` | `undefined` | Global baseline model ID for validator/reviewer runs. |
|
||||
| `titleSummarizerGlobalProvider` | `string` | `undefined` | Global baseline provider for title summarization. Project `titleSummarizerProvider` overrides this. |
|
||||
@@ -78,8 +78,8 @@ Defaults from `DEFAULT_PROJECT_SETTINGS`; key scope from `PROJECT_SETTINGS_KEYS`
|
||||
| `globalPause` | `boolean` | `false` | Hard stop: terminate active engine sessions and pause scheduling immediately. |
|
||||
| `globalPauseReason` | `string` | `undefined` | Optional reason for `globalPause` (`"rate-limit"` for automatic pauses, `"manual"` for user-triggered pauses). Cleared on unpause. |
|
||||
| `enginePaused` | `boolean` | `false` | Soft pause: stop dispatching new work while letting active sessions finish. |
|
||||
| `maxConcurrent` | `number` | `2` | Max concurrent task-lane AI agents (triage, executor, merge). |
|
||||
| `maxTriageConcurrent` | `number` | `2` | Max concurrent triage/specification agents. |
|
||||
| `maxConcurrent` | `number` | `2` | Max concurrent task-lane AI agents (planning, executor, merge). |
|
||||
| `maxTriageConcurrent` | `number` | `2` | Max concurrent planning agents. |
|
||||
| `globalMaxConcurrent` | `number` | `4` | System-wide max concurrent agents across all projects. |
|
||||
| `maxWorktrees` | `number` | `4` | Max git worktrees. |
|
||||
| `pollIntervalMs` | `number` | `15000` | Scheduler poll interval (ms). |
|
||||
@@ -100,10 +100,10 @@ Defaults from `DEFAULT_PROJECT_SETTINGS`; key scope from `PROJECT_SETTINGS_KEYS`
|
||||
| `commitAuthorEnabled` | `boolean` | `true` | Apply explicit `--author` attribution on Fusion commits. |
|
||||
| `commitAuthorName` | `string` | `"Fusion"` | Commit author name when `commitAuthorEnabled` is true. |
|
||||
| `commitAuthorEmail` | `string` | `"noreply@runfusion.ai"` | Commit author email when `commitAuthorEnabled` is true. |
|
||||
| `planningProvider` | `string` | `undefined` | Provider for planning/triage agents. |
|
||||
| `planningModelId` | `string` | `undefined` | Model ID for planning/triage agents. |
|
||||
| `planningFallbackProvider` | `string` | `undefined` | Fallback provider for planning/triage. |
|
||||
| `planningFallbackModelId` | `string` | `undefined` | Fallback model ID for planning/triage. |
|
||||
| `planningProvider` | `string` | `undefined` | Provider for planning agents. |
|
||||
| `planningModelId` | `string` | `undefined` | Model ID for planning agents. |
|
||||
| `planningFallbackProvider` | `string` | `undefined` | Fallback provider for planning. |
|
||||
| `planningFallbackModelId` | `string` | `undefined` | Fallback model ID for planning. |
|
||||
| `defaultProviderOverride` | `string` | `undefined` | Project-level override for global default provider baseline. |
|
||||
| `defaultModelIdOverride` | `string` | `undefined` | Project-level override for global default model baseline. |
|
||||
| `executionProvider` | `string` | `undefined` | Provider for task execution agents. |
|
||||
@@ -121,8 +121,8 @@ Defaults from `DEFAULT_PROJECT_SETTINGS`; key scope from `PROJECT_SETTINGS_KEYS`
|
||||
| `buildRetryCount` | `number` | `0` | Build retry attempts during merge. |
|
||||
| `verificationFixRetries` | `number` | `3` | Auto-fix retry attempts when verification fails during merge. |
|
||||
| `buildTimeoutMs` | `number` | `300000` | Build timeout in milliseconds (5 minutes). |
|
||||
| `requirePlanApproval` | `boolean` | `false` | Require manual approval before triage → todo. |
|
||||
| `specStalenessEnabled` | `boolean` | `false` | Enforce automatic re-triage for stale specs. |
|
||||
| `requirePlanApproval` | `boolean` | `false` | Require manual approval before planning → todo. |
|
||||
| `specStalenessEnabled` | `boolean` | `false` | Enforce automatic re-planning for stale plans. |
|
||||
| `specStalenessMaxAgeMs` | `number` | `21600000` | Spec staleness threshold in ms (6 hours). |
|
||||
| `taskStuckTimeoutMs` | `number` | `undefined` | Inactivity timeout for stuck-task recovery. |
|
||||
| `aiSessionTtlMs` | `number` | `604800000` | TTL in ms for persisted planning/subtask/mission sessions (7 days). |
|
||||
@@ -268,7 +268,7 @@ Short-lived token bounds are enforced server-side:
|
||||
|
||||
Fusion uses a dual-scope model settings system with five lanes. Global settings provide baseline defaults, and project settings provide per-project overrides.
|
||||
|
||||
### Triage/specification model
|
||||
### Planning model
|
||||
|
||||
1. Per-task `planningModelProvider` + `planningModelId`
|
||||
2. Project `planningProvider` + `planningModelId`
|
||||
@@ -442,11 +442,11 @@ Fusion supports fine-grained customization of AI agent prompts through the `prom
|
||||
| `executor-guardrails` | executor | Behavioral guardrails and constraints |
|
||||
| `executor-spawning` | executor | Instructions for spawning child agents |
|
||||
| `executor-completion` | executor | Completion criteria and signaling |
|
||||
| `triage-welcome` | triage | Introductory section for the triage/specification agent |
|
||||
| `triage-context` | triage | Context-gathering instructions |
|
||||
| `triage-welcome` | planning | Introductory section for the planning agent |
|
||||
| `triage-context` | planning | Context-gathering instructions |
|
||||
| `reviewer-verdict` | reviewer | Verdict criteria and format |
|
||||
| `merger-conflicts` | merger | Merge conflict resolution instructions |
|
||||
| `agent-generation-system` | — | System prompt for AI-assisted agent specification generation |
|
||||
| `agent-generation-system` | — | System prompt for AI-assisted agent plan generation |
|
||||
| `workflow-step-refine` | — | System prompt for refining workflow step descriptions into detailed agent prompts |
|
||||
|
||||
### How It Works
|
||||
@@ -485,7 +485,7 @@ To clear all overrides, set `promptOverrides` to `null`:
|
||||
"promptOverrides": {
|
||||
"executor-welcome": "Custom executor welcome message for this project...",
|
||||
"executor-guardrails": "## Custom Guardrails\n- Project-specific rules...",
|
||||
"triage-welcome": "Custom triage introduction..."
|
||||
"triage-welcome": "Custom planning introduction..."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,8 +79,8 @@ API endpoints reviewed:
|
||||
| `modelOnboardingComplete` | Global | `GET/PUT /api/settings/global` | Onboarding completion flag |
|
||||
| `executionGlobalProvider` | Global | `GET/PUT /api/settings/global` | Global baseline AI provider for task execution |
|
||||
| `executionGlobalModelId` | Global | `GET/PUT /api/settings/global` | Global baseline AI model ID for task execution |
|
||||
| `planningGlobalProvider` | Global | `GET/PUT /api/settings/global` | Global baseline AI provider for planning/triage |
|
||||
| `planningGlobalModelId` | Global | `GET/PUT /api/settings/global` | Global baseline AI model ID for planning/triage |
|
||||
| `planningGlobalProvider` | Global | `GET/PUT /api/settings/global` | Global baseline AI provider for planning |
|
||||
| `planningGlobalModelId` | Global | `GET/PUT /api/settings/global` | Global baseline AI model ID for planning |
|
||||
| `validatorGlobalProvider` | Global | `GET/PUT /api/settings/global` | Global baseline AI provider for validator/reviewer |
|
||||
| `validatorGlobalModelId` | Global | `GET/PUT /api/settings/global` | Global baseline AI model ID for validator/reviewer |
|
||||
| `titleSummarizerGlobalProvider` | Global | `GET/PUT /api/settings/global` | Global baseline AI provider for title summarization |
|
||||
|
||||
@@ -12,7 +12,7 @@ Use the inline input on board/list view:
|
||||
|
||||
- Type description
|
||||
- Press Enter
|
||||
- Task is created in `triage`
|
||||
- Task is created in `planning`
|
||||
|
||||
### 2) Plan Mode (AI interview)
|
||||
|
||||
@@ -55,7 +55,7 @@ fn task create "Bug" --attach screenshot.png --depends FN-002
|
||||
|
||||
Fusion task columns:
|
||||
|
||||
1. **triage** — idea intake; AI writes a full specification
|
||||
1. **planning** — idea intake; AI writes a full plan
|
||||
2. **todo** — ready for scheduling
|
||||
3. **in-progress** — executor active in isolated worktree
|
||||
4. **in-review** — implementation complete; awaiting finalization
|
||||
@@ -139,9 +139,9 @@ The task detail modal exposes multiple tabs:
|
||||
- **Comments** — collaboration thread + steering controls
|
||||
- **Model** — per-task model overrides and thinking level
|
||||
|
||||
## `PROMPT.md` Specification Structure
|
||||
## `PROMPT.md` Plan Structure
|
||||
|
||||
After triage, each task gets a structured `PROMPT.md` with sections like:
|
||||
After planning, each task gets a structured `PROMPT.md` with sections like:
|
||||
|
||||
- Mission
|
||||
- Dependencies
|
||||
@@ -163,7 +163,7 @@ Steering comments can be injected mid-run into active executor sessions.
|
||||
|
||||
## Refinement Tasks
|
||||
|
||||
`fn task refine <id>` creates a new triage task that depends on the original done/in-review task.
|
||||
`fn task refine <id>` creates a new planning task that depends on the original done/in-review task.
|
||||
|
||||
Example:
|
||||
|
||||
@@ -175,7 +175,7 @@ Behavior:
|
||||
|
||||
- New title format: `Refinement: <source label>`
|
||||
- New task depends on source task
|
||||
- Created in `triage`
|
||||
- Created in `planning`
|
||||
|
||||
## Archive and Restore
|
||||
|
||||
@@ -252,8 +252,8 @@ Review levels control the rigor of the review process for a task:
|
||||
| Level | Name | Description |
|
||||
|-------|------|-------------|
|
||||
| 0 | None | No review |
|
||||
| 1 | Plan Only | Review only the specification/plan |
|
||||
| 2 | Plan and Code | Review both the specification and implementation |
|
||||
| 1 | Plan Only | Review only the plan |
|
||||
| 2 | Plan and Code | Review both the plan and implementation |
|
||||
| 3 | Full | Full review with all checks |
|
||||
|
||||
Review level can be set during task creation (in the New Task dialog under More options) or when editing a task (in the task detail modal).
|
||||
|
||||
@@ -205,7 +205,7 @@ This audit acknowledges and does not duplicate the following existing backlog it
|
||||
### 3.3 Color Contrast in Status Badges
|
||||
|
||||
- **Component:** `styles.css` (34 color themes)
|
||||
- **Current behavior:** Status badge colors (triage, todo, in-progress, etc.) may have insufficient contrast with background colors in certain themes, especially light themes.
|
||||
- **Current behavior:** Status badge colors (planning, todo, in-progress, etc.) may have insufficient contrast with background colors in certain themes, especially light themes.
|
||||
- **Recommended fix:** Audit all status badge colors across all 34 themes for WCAG AA compliance (4.5:1 for text). Use darker variants of status colors in light themes. Test with accessibility tools.
|
||||
- **Impact:** Users with visual impairments may struggle to distinguish status badges.
|
||||
- **Effort estimate:** M
|
||||
|
||||
@@ -51,7 +51,7 @@ The **Frontend UX Design** template verifies visual polish and consistency with
|
||||
|
||||
## Model Overrides for Prompt Steps
|
||||
|
||||
A prompt-mode workflow step can specify its own model with:
|
||||
A prompt-mode workflow step can set its own model with:
|
||||
|
||||
- `modelProvider`
|
||||
- `modelId`
|
||||
|
||||
Reference in New Issue
Block a user