Date: 2026-04-08
Scope: packages/core, packages/engine, packages/dashboard, packages/cli, packages/desktop
- The standalone
@fusion/tuipackage has been removed. Terminal UI is implemented inpackages/cli/src/commands/dashboard-tui/using Ink (React for terminals). The dashboard-tui module provides a fully working 5-panel TUI (system, logs, utilities, stats, settings) integrated into thefn dashboardcommand and launched by default when runningfnwith no arguments.
Finding 1.2 — packages/desktop is implemented, not a placeholder (Info / correction to preflight assumption)
- Evidence:
packages/desktopcontainspackage.json,tsconfig.json,vitest.config.ts,README.md, build scripts, and substantial source files (src/main.ts,src/ipc.ts,src/menu.ts,src/tray.ts,src/preload.ts, renderer components/hooks, etc.). - Impact: The package is active code, so it should not be categorized as "dist-only placeholder".
- Existing tracking: open desktop initiative tasks FN-1070 through FN-1076 exist in task list and indicate staged desktop work; this is now better characterized as incremental feature completion, not missing package scaffolding.
- Evidence:
packages/engine/src/runtimes/in-process-runtime.ts(~500+ lines),child-process-runtime.ts(~500+ lines), andchild-process-worker.tsinclude concrete lifecycle logic, event forwarding, health monitoring, and startup/shutdown flows. - Corroboration: each has dedicated tests (
in-process-runtime.test.ts,child-process-runtime.test.ts).
- Evidence:
packages/engine/src/ipc/ipc-host.ts,ipc-protocol.ts, andipc-worker.tsimplement message contracts, correlation IDs, host/worker command handling, validation, and shutdown/error signaling. - Corroboration: dedicated tests exist (
ipc-host.test.ts,ipc-protocol.test.ts,ipc-worker.test.ts).
Method used:
- Recursive scan of
packages/{core,engine,dashboard,cli}/src/**/*.ts - Excluded
*.test.ts,*.d.ts,index.ts,types.ts,*-types.ts - Marked "missing direct test" when neither sibling
<file>.test.tsnor__tests__/<file>*.test.*exists
| Package | Missing direct test files | Notes |
|---|---|---|
| core | 1 | automation.ts (mostly type/constants) |
| engine | 3 | agent-tools.ts, github.ts, runtimes/child-process-worker.ts |
| 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 |
- High
packages/dashboard/src/subtask-breakdown.ts— AI/session orchestration and persistence interactions; only route-level behavior is exercised.packages/dashboard/src/terminal.ts— command validation + process spawning module has no tests and currently appears unused (no imports found), increasing drift risk.packages/dashboard/src/script-store.ts— file persistence logic under~/.fusion/scripts.jsonhas no direct tests.
- Medium
packages/dashboard/src/mission-routes.ts— no dedicated unit test file, but substantial endpoint coverage exists viamission-e2e.test.ts.packages/engine/src/github.ts— git remote parsing helper has no direct test despite influencing scheduler GitHub linking behavior.packages/cli/src/commands/settings-export.tsandsettings-import.ts— command handlers are routed in bin tests but lack dedicated behavior-focused tests.
- Low
packages/cli/src/companies-sh-parser.ts— thin re-export from@fusion/core(actual parser tested in core).packages/core/src/automation.ts— static type/preset definitions.- dashboard plugin wrappers (
plugins/network.ts,plugins/splash-screen.ts,plugins/status-bar.ts) andtest-request.tsutility.
packages/dashboard/src/ai-session-store.tsis not untested. It hasai-session-store.test.ts.- However, that test file currently focuses on
listActive; other methods (upsert,updateThinking,recoverStaleSessions, cleanup paths) have limited direct assertions.
- In
packages/dashboard/app, 124 source.ts/.tsxfiles were scanned. - 29 files lack direct sibling/
__tests__matches (examples:App.tsx,useAgents.ts,useFileEditor.ts,useProjectHealth.ts, several mission/node modal components). - This is informational only; deeper frontend test quality/effectiveness belongs to FN-1204.
Confirmed user-facing examples:
packages/cli/src/bin.tshelp:fn init [opts] Initialize a new kb project in the current directorypackages/cli/src/commands/init.ts:Initializing kb project...,kb project already initializedpackages/cli/src/commands/project.ts:No kb project found ...,Run 'kb init' ..., and severalUsage: kb ...linespackages/cli/src/commands/dashboard.ts: header line printskb boardpackages/cli/src/commands/task.ts: empty-state hint saysCreate one with: kb task create
Notes:
- Not all matches are inconsistencies. Strings like
KBas kilobytes, or internal user-agent tokens (kb-cli/1.0) are technical/internal. - This category is broadly covered by existing tasks FN-1163 and FN-1216.
In packages/cli/src/extension.ts:
- Tool labels use
fn: Create Task,fn: List Tasks, etc. - Parameter examples use
FN-001style IDs. - Tool names use
fn_*namespace (fn_task_create,fn_task_update, ...).
Impact:
- In-chat affordances present mixed branding (
Fusionin descriptions butKBin labels/tool names), which increases cognitive friction.
User-visible occurrences include:
packages/dashboard/app/components/PrSection.tsx:kb is creating/merging...packages/dashboard/app/components/ProjectDetectionResults.tsx:No kb database found - will be initializedpackages/dashboard/app/components/SettingsModal.tsx:These settings are shared across all your kb projects, and text describing merge behavior askbbehavior.
Many dashboard files use keys such as kb-dashboard-view-mode, kb-terminal-tabs, fn-agent-view, etc.
Assessment:
- These are not necessarily user-facing inconsistencies.
- Renaming blindly risks preference loss unless key-migration is implemented.
- Treat as migration debt, not cosmetic string cleanup.
Detected with rg -n 'catch\s*\{\s*\}' packages/*/src/:
packages/engine/src/executor.ts:944and:985- Context: best-effort
git worktree remove ... --forcecleanup during transient retry and stuck-kill requeue paths. - Risk: if cleanup fails silently, stale worktrees/branches can accumulate and complicate later retries.
- Context: best-effort
packages/dashboard/src/usage.ts:227, 511, 536, 587, 707, 1037- Context: credential file reads and PTY process kill attempts in usage collectors.
- Risk: mostly low/acceptable fallback behavior, but
catch {}on config/credential reads can hide parse corruption or permission issues and degrade diagnosability.
In packages/engine/src/executor.ts outer catch for single-session path:
- Several error paths set
status: "failed"anderrorbut do not move task out ofin-progress. - This includes failures during early lifecycle phases (e.g., worktree/session creation) before task reaches
in-review.
Impact:
- Task is no longer actively executing but remains in an execution column.
- Scheduler generally dispatches from
todo, so this can behave like a stranded/stuck state requiring manual intervention.
packages/engine/src/executor.tsregistersstore.on("task:updated", async (task) => { ... })with multiple awaited calls but no outertry/catchwrapper.- Any thrown error inside that callback can become an unhandled rejection on EventEmitter dispatch.
packages/cli/src/commands/dashboard.tshas async settings listeners; one callback awaitsstuckTaskDetector.checkNow()without a local guard.
Impact:
- Runtime stability risk (process warnings, noisy logs, or crash under strict unhandled-rejection policies).
- Intermittent failures in pause/resume or live-update behavior become harder to trace.
packages/dashboard/src/routes.ts usually wraps endpoints in try/catch, but error response patterns are inconsistent:
- Some endpoints return detailed
{ error: err.message }. - Others return generic fallback text (
"Internal server error"), often without standardized error codes.
Impact:
- Inconsistent API troubleshooting UX for frontend consumers.
- Harder to bucket/retry operational errors programmatically.
Assessment:
- This is not a complete lack of handling (there is substantial try/catch coverage), but a consistency/observability gap.
Classification rubric used:
- Implemented: real code + wiring in runtime/API/UI
- Partial: meaningful code exists, but key wiring/surfaces are missing
- Planned: tracked by tasks, little/no implementation in target layers
- Missing: documented but no code and no tracking task found
| Feature | Status | Evidence |
|---|---|---|
Multi-project core (CentralCore) |
Implemented | packages/core/src/central-core.ts + tests (central-core.test.ts) + widespread CLI/dashboard usage |
Multi-project runtime orchestration (HybridExecutor) |
Partial | packages/engine/src/hybrid-executor.ts exists, but is not exported from packages/engine/src/index.ts and has no observed runtime wiring in CLI/dashboard paths (which currently use ProjectManager directly) |
| Mission autopilot | Implemented | packages/engine/src/mission-autopilot.ts, scheduler integration, mission routes autopilot endpoints, dashboard MissionManager controls |
| Workflow step templates | Implemented | API routes (/workflow-step-templates) + dashboard WorkflowStepManager template tab + core templates catalog |
| Plugin system (FN-1111/FN-1113/FN-1114) | Planned | No plugin loader/SDK runtime code found in packages/core/src or packages/engine/src; matching roadmap tasks exist |
| Node management (FN-1078..1081) | Implemented | CentralCore node registry/health APIs + engine remote runtime + CLI node commands + dashboard node UI/components |
| Agent companies parser/types | Implemented | companies-sh-parser.ts and companies-sh-types.ts with dedicated tests and CLI import flow |
| Agent self-reflection (FN-1181..1183) | Partial | Core ReflectionStore + reflection types exist; no engine execution workflow/UI evidence for full feature completion |
| Agent performance ratings (FN-1184..1187) | Planned/Partial | Reflection summary primitives exist, but no dedicated ratings service/API/UI found; roadmap tasks still present |
| Agent org chart / chain of command (FN-1164..1167) | Partial | Core supports reportsTo, getChainOfCommand, getOrgTree; dashboard currently exposes child/hierarchy views, but dedicated full org-chart product surface appears incremental |
| Agent instructions bundle (FN-1170..1173) | Partial | Core bundleConfig and bundle file operations exist; engine/dashboard primarily use legacy instructionsText/instructionsPath, with limited visible bundle-first UX |
| Session persistence & reconnect (FN-1145..1156) | Partial | ai_sessions persistence + resume flows implemented; no clear Last-Event-ID replay / BroadcastChannel cross-tab continuity implementation found |
| Quick chat floating action button (FN-1104) | Implemented | QuickChatFAB component exists, styled, and mounted in App.tsx |
- No Missing features (documented with no code and no tracking task) were found in the sampled set.
- Several areas are clearly in "in-progress productization": architecture exists in core layers, but integration depth and UX completeness vary.
Current sizes:
packages/dashboard/src/routes.ts: 10,343 linespackages/core/src/store.ts: 3,278 linespackages/engine/src/executor.ts: 3,172 lines
Assessment:
- All three are actively maintained and internally sectioned, but they still represent broad responsibility concentration.
routes.tsis the highest-risk hotspot due to mixed concerns (task APIs, missions, agents, files, integrations, settings, automation, node/project routes).
- 18 app files reference
localStorage(127 call sites), includingApp.tsx, mission/planning/subtask modals, task creation components, and multiple hooks. - Includes UX-state persistence (reasonable) and legacy key namespace coupling (
kb-*).
Cross-reference:
- Existing tasks FN-1201 and FN-1202 already target server-vs-client persistence boundaries.
packages/core/src/gh-cli.tsis the canonical home forparseRepoFromRemote()andgetCurrentRepo().- Engine and dashboard consumers now import the shared
@fusion/corehelpers directly.
Impact:
- Eliminates drift risk in URL parsing behavior and keeps GitHub remote resolution logic centralized.
- No imports from
@fusion/engineor@fusion/dashboardwere found underpackages/core/src. - This preserves intended package dependency direction.
- No
ErrorBoundary/componentDidCatch/react-error-boundaryusage found inpackages/dashboard/appsource. - A runtime exception in a top-level render subtree can take down the entire dashboard view instead of degrading gracefully.
| Dimension | Gap count | Notes |
|---|---|---|
| 1. Incomplete & Stub Packages | 0 | @fusion/tui merged into @runfusion/fusion; desktop/runtime/ipc are implemented |
| 2. Missing Test Coverage | 16 (direct file-level gaps) | Concentrated in dashboard/cli utility layers |
| 3. Naming & Branding | 4 | User-facing kb strings remain across CLI, extension, dashboard |
| 4. Error Handling & Silent Failures | 4 | Includes two high-severity runtime reliability issues |
| 5. Feature Completeness | 7 (partial/planned) | Mostly integration depth gaps, not zero-code absences |
| 6. Architectural Concerns | 4 | Monolith pressure, duplication, missing React error boundaries |
- Critical: 0
- High: 5
- Medium: 12
- Low: 3
High-severity items center on runtime stability (task lifecycle correctness, unhandled async failures, crash containment) rather than security/data-exfiltration risk.
- Executor failure transitions can strand tasks in
in-progress(Section 4.2, High)
Follow-up: FN-1284 - Async EventEmitter listeners lack top-level rejection guards (Section 4.3, High)
Follow-up: FN-1285 - Dashboard lacks React error boundaries (Section 6.5, High)
Follow-up: FN-1286 - Routes error responses/logging are inconsistent (Section 4.4, Medium)
Follow-up: FN-1287 - GitHub remote parsing logic duplicated across core/engine (Section 6.3, Medium)
Follow-up: FN-1288
Per task instructions, no new tasks were created for gaps already tracked by:
- FN-1055 (TUI stub)
- FN-1070..FN-1076 (desktop)
- FN-1111/FN-1113/FN-1114 (plugin system)
- FN-1163/FN-1216 (kb→fn/fusion naming)
- FN-1201/FN-1202 (localStorage boundary)
- FN-1203 (App.tsx splitting)
- FN-1204 (test effectiveness deep dive)
- FN-1161 (fragility review)