Docs · Coverage artifacts
What a run leaves behind.
Every npx @omea/cli run run writes evidence under .omea/last-run/ — raw per-test capture plus a derived, agent-readable report.
Layout
.omea/last-run/
tests.json # every test that ran: { testId, title, file }
coverage/<testId>/
v8-<processId>.json # V8 coverage delta for this test's window
browser-<processId>.json # CDP JS coverage for the page(s) the test drove
queries-<processId>.jsonl # one JSON line per traced DB query in this window
report/
coverage.json # machine-readable summary (schema below)
coverage.md # human/agent-readable annotated source
coverage/ and tests.json are the raw capture, written incrementally during the run. report/ is derived from that raw capture after the run completes.
coverage.json (schema version 1)
{
"summary": {
"totalLines": 85, "coveredLines": 61,
"pct": 71.8, "testCount": 2, "fileCount": 2
},
"files": {
"<path>": {
"totalLines": 69, "coveredLines": 49, "pct": 71.0,
"lines": { "44": { "covered": true, "count": 1 },
"59": { "covered": false, "count": 0 } }
}
},
"tests": {
"<testId>": { "title": "smoke.spec.js › home renders",
"touchedFiles": [ { "file": "server.mjs", "linesHit": 12 } ] }
}
}
Lines with no entry in lines are non-executable (blank or comment) — the absence itself is the signal, and a reader should never render those as uncovered. testId is a stable hash of the test's file path and full title, so a run's per-test slice is diffable against a previous run.
coverage.md — annotated source
One section per file, worst-covered first, with a three-symbol marker legend: a space marks a covered line, ! marks an executable line that's never covered — the list an agent should target next — and · marks a non-executable line.
Known caveats
- Serial-workers assumption. Backend coverage attribution tracks one open test per process; run Playwright with
workers: 1for accurate attribution against a shared backend, or give each worker its own backend process. - Only the default
pagefixture is auto-instrumented for browser coverage — extra pages fromcontext.newPage()still get backend/DB attribution, just not browser coverage. - DB tracing covers
better-sqlite3andnode:sqliteonly today — other drivers aren't wrapped yet. - Top-level/module-init code reads as uncovered — coverage windows are test-scoped, so code that runs once at process startup isn't attributed to any test.
Read next
- The test format — how this instrumentation gets injected in the first place.
- Getting started — run a suite and produce these artifacts yourself.