docs(FN-689): add comprehensive code coverage analysis report

- Add coverage-report/ with summary, gap analysis, and README documentation
- Add per-package coverage scripts (test:coverage:core, :engine, :cli, :dashboard)
- Document files lacking test coverage with priority ratings across all packages
- Identify key coverage gaps: agent-store, IPC host/worker, and dashboard components
- Note engine OOM issue with coverage and provide workaround
This commit is contained in:
gsxdsm
2026-04-01 09:33:52 -07:00
parent 8bd2fdf5e1
commit 50dc682dea
4 changed files with 758 additions and 0 deletions

177
coverage-report/README.md Normal file
View File

@@ -0,0 +1,177 @@
# Code Coverage Report
**Generated:** 2026-04-01 | **Task:** FN-689
This directory contains the results of a comprehensive code coverage analysis across all packages in the kb monorepo.
## How to Run Coverage
### All Packages
```bash
pnpm test:coverage
```
> ⚠️ **Engine package will OOM** when running with coverage. See [Known Issues](#known-issues).
### Individual Packages
```bash
pnpm test:coverage:core
pnpm test:coverage:engine # Will likely OOM — see workaround below
pnpm test:coverage:cli
pnpm test:coverage:dashboard
```
### Engine Workaround
Run a subset of engine tests with coverage:
```bash
cd packages/engine
npx vitest run --coverage --coverage.reportOnFailure --maxWorkers=1 \
src/concurrency.test.ts \
src/worktree-names.test.ts \
src/notifier.test.ts \
src/logger.test.ts \
src/agent-heartbeat.test.ts
```
### Generate Report with Test Failures
By default, vitest skips coverage output when tests fail. Use `--coverage.reportOnFailure` to generate reports even with failures:
```bash
cd packages/core
npx vitest run --coverage --coverage.reportOnFailure
```
### Coverage Output
Each package generates reports in its `coverage/` directory:
- `coverage/index.html` — Interactive HTML report (open in browser)
- `coverage/coverage-final.json` — Machine-readable JSON data
- Terminal output includes a text summary table
> Note: `coverage/` directories are in `.gitignore` and should not be committed.
## How to Read the Reports
### This Directory
| File | Description |
|------|-------------|
| `gaps.md` | Detailed analysis of all coverage gaps — untested files, low-coverage areas, and pre-existing test failures |
| `summary.json` | Machine-readable JSON with per-package metrics, untested file lists, and low-coverage file lists |
| `README.md` | This file — instructions and overview |
### HTML Reports
After running coverage, open `packages/<name>/coverage/index.html` in your browser for an interactive report showing:
- Per-file line/function/branch coverage
- Highlighted uncovered lines
- Sortable columns
### summary.json Structure
```json
{
"generatedAt": "ISO timestamp",
"packages": {
"core": { "lineCoverage": 80.63, "functionCoverage": 91.26, ... },
"engine": { "lineCoverage": 6.04, "note": "Partial — OOM" },
"cli": { "lineCoverage": 36.17, ... },
"dashboard": { "lineCoverage": 70.21, ... }
},
"overall": { "lineCoverage": X, ... },
"untestedFiles": [ ... ],
"lowCoverageFiles": [ ... ]
}
```
## Top 10 Files Needing Attention
| # | Package | File | Coverage | Issue |
|---|---------|------|----------|-------|
| 1 | dashboard | `src/mission-routes.ts` | 37% lines | 1,137-line API surface — mission endpoints |
| 2 | cli | `commands/task.ts` | 17% lines | Primary CLI interface (1,486 lines) |
| 3 | core | `agent-store.ts` | 0% | 597 lines with zero test coverage |
| 4 | dashboard | `src/terminal.ts` | 37% lines | Terminal service — 8/9 functions untested |
| 5 | dashboard | `src/server.ts` | 29% lines | Server initialization |
| 6 | engine | `ipc/ipc-host.ts` | 0% | IPC host — no tests exist |
| 7 | engine | `ipc/ipc-worker.ts` | 0% | IPC worker — no tests exist |
| 8 | cli | `project-resolver.ts` | 28% lines | Multi-project resolution (915 lines) |
| 9 | dashboard | `src/subtask-breakdown.ts` | 51% lines | AI subtask feature |
| 10 | dashboard | `NewTaskModal.tsx` | 47% / 13% funcs | Complex modal, many untested paths |
## Recommendations
### Immediate Actions (High Impact)
1. **Add tests for `core/agent-store.ts`** — This is a 597-line business logic module with zero tests. It manages agent state and is used across the engine.
2. **Improve CLI `commands/task.ts` coverage** — At 17% line coverage, the most-used CLI commands lack test assertions. Focus on `create`, `list`, `show`, `move`, and `archive` subcommands.
3. **Add tests for `dashboard/src/mission-routes.ts`** — The entire missions API (1,137 lines) has only 37% coverage. Route handlers need request/response testing.
4. **Fix engine OOM for coverage** — The engine package can't run coverage at all due to heap exhaustion. Investigate memory leaks in test setup/teardown (likely in executor or scheduler tests).
### Medium-Term
5. **Add IPC host/worker tests** — The multi-project IPC layer (`ipc-host.ts`, `ipc-worker.ts`) has no tests at all, which is risky for a communication protocol.
6. **Test CLI backup/settings commands**`commands/backup.ts`, `commands/settings-export.ts`, `commands/settings-import.ts` have zero tests.
7. **Improve dashboard server coverage**`server.ts` (29%), `terminal.ts` (37%), `planning.ts` (42%) all need more tests.
### Long-Term
8. **Fix pre-existing test failures** — 4 failures in core (db-migrate, store), 111 failures in CLI (many related to project resolution mocking).
9. **Dashboard component test coverage** — Several components (`NewTaskModal`, `SettingsModal`, `SetupWizardModal`) have tests but with significant gaps in function coverage.
10. **Set coverage thresholds** — Once coverage improves, enable vitest coverage thresholds to prevent regression:
```ts
coverage: {
thresholds: {
lines: 60,
functions: 60,
branches: 50,
}
}
```
## Known Issues
### Engine OOM
Engine tests consistently crash with `FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory` when run with coverage, even with:
- `--max-old-space-size=8192`
- `--maxWorkers=1`
- `--fileParallelism=false`
This appears to be a pre-existing issue (OOM occurs even without coverage enabled). The v8 coverage provider's instrumentation adds significant memory overhead on top of an already memory-intensive test suite.
**Workaround:** Run small subsets of engine tests with coverage (5-7 files at a time).
### Pre-existing Test Failures
Some test failures exist in the codebase independent of coverage changes:
- Core: 4 failures in `db-migrate.test.ts` and `store.test.ts`
- CLI: Multiple failures related to project resolution
- See `gaps.md` for full details
## Coverage Configuration
Coverage is configured in each package's `vitest.config.ts`. By default, `enabled: false` to avoid slowing CI. Use `--coverage` flag or `pnpm test:coverage` to enable.
```ts
// packages/*/vitest.config.ts
coverage: {
enabled: false, // Enable via CLI flag
reporter: ["text", "html", "json"],
reportsDirectory: "./coverage",
include: ["src/**/*.ts"],
exclude: ["**/*.test.ts", "**/*.d.ts", "dist/**"],
}
```

255
coverage-report/gaps.md Normal file
View File

@@ -0,0 +1,255 @@
# 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 — critical runtime component with no test coverage |
| `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 |

View File

@@ -0,0 +1,322 @@
{
"generatedAt": "2026-04-01T16:27:13.771Z",
"packages": {
"core": {
"lineCoverage": 80.64,
"functionCoverage": 91.27,
"branchCoverage": 84.43,
"files": 21,
"totalStatements": 6198,
"coveredStatements": 4998,
"totalFunctions": 332,
"coveredFunctions": 303,
"totalBranches": 1625,
"coveredBranches": 1372
},
"engine": {
"lineCoverage": 6.04,
"functionCoverage": 77.78,
"branchCoverage": 83.45,
"files": 30,
"totalStatements": 6788,
"coveredStatements": 410,
"totalFunctions": 72,
"coveredFunctions": 56,
"totalBranches": 145,
"coveredBranches": 121,
"note": "Partial coverage — only 5 of 27 test files ran (OOM prevents full run)"
},
"cli": {
"lineCoverage": 36.18,
"functionCoverage": 44.25,
"branchCoverage": 67.65,
"files": 14,
"totalStatements": 5650,
"coveredStatements": 2044,
"totalFunctions": 174,
"coveredFunctions": 77,
"totalBranches": 507,
"coveredBranches": 343
},
"dashboard": {
"lineCoverage": 70.22,
"functionCoverage": 68.94,
"branchCoverage": 84.57,
"files": 108,
"totalStatements": 33238,
"coveredStatements": 23339,
"totalFunctions": 1304,
"coveredFunctions": 899,
"totalBranches": 6920,
"coveredBranches": 5852
}
},
"overall": {
"lineCoverage": 59.36,
"functionCoverage": 70.94,
"branchCoverage": 83.59,
"note": "Engine numbers are artificially low due to OOM; true overall would be higher"
},
"untestedFiles": [
{
"package": "core",
"file": "agent-store.ts",
"lines": 597,
"reason": "Agent state management store — no tests at all"
},
{
"package": "engine",
"file": "ipc/ipc-host.ts",
"lines": 279,
"reason": "IPC host for child process communication"
},
{
"package": "engine",
"file": "ipc/ipc-worker.ts",
"lines": 325,
"reason": "IPC worker for child process communication"
},
{
"package": "engine",
"file": "runtimes/child-process-worker.ts",
"lines": 174,
"reason": "Child process entry point"
},
{
"package": "engine",
"file": "pi.ts",
"lines": 109,
"reason": "Pi integration utilities"
},
{
"package": "engine",
"file": "github.ts",
"lines": 37,
"reason": "GitHub utility"
},
{
"package": "cli",
"file": "bin.ts",
"lines": 786,
"reason": "Main CLI entry point"
},
{
"package": "cli",
"file": "commands/backup.ts",
"lines": 131,
"reason": "Backup CLI command"
},
{
"package": "cli",
"file": "commands/settings-export.ts",
"lines": 74,
"reason": "Settings export command"
},
{
"package": "cli",
"file": "commands/settings-import.ts",
"lines": 128,
"reason": "Settings import command"
},
{
"package": "cli",
"file": "runtime/native-patch.ts",
"lines": 223,
"reason": "Native module patching"
},
{
"package": "dashboard",
"file": "src/mission-routes.ts",
"lines": 1137,
"reason": "Mission API route handlers"
},
{
"package": "dashboard",
"file": "src/terminal.ts",
"lines": 347,
"reason": "Terminal service"
},
{
"package": "dashboard",
"file": "src/subtask-breakdown.ts",
"lines": 331,
"reason": "AI subtask breakdown service"
},
{
"package": "dashboard",
"file": "src/sse.ts",
"lines": 51,
"reason": "Server-Sent Events utility"
},
{
"package": "dashboard",
"file": "app/components/TaskChangesTab.tsx",
"lines": 199,
"reason": "Task file changes display"
},
{
"package": "dashboard",
"file": "app/components/ProjectDetectionResults.tsx",
"lines": 253,
"reason": "Project detection results"
},
{
"package": "dashboard",
"file": "app/components/SetupProjectForm.tsx",
"lines": 225,
"reason": "Project setup form"
},
{
"package": "dashboard",
"file": "app/components/SetupWizardModal.tsx",
"lines": 217,
"reason": "First-run wizard modal"
},
{
"package": "dashboard",
"file": "app/components/ProjectHealthBadge.tsx",
"lines": 106,
"reason": "Health status badge"
},
{
"package": "dashboard",
"file": "app/components/FileBrowser.tsx",
"lines": 113,
"reason": "File browser component"
},
{
"package": "dashboard",
"file": "app/hooks/useProjectHealth.ts",
"lines": 143,
"reason": "Project health polling hook"
},
{
"package": "dashboard",
"file": "app/hooks/useFileEditor.ts",
"lines": 120,
"reason": "File editor hook"
},
{
"package": "dashboard",
"file": "app/hooks/useFileBrowser.ts",
"lines": 84,
"reason": "File browser hook"
},
{
"package": "dashboard",
"file": "app/utils/projectDetection.ts",
"lines": 146,
"reason": "Project detection utility"
}
],
"lowCoverageFiles": [
{
"package": "dashboard",
"file": "src/mission-routes.ts",
"lineCoverage": 37.03,
"priority": "high"
},
{
"package": "cli",
"file": "commands/task.ts",
"lineCoverage": 17.09,
"priority": "high"
},
{
"package": "core",
"file": "agent-store.ts",
"lineCoverage": 0,
"priority": "high"
},
{
"package": "dashboard",
"file": "src/terminal.ts",
"lineCoverage": 36.62,
"priority": "high"
},
{
"package": "dashboard",
"file": "src/server.ts",
"lineCoverage": 28.72,
"priority": "high"
},
{
"package": "engine",
"file": "ipc/ipc-host.ts",
"lineCoverage": 0,
"priority": "high"
},
{
"package": "engine",
"file": "ipc/ipc-worker.ts",
"lineCoverage": 0,
"priority": "high"
},
{
"package": "cli",
"file": "project-resolver.ts",
"lineCoverage": 28.32,
"priority": "high"
},
{
"package": "dashboard",
"file": "src/subtask-breakdown.ts",
"lineCoverage": 50.63,
"priority": "medium"
},
{
"package": "dashboard",
"file": "app/components/NewTaskModal.tsx",
"lineCoverage": 47.1,
"priority": "medium"
},
{
"package": "cli",
"file": "commands/dashboard.ts",
"lineCoverage": 29.98,
"priority": "medium"
},
{
"package": "dashboard",
"file": "src/planning.ts",
"lineCoverage": 42.08,
"priority": "medium"
},
{
"package": "dashboard",
"file": "src/routes.ts",
"lineCoverage": 47.07,
"priority": "medium"
},
{
"package": "cli",
"file": "commands/project.ts",
"lineCoverage": 48.25,
"priority": "medium"
},
{
"package": "cli",
"file": "extension.ts",
"lineCoverage": 56.26,
"priority": "low"
},
{
"package": "dashboard",
"file": "app/components/SettingsModal.tsx",
"lineCoverage": 63.2,
"priority": "low"
},
{
"package": "core",
"file": "gh-cli.ts",
"lineCoverage": 26.52,
"priority": "medium"
}
],
"testIssues": {
"coreFailures": 4,
"cliFailures": 111,
"engineOOM": true,
"dashboardFailures": "select component test failures"
}
}