supercov 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +132 -76
  2. package/dist/analyze.d.ts.map +1 -1
  3. package/dist/analyze.js +1 -0
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/buildCache.d.ts +14 -0
  6. package/dist/buildCache.d.ts.map +1 -0
  7. package/dist/buildCache.js +84 -0
  8. package/dist/buildCache.js.map +1 -0
  9. package/dist/cli.js +213 -26
  10. package/dist/cli.js.map +1 -1
  11. package/dist/directInstrumenter.d.ts +2 -2
  12. package/dist/directInstrumenter.d.ts.map +1 -1
  13. package/dist/directInstrumenter.js +18 -20
  14. package/dist/directInstrumenter.js.map +1 -1
  15. package/dist/esmInterceptor.d.ts +6 -0
  16. package/dist/esmInterceptor.d.ts.map +1 -0
  17. package/dist/esmInterceptor.js +63 -0
  18. package/dist/esmInterceptor.js.map +1 -0
  19. package/dist/evidenceArchive.d.ts +37 -0
  20. package/dist/evidenceArchive.d.ts.map +1 -0
  21. package/dist/evidenceArchive.js +110 -0
  22. package/dist/evidenceArchive.js.map +1 -0
  23. package/dist/instrumenter.d.ts.map +1 -1
  24. package/dist/instrumenter.js +10 -6
  25. package/dist/instrumenter.js.map +1 -1
  26. package/dist/integrity.d.ts.map +1 -1
  27. package/dist/integrity.js +3 -3
  28. package/dist/integrity.js.map +1 -1
  29. package/dist/launchSupervisor.d.ts +6 -0
  30. package/dist/launchSupervisor.d.ts.map +1 -1
  31. package/dist/launchSupervisor.js +78 -4
  32. package/dist/launchSupervisor.js.map +1 -1
  33. package/dist/merge.d.ts +2 -0
  34. package/dist/merge.d.ts.map +1 -0
  35. package/dist/merge.js +116 -0
  36. package/dist/merge.js.map +1 -0
  37. package/dist/nodeTest.d.ts +15 -0
  38. package/dist/nodeTest.d.ts.map +1 -0
  39. package/dist/nodeTest.js +121 -0
  40. package/dist/nodeTest.js.map +1 -0
  41. package/dist/project.d.ts +6 -1
  42. package/dist/project.d.ts.map +1 -1
  43. package/dist/project.js +26 -8
  44. package/dist/project.js.map +1 -1
  45. package/dist/query.d.ts +25 -0
  46. package/dist/query.d.ts.map +1 -1
  47. package/dist/query.js +280 -21
  48. package/dist/query.js.map +1 -1
  49. package/dist/register.mjs +40 -0
  50. package/dist/register.mjs.map +1 -1
  51. package/dist/reporter.d.ts +6 -13
  52. package/dist/reporter.d.ts.map +1 -1
  53. package/dist/reporter.js +21 -82
  54. package/dist/reporter.js.map +1 -1
  55. package/dist/resolve-loader.d.mts +1 -0
  56. package/dist/resolve-loader.d.mts.map +1 -1
  57. package/dist/resolve-loader.mjs +43 -0
  58. package/dist/resolve-loader.mjs.map +1 -1
  59. package/dist/runAnalysis.d.ts +19 -0
  60. package/dist/runAnalysis.d.ts.map +1 -0
  61. package/dist/runAnalysis.js +130 -0
  62. package/dist/runAnalysis.js.map +1 -0
  63. package/dist/runnerEvidence.d.ts +19 -0
  64. package/dist/runnerEvidence.d.ts.map +1 -0
  65. package/dist/runnerEvidence.js +93 -0
  66. package/dist/runnerEvidence.js.map +1 -0
  67. package/dist/runtime.d.ts.map +1 -1
  68. package/dist/runtime.js +3 -1
  69. package/dist/runtime.js.map +1 -1
  70. package/dist/sourceDiscovery.d.ts +9 -0
  71. package/dist/sourceDiscovery.d.ts.map +1 -0
  72. package/dist/sourceDiscovery.js +227 -0
  73. package/dist/sourceDiscovery.js.map +1 -0
  74. package/dist/transport.d.ts.map +1 -1
  75. package/dist/transport.js +11 -5
  76. package/dist/transport.js.map +1 -1
  77. package/dist/types.d.ts +15 -1
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/vitePlugin.d.ts +5 -0
  80. package/dist/vitePlugin.d.ts.map +1 -1
  81. package/dist/vitePlugin.js +44 -3
  82. package/dist/vitePlugin.js.map +1 -1
  83. package/dist/workspace.d.ts +39 -4
  84. package/dist/workspace.d.ts.map +1 -1
  85. package/dist/workspace.js +263 -46
  86. package/dist/workspace.js.map +1 -1
  87. package/docs/performance.md +107 -0
  88. package/docs/workspace-isolation.md +118 -0
  89. package/package.json +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/query.d.ts CHANGED
