- 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
322 lines
7.5 KiB
JSON
322 lines
7.5 KiB
JSON
{
|
|
"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"
|
|
}
|
|
} |