Files
fusion/coverage-report/gaps.md
gsxdsm 83cbced678 test(FN-704): add comprehensive AgentStore test suite
- Add 62 tests covering all AgentStore public methods (init, CRUD, state transitions, heartbeats, assignments)
- Test event emissions (agent:created, agent:updated, agent:deleted, agent:heartbeat, agent:stateChanged)
- Test error paths, state transition validation, and concurrency locking
- Verify filesystem persistence across store re-initialization
- Update coverage gaps doc to mark agent-store.ts as covered
2026-04-01 10:00:41 -07:00

14 KiB

Coverage Gap Analysis

Generated: 2026-04-01 Task: FN-689

Files Without Any Tests

Source files that have no corresponding test file (checked both co-located *.test.ts and __tests__/*.test.ts patterns).

Core Package (@fusion/core)

File Lines Category Priority Notes
agent-store.ts 597 Business Logic High Agent state management store — covered by FN-704 (62 tests in agent-store.test.ts)
automation.ts 143 Types/Constants Low Pure type definitions and constant mappings — tested indirectly via automation-store.test.ts
mission-types.ts 253 Types/Constants Low Type definitions for missions — tested indirectly via mission-store.test.ts
types.ts 1228 Types/Constants Low Core type definitions — no runtime logic to test
index.ts 148 Barrel/Re-export Low Re-export barrel — no logic

Engine Package (@fusion/engine)

File Lines Category Priority Notes
ipc/ipc-host.ts 279 Infrastructure High IPC host for child process communication — critical for multi-project
ipc/ipc-worker.ts 325 Infrastructure High IPC worker for child process communication — critical for multi-project
runtimes/child-process-worker.ts 174 Infrastructure Medium Child process entry point — pairs with IPC worker
pi.ts 109 Integration Medium Pi integration utilities — external service integration
github.ts 37 Integration Low GitHub utility (small helper file)
index.ts 17 Barrel/Re-export Low Re-export barrel — no logic

CLI Package (@gsxdsm/fusion)

File Lines Category Priority Notes
bin.ts 786 Entry Point High Main CLI entry point with command registration — critical but integration-heavy
commands/backup.ts 131 Command Medium Backup CLI command — moderately important
commands/settings-export.ts 74 Command Medium Settings export command
commands/settings-import.ts 128 Command Medium Settings import command
runtime/native-patch.ts 223 Runtime Medium Native module patching — platform-specific logic

Dashboard Package (@fusion/dashboard)

Components Without Tests

File Lines Category Priority Notes
TaskChangesTab.tsx 199 UI Component High Task file changes display — user-facing feature
ProjectDetectionResults.tsx 253 UI Component Medium Project detection results display
SetupProjectForm.tsx 225 UI Component Medium Project setup form
SetupWizardModal.tsx 217 UI Component Medium First-run wizard modal
ProjectHealthBadge.tsx 106 UI Component Medium Project health status badge
FileBrowser.tsx 113 UI Component Medium File browser component
ProjectGridSkeleton.tsx 80 UI Component Low Loading skeleton — minimal logic
TaskCardBadge.tsx 69 UI Component Low Badge display component
WorktreeGroup.tsx 59 UI Component Low Worktree grouping component
StepTypeBadge.tsx 25 UI Component Low Simple badge — trivial
ToastContainer.tsx 18 UI Component Low Toast notifications container — trivial

Hooks Without Tests

File Lines Category Priority Notes
useProjectHealth.ts 143 Hook High Project health polling hook — multi-project feature
useFileEditor.ts 120 Hook Medium File editor hook (variants useProjectFileEditor/useWorkspaceFileEditor are tested)
useFileBrowser.ts 84 Hook Medium File browser hook (variants useProjectFileBrowser/useWorkspaceFileBrowser are tested)

Utils Without Tests

File Lines Category Priority Notes
projectDetection.ts 146 Utility Medium Project auto-detection logic

Server-Side (src/) Without Tests

File Lines Category Priority Notes
mission-routes.ts 1137 API Routes High Mission API route handlers — large untested file
terminal.ts 347 Service High Terminal service — complex functionality
subtask-breakdown.ts 331 Service High AI subtask breakdown service — user-facing feature
sse.ts 51 Service Medium Server-Sent Events utility
index.ts 5 Barrel/Re-export Low Re-export barrel

Entry Points (Not Testable)

File Lines Notes
app/main.tsx 10 React DOM entry point — bootstrap code
src/test-request.ts 95 Test utility, not production code

Summary by Priority

Priority Count Total Lines
High 10 4,143
Medium 15 2,693
Low 12 1,726

High-priority untested files represent the most critical coverage gaps:

  1. dashboard/src/mission-routes.ts (1,137 lines) — Entire mission API surface untested
  2. cli/src/bin.ts (786 lines) — CLI entry point with all command registration
  3. core/src/agent-store.ts (597 lines) — Agent state management with zero coverage
  4. dashboard/src/terminal.ts (347 lines) — Terminal service
  5. dashboard/src/subtask-breakdown.ts (331 lines) — Subtask AI breakdown
  6. engine/src/ipc/ipc-worker.ts (325 lines) — IPC worker
  7. engine/src/ipc/ipc-host.ts (279 lines) — IPC host
  8. dashboard/app/components/TaskChangesTab.tsx (199 lines) — File changes UI
  9. dashboard/app/hooks/useProjectHealth.ts (143 lines) — Health polling hook
  10. Engine tests cannot run with coverage due to OOM (pre-existing issue)

Low Coverage Areas

Files that have tests but with coverage below thresholds: line coverage < 50%, function coverage < 50%, or branch coverage < 40%.

Note: Engine package numbers are from a partial coverage run (5 of 27 test files) due to OOM. Many engine files show 0% because their tests didn't run in the subset, not because of genuinely low coverage.

Package-Level Summary

Package Files Line Coverage Function Coverage Branch Coverage Notes
core 21 80.6% 91.3% 84.4% Good overall; agent-store.ts is the main gap
engine 30 6.0% ⚠️ 77.8% 83.4% Severely undercounted due to OOM — only 5/27 test files ran
cli 14 36.2% 44.3% 67.7% Many commands lack tests; 8 of 18 test files failed
dashboard 108 70.2% 68.9% 84.6% Good hooks/components; server-side routes need work

Core Package — Low Coverage Files

File Lines % Functions % Branches % Priority Notes
gh-cli.ts 26.5% 20% 100% Medium GitHub CLI integration — 4 of 5 functions uncovered
ai-summarize.ts 59.5% 90.9% 81.8% Low Most logic covered, AI integration paths missing

The core package has strong overall coverage (80.6% lines). The main gap is agent-store.ts (0% — completely untested) and gh-cli.ts (26.5% — mostly untested integration code).

CLI Package — Low Coverage Files

File Lines % Functions % Branches % Priority Notes
commands/task.ts 17.1% 40% 45.2% High Largest command file with most CLI functionality
project-resolver.ts 28.3% 33.3% 80.3% High Project resolution logic — critical for multi-project
commands/dashboard.ts 30.0% 9.1% 47.6% Medium Dashboard launch/management commands
extension.ts 56.3% 44.8% 70.7% Medium Pi extension — many tools have low function coverage
commands/project.ts 48.3% 50% 40.9% Medium Project management commands
project-context.ts 56.4% 60% 76.2% Low Project context resolution
commands/mission.ts 52.2% 55.6% 66.0% Low Mission CLI commands

Key finding: The commands/task.ts file (1,486 lines) has only 17% line coverage despite being the primary user-facing CLI surface. Many task subcommands are completely untested.

Dashboard Package — Low Coverage Files

Server-Side (API routes and services)

File Lines % Functions % Branches % Priority Notes
server.ts 28.7% 40% 43.8% High Main server setup — much initialization untested
mission-routes.ts 37.0% 57.1% 84.9% High Mission API routes — large file, partial coverage
terminal.ts 36.6% 11.1% 100% High Terminal service — 8 of 9 functions untested
planning.ts 42.1% 63.3% 84.2% Medium AI planning service
routes.ts 47.1% 74.1% 92.7% Medium Main route handlers — many endpoints lack tests
subtask-breakdown.ts 50.6% 47.4% 50% Medium AI subtask service

Frontend Components

File Lines % Functions % Branches % Priority Notes
NewTaskModal.tsx 47.1% 12.9% 56.6% High Complex modal with many untested interactions
SettingsModal.tsx 63.2% 39.7% 81.9% Medium Large settings modal — many sections untested
PlanningModeModal.tsx 82.0% 46.7% 80.7% Low Planning modal — some functions untested
SetupWizardModal.tsx 66.9% 25% 12.5% Medium Wizard modal — very low branch coverage
TaskCardBadge.tsx 38% 50% 100% Low Badge component — small file
WorktreeGroup.tsx 12.5% 0% 100% Low Worktree grouping — small file

Frontend Hooks

File Lines % Functions % Branches % Priority Notes
useProjectHealth.ts 37.2% 100% 62.5% Medium Health hook — has function calls but low execution
useActivityLog.ts 74.4% 100% 92.3% Low Activity log hook

Engine Package — Known Coverage Data

⚠️ The engine package cannot run all tests with coverage enabled due to a pre-existing OOM issue. Tests consistently crash with "heap limit Allocation failed" even with --max-old-space-size=8192. The following is based on a partial run of 5 test files.

Files with confirmed good coverage (from partial run):

  • concurrency.ts — 100% lines, 100% functions, 100% branches
  • logger.ts — 100% lines, 100% functions, 100% branches
  • agent-heartbeat.ts — 93.6% lines, 100% functions, 91.7% branches
  • notifier.ts — 96.5% lines, 92.9% functions, 87.5% branches
  • worktree-names.ts — 85.2% lines, 66.7% functions, 90.9% branches

Files that have tests but couldn't be measured (OOM prevented coverage collection):

  • executor.ts (1,885 lines) — Core task executor
  • merger.ts (1,275 lines) — Git merge logic
  • scheduler.ts (611 lines) — Task scheduler
  • triage.ts (1,205 lines) — Task specification
  • reviewer.ts (344 lines) — Code/spec reviewer
  • cron-runner.ts (407 lines) — Cron schedule runner
  • worktree-pool.ts (215 lines) — Git worktree pool
  • stuck-task-detector.ts (223 lines) — Stuck task detection
  • pr-monitor.ts (298 lines) — PR monitoring
  • pr-comment-handler.ts (190 lines) — PR comment handling

Pre-Existing Test Failures

The following test failures were observed during coverage collection and are not caused by this task's changes:

Core Package (4 failures)

  1. db-migrate.test.ts — 3 failures in legacy migration tests:

    • "migrates task.json files to tasks table" — expected undefined to be defined
    • "skips invalid task.json files" — expected undefined to be defined
    • "preserves all task fields through migration" — Cannot read properties of undefined
    • Root cause: Likely database schema drift — db.prepare().get() returns undefined
  2. store.test.ts — 1 failure:

    • "adds log entry for the action" — comment log entry assertion fails
    • Root cause: addComment implementation may have changed log format

CLI Package (8 test files failed, 111 test failures)

  • Multiple failures in task.test.ts, project.test.ts, dashboard.test.ts due to project resolution / TaskStore initialization errors
  • Root cause: Tests depend on runtime initialization that may require additional mocking

Dashboard Package (select failures)

  • Some component tests had intermittent failures related to mock setup
  • SSE and websocket tests have timing-sensitive assertions

Engine Package

  • All tests OOM when run together (with or without coverage)
  • Individual test files pass when run in isolation
  • Root cause: Memory leak in test infrastructure or test cleanup — pre-existing issue

Top 10 Priority Files Needing Coverage Improvement

Ranked by combination of file size, criticality, and current coverage:

Rank Package File Lines Current Coverage Why Critical
1 dashboard src/mission-routes.ts 1,137 37% lines Entire mission API — user-facing
2 cli commands/task.ts 1,486 17% lines Primary CLI interface — most used commands
3 core agent-store.ts 597 0% lines Agent state management — zero tests
4 dashboard src/terminal.ts 347 37% lines Terminal service — 8/9 functions untested
5 dashboard src/server.ts 559 29% lines Server initialization — critical path
6 engine ipc/ipc-host.ts 279 0% (no test) IPC host — multi-project critical
7 engine ipc/ipc-worker.ts 325 0% (no test) IPC worker — multi-project critical
8 cli project-resolver.ts 915 28% lines Project resolution — multi-project
9 dashboard src/subtask-breakdown.ts 331 51% lines AI subtask feature
10 dashboard NewTaskModal.tsx 954 47% lines, 13% funcs Complex modal — many untested paths