@@ -1,3 +1,27 @@
1
+ import type { McdcReport } from "./types.ts";
2
+ interface QueryOptions {
3
+ run?: string;
4
+ kind?: string;
5
+ runner?: string;
6
+ filter: "all" | "passed" | "failed";
7
+ limit: number;
8
+ offset: number;
9
+ json: boolean;
10
+ target: number;
11
+ metric: "all" | "lines" | "statements" | "functions" | "branches" | "mcdc";
12
+ positional: string[];
13
+ }
14
+ export interface MinimumTestSetResult {
15
+ optimal: true;
16
+ target: number;
17
+ metric: QueryOptions["metric"];
18
+ selected: string[];
19
+ expanded: string[];
20
+ summary: McdcReport["summary"];
21
+ exploredStates: number;
22
+ }
23
+ /** Exact branch-and-bound solver; MC/DC obligations retain their witness-pair structure. */
24
+ export declare function minimumTestSet(report: McdcReport, target?: number, metric?: QueryOptions["metric"]): MinimumTestSetResult;
1
25
  export interface CoverageQueryInvocation {
2
26
  command: string;
3
27
  args: string[];
@@ -6,4 +30,5 @@ export interface CoverageQueryInvocation {
6
30
  export declare function resolveCoverageQueryInvocation(command: string, args: string[]): CoverageQueryInvocation;
7
31
  export declare function runQueryCommand(command: string, args: string[], root?: string): Promise<void>;
8
32
  export declare const coverageQueryCommands: Set<string>;
33
+ export {};
9
34
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAkgBA,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,2DAA2D;AAC3D,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,uBAAuB,CAiCzB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,SAAgB,GACnB,OAAO,CAAC,IAAI,CAAC,CAsxBf;AAED,eAAO,MAAM,qBAAqB,aAAoC,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,UAAU,EAEX,MAAM,YAAY,CAAC;AAiCpB,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3E,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAoLD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AA4FD,4FAA4F;AAC5F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,MAAM,SAAM,EACZ,MAAM,GAAE,YAAY,CAAC,QAAQ,CAAS,GACrC,oBAAoB,CA+FtB;AAoVD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,2DAA2D;AAC3D,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,uBAAuB,CAmCzB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,SAAgB,GACnB,OAAO,CAAC,IAAI,CAAC,CAg2Bf;AAED,eAAO,MAAM,qBAAqB,aAAoC,CAAC"}
package/dist/query.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { existsSync, readFileSync, readdirSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { gunzipSync } from "node:zlib";
5
4
  import { coverageSummaryForTests, isIndependencePair } from "./analyze.js";
5
+ import { EVIDENCE_ARCHIVE_SCHEMA_VERSION } from "./evidenceArchive.js";
6
+ import { analyzeCoverageArchive } from "./runAnalysis.js";
6
7
  import { compareRunIntegrity, createRunIntegrity } from "./integrity.js";
7
8
  import { discoverCoverageProject } from "./project.js";
8
9
  function parseOptions(args) {
@@ -11,6 +12,8 @@ function parseOptions(args) {
11
12
  offset: 0,
12
13
  json: false,
13
14
  filter: "all",
15
+ target: 100,
16
+ metric: "all",
14
17
  positional: [],
15
18
  };
16
19
  for (let index = 0; index < args.length; index += 1) {
@@ -23,6 +26,18 @@ function parseOptions(args) {
23
26
  options.kind = args[++index]?.toLowerCase();
24
27
  else if (value === "--runner")
25
28
  options.runner = args[++index]?.toLowerCase();
29
+ else if (value === "--target") {
30
+ const target = Number(args[++index]);
31
+ if (!Number.isFinite(target) || target < 0 || target > 100)
32
+ throw new Error("--target must be between 0 and 100");
33
+ options.target = target;
34
+ }
35
+ else if (value === "--metric") {
36
+ const metric = args[++index]?.toLowerCase();
37
+ if (!metric || !["all", "lines", "statements", "functions", "branches", "mcdc"].includes(metric))
38
+ throw new Error("--metric must be all, lines, statements, functions, branches, or mcdc");
39
+ options.metric = metric;
40
+ }
26
41
  else if (value === "--filter") {
27
42
  const filter = args[++index]?.toLowerCase();
28
43
  if (filter !== "all" && filter !== "passed" && filter !== "failed")
@@ -51,11 +66,7 @@ function filteredCoverage(report, options) {
51
66
  }
52
67
  function readJson(path) {
53
68
  try {
54
- const contents = readFileSync(path);
55
- const text = path.endsWith(".gz")
56
- ? gunzipSync(contents).toString("utf8")
57
- : contents.toString("utf8");
58
- return JSON.parse(text);
69
+ return JSON.parse(readFileSync(path, "utf8"));
59
70
  }
60
71
  catch {
61
72
  return undefined;
@@ -68,18 +79,29 @@ function discoverRuns(root) {
68
79
  for (const entry of readdirSync(canonical, { withFileTypes: true })) {
69
80
  if (!entry.isDirectory())
70
81
  continue;
71
- const reportPath = resolve(canonical, entry.name, "report.json.gz");
72
- if (!existsSync(reportPath))
82
+ const evidencePath = resolve(canonical, entry.name, "evidence.raw.gz");
83
+ const metadata = readJson(resolve(canonical, entry.name, "run.json"));
84
+ if (!existsSync(evidencePath) ||
85
+ !metadata ||
86
+ metadata.rawEvidence?.schemaVersion !== EVIDENCE_ARCHIVE_SCHEMA_VERSION)
73
87
  continue;
74
88
  runs.set(entry.name, {
75
89
  id: entry.name,
76
- reportPath,
77
- metadata: readJson(resolve(canonical, entry.name, "run.json")),
90
+ evidencePath,
91
+ metadata,
78
92
  });
79
93
  }
80
94
  }
81
95
  return [...runs.values()].sort((left, right) => right.id.localeCompare(left.id));
82
96
  }
97
+ function analyzeStoredRun(run) {
98
+ return analyzeCoverageArchive(run.evidencePath, {
99
+ runId: run.id,
100
+ testExitCode: run.metadata?.testExitCode,
101
+ integrity: run.metadata?.integrity,
102
+ generatedAt: run.metadata?.startedAt,
103
+ });
104
+ }
83
105
  function selectRun(root, selector, currentIntegrity) {
84
106
  const runs = discoverRuns(root);
85
107
  if (runs.length === 0)
@@ -90,9 +112,7 @@ function selectRun(root, selector, currentIntegrity) {
90
112
  runs.find((run) => run.id.startsWith(selector)));
91
113
  if (!selected)
92
114
  throw new Error(`Coverage run not found: ${selector}`);
93
- const report = readJson(selected.reportPath);
94
- if (!report)
95
- throw new Error(`Cannot read ${selected.reportPath}`);
115
+ const report = analyzeStoredRun(selected);
96
116
  if (currentIntegrity) {
97
117
  const comparison = compareRunIntegrity(selected.metadata?.integrity ?? report.integrity, currentIntegrity);
98
118
  report.integrity = {
@@ -126,6 +146,175 @@ function pct(value) {
126
146
  function shellQuote(value) {
127
147
  return `'${value.replaceAll("'", `'\\''`)}'`;
128
148
  }
149
+ function optionKey(option) {
150
+ return [...new Set(option)].sort().join("\0");
151
+ }
152
+ function minimumTestObligations(report, candidates) {
153
+ const tests = new Map(report.tests.map((test) => [test.id, test]));
154
+ const testsByFile = new Map();
155
+ for (const test of report.tests) {
156
+ if (test.role !== "test" || !test.file || !candidates.has(test.id))
157
+ continue;
158
+ const ids = testsByFile.get(test.file) ?? [];
159
+ ids.push(test.id);
160
+ testsByFile.set(test.file, ids);
161
+ }
162
+ const evidenceChoices = (ids) => {
163
+ const options = [];
164
+ for (const id of ids) {
165
+ const test = tests.get(id);
166
+ if (!test)
167
+ continue;
168
+ if (test.role === "background")
169
+ options.push([]);
170
+ else if (test.role === "setup" && test.file)
171
+ options.push(...(testsByFile.get(test.file) ?? []).map((candidate) => [candidate]));
172
+ else if (candidates.has(id))
173
+ options.push([id]);
174
+ }
175
+ return [...new Map(options.map((option) => [optionKey(option), option])).values()];
176
+ };
177
+ const obligations = [];
178
+ const uniqueLines = new Map();
179
+ for (const line of report.lines)
180
+ uniqueLines.set(`${line.file}:${line.line}`, line);
181
+ for (const [id, line] of uniqueLines)
182
+ obligations.push({ id: `line:${id}`, metric: "lines", options: evidenceChoices(line.tests) });
183
+ for (const point of report.points)
184
+ obligations.push({
185
+ id: `${point.meta.kind}:${point.meta.id}`,
186
+ metric: point.meta.kind === "statement" ? "statements" : "functions",
187
+ options: evidenceChoices(point.tests),
188
+ });
189
+ for (const branch of report.branches)
190
+ for (const alternative of branch.alternatives)
191
+ obligations.push({
192
+ id: `branch:${branch.meta.id}:${alternative.id}`,
193
+ metric: "branches",
194
+ options: evidenceChoices(alternative.tests),
195
+ });
196
+ for (const decision of report.decisions) {
197
+ for (let condition = 0; condition < decision.meta.conditions.length; condition += 1) {
198
+ const options = [];
199
+ for (let left = 0; left < decision.vectorObservations.length; left += 1) {
200
+ for (let right = left + 1; right < decision.vectorObservations.length; right += 1) {
201
+ const first = decision.vectorObservations[left];
202
+ const second = decision.vectorObservations[right];
203
+ if (!isIndependencePair(first.vector, second.vector, condition))
204
+ continue;
205
+ for (const firstChoice of evidenceChoices(first.tests))
206
+ for (const secondChoice of evidenceChoices(second.tests))
207
+ options.push([...new Set([...firstChoice, ...secondChoice])].sort());
208
+ }
209
+ }
210
+ obligations.push({
211
+ id: `mcdc:${decision.meta.id}:${condition}`,
212
+ metric: "mcdc",
213
+ options: [...new Map(options.map((option) => [optionKey(option), option])).values()],
214
+ });
215
+ }
216
+ }
217
+ return {
218
+ obligations,
219
+ expand(selected) {
220
+ const expanded = new Set(selected);
221
+ for (const test of report.tests) {
222
+ if (test.role === "background")
223
+ expanded.add(test.id);
224
+ else if (test.role === "setup" &&
225
+ test.file &&
226
+ (testsByFile.get(test.file) ?? []).some((id) => selected.has(id)))
227
+ expanded.add(test.id);
228
+ }
229
+ return expanded;
230
+ },
231
+ };
232
+ }
233
+ function obligationSatisfied(obligation, selected) {
234
+ return obligation.options.some((option) => option.every((test) => selected.has(test)));
235
+ }
236
+ /** Exact branch-and-bound solver; MC/DC obligations retain their witness-pair structure. */
237
+ export function minimumTestSet(report, target = 100, metric = "all") {
238
+ const unattributed = report.tests.filter((test) => test.role === "background" &&
239
+ (test.hits.length > 0 || test.decisions.some((decision) => decision.vectors.length > 0)));
240
+ if (unattributed.length > 0) {
241
+ throw new Error("Cannot minimize exactly: this coverage view contains background/unattributed evidence. Use a runner with exact test attribution or select a fully attributed coverage view.");
242
+ }
243
+ const candidateTests = report.tests
244
+ .filter((test) => test.role === "test")
245
+ .map((test) => test.id)
246
+ .sort();
247
+ const candidates = new Set(candidateTests);
248
+ const model = minimumTestObligations(report, candidates);
249
+ const metrics = metric === "all"
250
+ ? ["lines", "statements", "functions", "branches", "mcdc"]
251
+ : [metric];
252
+ const obligations = model.obligations.filter((obligation) => metrics.includes(obligation.metric));
253
+ const totals = new Map();
254
+ for (const obligation of obligations)
255
+ totals.set(obligation.metric, (totals.get(obligation.metric) ?? 0) + 1);
256
+ const skipLimits = new Map();
257
+ for (const selectedMetric of metrics) {
258
+ const total = totals.get(selectedMetric) ?? 0;
259
+ const required = Math.ceil((total * target) / 100);
260
+ skipLimits.set(selectedMetric, total - required);
261
+ }
262
+ let best = new Set(candidateTests);
263
+ const fullExpanded = model.expand(best);
264
+ const fullSummary = coverageSummaryForTests(report, fullExpanded);
265
+ const percentage = (selectedMetric, summary) => selectedMetric === "mcdc" ? summary.conditionCoveragePct : summary[selectedMetric].percentage;
266
+ const impossible = metrics.find((selectedMetric) => percentage(selectedMetric, fullSummary) + 1e-9 < target);
267
+ if (impossible)
268
+ throw new Error(`The full selected test view reaches only ${percentage(impossible, fullSummary).toFixed(2)}% ${impossible}; target ${target}% is impossible`);
269
+ let exploredStates = 0;
270
+ const seen = new Set();
271
+ const search = (selected, skipped, skippedByMetric) => {
272
+ exploredStates += 1;
273
+ if (selected.size >= best.size)
274
+ return;
275
+ const stateKey = `${[...selected].sort().join(",")}|${[...skipped].sort().join(",")}`;
276
+ if (seen.has(stateKey))
277
+ return;
278
+ seen.add(stateKey);
279
+ const unmet = obligations.filter((obligation) => !skipped.has(obligation.id) && !obligationSatisfied(obligation, selected));
280
+ if (unmet.length === 0) {
281
+ best = new Set(selected);
282
+ return;
283
+ }
284
+ const obligation = unmet.sort((left, right) => {
285
+ const feasible = (value) => value.options.filter((option) => option.some((test) => !selected.has(test))).length;
286
+ return feasible(left) - feasible(right) || left.id.localeCompare(right.id);
287
+ })[0];
288
+ const additions = [...new Map(obligation.options
289
+ .map((option) => option.filter((test) => !selected.has(test)))
290
+ .filter((option) => option.length > 0)
291
+ .map((option) => [optionKey(option), option])).values()].sort((left, right) => left.length - right.length || optionKey(left).localeCompare(optionKey(right)));
292
+ for (const addition of additions) {
293
+ if (selected.size + addition.length >= best.size)
294
+ continue;
295
+ search(new Set([...selected, ...addition]), skipped, skippedByMetric);
296
+ }
297
+ const skippedCount = skippedByMetric.get(obligation.metric) ?? 0;
298
+ if (skippedCount < (skipLimits.get(obligation.metric) ?? 0)) {
299
+ const nextSkipped = new Set(skipped);
300
+ nextSkipped.add(obligation.id);
301
+ const nextCounts = new Map(skippedByMetric);
302
+ nextCounts.set(obligation.metric, skippedCount + 1);
303
+ search(selected, nextSkipped, nextCounts);
304
+ }
305
+ };
306
+ search(new Set(), new Set(), new Map());
307
+ const expanded = model.expand(best);
308
+ return {
309
+ optimal: true,
310
+ target,
311
+ metric,
312
+ selected: [...best].sort(),
313
+ expanded: [...expanded].sort(),
314
+ summary: coverageSummaryForTests(report, expanded),
315
+ exploredStates,
316
+ };
317
+ }
129
318
  function coverageCommand(runId, options, child) {
130
319
  return [
131
320
  "npx supercov runs",
@@ -354,13 +543,17 @@ function help() {
354
543
  supercov runs <run-id> coverage [--filter all|passed|failed] [--kind e2e] [--runner playwright] [--json]
355
544
  supercov runs <run-id> coverage kinds [--json]
356
545
  supercov runs <run-id> coverage runners [--json]
546
+ supercov runs <run-id> coverage scope [--limit N] [--offset N] [--json]
357
547
  supercov runs <run-id> coverage files [--filter all|passed|failed] [--limit N] [--offset N] [--json]
358
548
  supercov runs <run-id> coverage gaps [--filter all|passed|failed] [--kind e2e] [--limit N] [--offset N] [--json]
359
549
  supercov runs <run-id> coverage file <source-file> [--kind e2e] [--limit N] [--offset N] [--json]
360
550
  supercov runs <run-id> coverage decision <id|source-file:line> [--kind e2e] [--json]
361
551
  supercov runs <run-id> coverage covers <source-file:line> [--kind e2e] [--json]
362
552
  supercov runs <run-id> coverage test <id|name-fragment> [--kind e2e] [--limit N] [--json]
553
+ supercov runs <run-id> coverage minimize [--target 0..100] [--metric all|lines|statements|functions|branches|mcdc] [--filter all|passed|failed] [--limit N] [--offset N] [--json]
363
554
  supercov diff <older-run> <newer-run> [--limit N] [--json]
555
+ supercov merge <run-id> <run-id> [...]
556
+ supercov prune [--keep N] [--dry-run]
364
557
  supercov clean [--keep N] [--dry-run]
365
558
 
366
559
  Use "latest" as <run-id> to query the newest local run.
@@ -384,12 +577,14 @@ export function resolveCoverageQueryInvocation(command, args) {
384
577
  "summary",
385
578
  "kinds",
386
579
  "runners",
580
+ "scope",
387
581
  "files",
388
582
  "gaps",
389
583
  "file",
390
584
  "decision",
391
585
  "covers",
392
586
  "test",
587
+ "minimize",
393
588
  ]);
394
589
  if (!coverageCommands.has(child)) {
395
590
  throw new Error(`Unknown coverage query: ${child}. Try supercov help.`);
@@ -409,19 +604,19 @@ export async function runQueryCommand(command, args, root = process.cwd()) {
409
604
  if (command === "runs") {
410
605
  const availableRuns = discoverRuns(root);
411
606
  const runs = page(availableRuns, options).map((run) => {
412
- const storedReport = readJson(run.reportPath);
413
- const report = storedReport
414
- ? filteredCoverage(storedReport, options)
415
- : undefined;
607
+ const report = filteredCoverage(analyzeStoredRun(run), options);
416
608
  return {
417
609
  id: run.id,
418
- generatedAt: report?.generatedAt,
419
- lines: report?.summary.lines.percentage,
420
- branches: report?.summary.branches.percentage,
421
- mcdc: report?.summary.conditionCoveragePct,
610
+ generatedAt: report.generatedAt,
611
+ lines: report.summary.lines.percentage,
612
+ branches: report.summary.branches.percentage,
613
+ mcdc: report.summary.conditionCoveragePct,
422
614
  command: run.metadata?.command,
423
615
  durationMs: run.metadata?.durationMs,
616
+ timings: run.metadata?.timings,
424
617
  testExitCode: run.metadata?.testExitCode,
618
+ buildReused: run.metadata?.instrumentedBuildCache?.reused,
619
+ rawEvidence: run.metadata?.rawEvidence,
425
620
  ...(currentIntegrity
426
621
  ? compareRunIntegrity(run.metadata?.integrity, currentIntegrity)
427
622
  : { stale: undefined, reasons: [] }),
@@ -584,9 +779,73 @@ export async function runQueryCommand(command, args, root = process.cwd()) {
584
779
  tests: testCount,
585
780
  setups: setupCount,
586
781
  testOutcomes,
782
+ sourceScope: report.scope
783
+ ? {
784
+ mode: report.scope.mode,
785
+ roots: report.scope.roots,
786
+ included: report.scope.entries.filter((entry) => entry.status === "included").length,
787
+ excluded: report.scope.entries.filter((entry) => entry.status === "excluded").length,
788
+ ambiguous: report.scope.entries.filter((entry) => entry.status === "ambiguous").length,
789
+ }
790
+ : undefined,
587
791
  };
588
792
  return output(result, options, `run ${run.id}${filterLabel(options) ? ` (${filterLabel(options)})` : ""}${run.metadata?.testExitCode !== 0 ? ` [INVALID: test exit ${run.metadata?.testExitCode ?? "unknown"}]` : ""}${report.integrity?.stale ? ` [STALE: ${(report.integrity.staleReasons ?? []).join(", ")}]` : ""}\nlines ${pct(summary.lines.percentage)} (${summary.lines.covered}/${summary.lines.total})\nbranches ${pct(summary.branches.percentage)} (${summary.branches.covered}/${summary.branches.total})\nMC/DC ${pct(summary.conditionCoveragePct)} (${summary.coveredConditions}/${summary.conditions})${!selectedTestSet ? `\nconfidence: ${report.lines.filter((line) => line.confidence?.level === "asserted").length} asserted lines, ${report.lines.filter((line) => line.confidence?.level === "action").length} action-linked, ${report.lines.filter((line) => line.confidence?.level === "executed").length} execution-only; ${report.decisions.reduce((total, decision) => total + decision.conditions.filter((condition) => condition.assertionCovered).length, 0)} assertion-linked MC/DC conditions` : ""}\n${testCount} test(s)${setupCount ? ` + ${setupCount} setup scope(s)` : ""}; outcomes ${Object.entries(testOutcomes).filter(([, count]) => count > 0).map(([outcome, count]) => `${outcome}=${count}`).join(", ") || "none"}; ${gaps.length} file(s) have remaining obligations${(report.limitations?.length ?? 0) ? `; ${report.limitations.length} completeness blocker(s)` : ""}`);
589
793
  }
794
+ if (command === "minimize") {
795
+ const solverReport = selectedTestSet
796
+ ? {
797
+ ...report,
798
+ tests: report.tests.filter((test) => selectedTestSet.has(test.id)),
799
+ }
800
+ : report;
801
+ const minimized = minimumTestSet(solverReport, options.target, options.metric);
802
+ const selectedDetails = minimized.selected.map((id) => {
803
+ const test = report.tests.find((candidate) => candidate.id === id);
804
+ return {
805
+ id,
806
+ name: test.name,
807
+ file: test.file,
808
+ runner: test.provenance.runner,
809
+ kind: test.provenance.kind,
810
+ };
811
+ });
812
+ const selectedPage = page(selectedDetails, options);
813
+ const base = `${coverageCommand(run.id, options, "minimize")} --target ${options.target}${options.metric !== "all" ? ` --metric ${options.metric}` : ""}`;
814
+ const next = nextPageCommand(base, selectedDetails.length, selectedPage.length, options);
815
+ return output({
816
+ run: run.id,
817
+ ...minimized,
818
+ selectedCount: selectedDetails.length,
819
+ totalCandidateTests: solverReport.tests.filter((test) => test.role === "test").length,
820
+ offset: options.offset,
821
+ tests: selectedPage,
822
+ }, options, `exact minimum ${selectedDetails.length}/${solverReport.tests.filter((test) => test.role === "test").length} test(s) for ${options.target}% ${options.metric === "all" ? "coverage across all measured metrics" : options.metric}; explored ${minimized.exploredStates} state(s)\nlines ${pct(minimized.summary.lines.percentage)}, statements ${pct(minimized.summary.statements.percentage)}, functions ${pct(minimized.summary.functions.percentage)}, branches ${pct(minimized.summary.branches.percentage)}, MC/DC ${pct(minimized.summary.conditionCoveragePct)}\n${selectedPage.map((test) => `${test.id} ${test.kind}/${test.runner} ${test.file ?? "unknown"} ${test.name}`).join("\n")}\n${pageLabel(selectedDetails.length, selectedPage.length, options)}${next ? `\nnext page: ${next}` : ""}`);
823
+ }
824
+ if (command === "scope") {
825
+ if (!report.scope)
826
+ throw new Error("This run does not contain a source-scope inventory.");
827
+ const ordered = [...report.scope.entries].sort((left, right) => {
828
+ const rank = { ambiguous: 0, included: 1, excluded: 2 };
829
+ return rank[left.status] - rank[right.status] || left.file.localeCompare(right.file);
830
+ });
831
+ const selectedEntries = page(ordered, options);
832
+ const base = coverageCommand(run.id, options, "scope");
833
+ const next = nextPageCommand(base, ordered.length, selectedEntries.length, options);
834
+ const counts = {
835
+ included: ordered.filter((entry) => entry.status === "included").length,
836
+ excluded: ordered.filter((entry) => entry.status === "excluded").length,
837
+ ambiguous: ordered.filter((entry) => entry.status === "ambiguous").length,
838
+ };
839
+ return output({
840
+ run: run.id,
841
+ mode: report.scope.mode,
842
+ roots: report.scope.roots,
843
+ counts,
844
+ total: ordered.length,
845
+ offset: options.offset,
846
+ entries: selectedEntries,
847
+ }, options, `mode ${report.scope.mode}; roots ${report.scope.roots.join(", ") || "none"}; included ${counts.included}, excluded ${counts.excluded}, ambiguous ${counts.ambiguous}\n${selectedEntries.map((entry) => `${entry.status.toUpperCase()} ${entry.file} ${entry.reason}${entry.packageRoot ? ` [package ${entry.packageRoot}]` : ""}`).join("\n")}\n${pageLabel(ordered.length, selectedEntries.length, options)}${next ? `\nnext page: ${next}` : ""}`);
848
+ }
590
849
  if (command === "kinds" || command === "runners") {
591
850
  const dimension = command === "kinds" ? report.coverageByKind : report.coverageByRunner;
592
851
  const selectedDimension = page(dimension, options);