-
Notifications
You must be signed in to change notification settings - Fork 1k
Coverage Plan
Last updated: 2026-05-13
Status measured on 2026-05-13: lines 82.58%, statements 82.58%, functions 84.23%, branches 75.22%. Phases 1-5 are complete. Current focus is Phase 6 (>=85%) and Phase 7 (>=90%).
There are multiple coverage numbers depending on how the report is computed. For planning, only one of them is useful.
| Metric | Scope | Statements / Lines | Branches | Functions | Notes |
|---|---|---|---|---|---|
| Legacy | Old npm run test:coverage
|
79.42% | 75.15% | 67.94% | Inflated: counts test files and excludes open-sse
|
| Diagnostic | Source-only, excluding tests and excluding open-sse
|
68.16% | 63.55% | 64.06% | Useful only to isolate src/**
|
| Recommended baseline | Source-only, excluding tests and including open-sse
|
82.58% | 75.22% | 84.23% | This is the project-wide baseline to improve |
The recommended baseline is the number to optimize against.
- Coverage targets apply to source files, not to
tests/**. -
open-sse/**is part of the product and must remain in scope. - New code should not reduce coverage in touched areas.
- Prefer testing behavior and branch outcomes over implementation details.
- Prefer temp SQLite databases and small fixtures over broad mocks for
src/lib/db/**.
-
npm run test:coverage- Main source coverage gate for the unit test suite
- Generates
text-summary,html,json-summary, andlcov
-
npm run coverage:report- Detailed file-by-file report from the latest run
-
npm run test:coverage:legacy- Historical comparison only
| Phase | Target | Focus | Status |
|---|---|---|---|
| Phase 1 | 60% statements / lines | Quick wins and low-risk utility coverage | ✅ Done |
| Phase 2 | 65% statements / lines | DB and route foundations | ✅ Done |
| Phase 3 | 70% statements / lines | Provider validation and usage analytics | ✅ Done |
| Phase 4 | 75% statements / lines |
open-sse translators and helpers |
✅ Done |
| Phase 5 | 80% statements / lines |
open-sse handlers and executor branches |
✅ Done |
| Phase 6 | 85% statements / lines | Harder edge cases, branch debt, regression suites | In progress |
| Phase 7 | 90% statements / lines | Final sweep, gap closure, strict ratchet | Pending |
Branches and functions should ratchet upward with each phase, but the primary hard target is statements / lines.
These files have the lowest line coverage today (< 60%) and offer the best return for Phases 6-7. Generated from coverage/coverage-summary.json on 2026-05-13:
| # | File | Lines % |
|---|---|---|
| 1 | open-sse/services/compression/validation.ts |
7.87% |
| 2 | src/app/api/v1/batches/route.ts |
9.67% |
| 3 | src/app/docs/components/FeedbackWidget.tsx |
9.80% |
| 4 | open-sse/services/compression/toolResultCompressor.ts |
10.00% |
| 5 | src/app/docs/components/DocCodeBlocks.tsx |
10.63% |
| 6 | open-sse/services/compression/engines/rtk/lineFilter.ts |
10.96% |
| 7 | open-sse/services/specificityRules.ts |
11.28% |
| 8 | src/mitm/systemCommands.ts |
12.19% |
| 9 | open-sse/services/compression/aggressive.ts |
12.77% |
| 10 | src/app/api/v1/batches/[id]/cancel/route.ts |
12.98% |
| 11 | open-sse/services/compression/progressiveAging.ts |
13.26% |
| 12 | open-sse/services/compression/engines/rtk/smartTruncate.ts |
13.43% |
| 13 | open-sse/services/compression/engines/rtk/deduplicator.ts |
13.51% |
| 14 | src/lib/cloudAgent/agents/jules.ts |
13.52% |
| 15 | open-sse/services/compression/lite.ts |
14.46% |
| 16 | src/app/api/v1/rerank/route.ts |
14.94% |
| 17 | open-sse/services/compression/preservation.ts |
15.07% |
| 18 | src/lib/cloudAgent/agents/codex.ts |
15.54% |
| 19 | open-sse/services/tierResolver.ts |
16.66% |
| 20 | src/app/docs/components/DocsLazyWrapper.tsx |
16.66% |
Themes for Phases 6-7:
-
open-sse/services/compression/**is the densest cluster of low coverage and dominates the remaining gap. - Batch and rerank API routes (
src/app/api/v1/batches/**,src/app/api/v1/rerank/route.ts) need handler-level tests. - Cloud agent adapters (
src/lib/cloudAgent/agents/jules.ts,codex.ts) andtierResolver.tsneed scenario tests. - Docs UI components and
src/mitm/systemCommands.tsare lower priority but cheap branch wins.
- Fix coverage metric so it reflects source code instead of test files
- Keep a legacy coverage script for comparison
- Record the baseline and hotspots in-repo
- Add focused tests for low-risk utilities:
src/shared/utils/upstreamError.tssrc/shared/utils/fetchTimeout.tssrc/lib/api/errorResponse.tssrc/shared/utils/apiAuth.tssrc/lib/display/names.ts
- Add route tests for:
src/app/api/settings/require-login/route.tssrc/app/api/providers/[id]/models/route.ts
- Add DB-backed tests for:
src/lib/db/modelComboMappings.tssrc/lib/db/settings.tssrc/lib/db/registeredKeys.ts
- Cover branch behavior in:
src/lib/providers/validation.tssrc/app/api/v1/embeddings/route.tssrc/app/api/v1/moderations/route.ts
- Add usage analytics tests for:
src/lib/usage/usageHistory.tssrc/lib/usage/usageStats.tssrc/lib/usage/costCalculator.ts
- Expand route coverage for proxy management and settings branches
- Cover translator helpers and central translation paths:
open-sse/translator/index.tsopen-sse/translator/helpers/*open-sse/translator/request/*open-sse/translator/response/*
- Add handler-level tests for:
open-sse/handlers/chatCore.tsopen-sse/handlers/responsesHandler.jsopen-sse/handlers/imageGeneration.jsopen-sse/handlers/embeddings.js
- Add executor branch coverage for provider-specific auth, retries, and endpoint overrides
- Merge more edge-case suites into the main coverage path
- Increase function coverage for DB modules with weak constructor/helper coverage
- Close branch gaps in
settings.ts,registeredKeys.ts,validation.ts, and translator helpers
- Treat the remaining low-coverage files as blockers
- Add regression tests for every uncovered production bug fixed during the push to 90%
- Raise the coverage gate in CI only after the local baseline is stable for at least two consecutive runs
Update npm run test:coverage thresholds only after the project actually exceeds the next milestone with a comfortable buffer.
Current gate (as of 2026-05-13): npm run test:coverage enforces 75 statements / 75 lines / 75 functions / 70 branches. This is the conservative ratchet against the measured baseline (82.58% / 82.58% / 84.23% / 75.22%) and preserves headroom for transient flakiness.
For ad-hoc threshold checks against the latest report use:
node scripts/check/test-report-summary.mjs --threshold 75Recommended ratchet sequence (order is statements-lines / branches / functions):
- 55/60/55
- 60/62/58
- 65/64/62
- 70/66/66
- 75/70/72 <-- current gate (75/70/75)
- 80/75/78
- 85/80/84
- 90/85/88
Next ratchet target is 80/75/78 once branch coverage holds above 78% for two consecutive runs.
The current coverage command measures the main Node unit suite and includes source reached from it, including open-sse. It does not yet merge Vitest coverage into a single unified report. That merge is worth doing later, but it is not a blocker for starting the 60% -> 80% climb.
OmniRoute · Website · npm · Docker Hub
- Setup Guide
- User Guide
- Features
- Quick Start (Docker)
- Electron Desktop App
- Termux (Android)
- PWA Guide
- MCP Server
- A2A Server
- Agent Protocols
- OpenCode Plugin
- Webhooks
- Cloud Agents
- Skills
- Memory
- Evals
- Gamification
- Guardrails
- Compliance
- Error Sanitization
- Public Credentials
- Route Guard Tiers
- Stealth Guide
- CLI Token Auth