@flighthq/tool-capture 0.3.0 → 0.3.1-next.1041.35b950c
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.
- package/README.md +1 -1
- package/dist/baselineStore.d.ts +12 -1
- package/dist/baselineStore.d.ts.map +1 -1
- package/dist/baselineStore.js +83 -6
- package/dist/baselineStore.js.map +1 -1
- package/dist/bin.js +80 -6
- package/dist/bin.js.map +1 -1
- package/dist/captureBaselineCoverageManifest.d.ts +80 -0
- package/dist/captureBaselineCoverageManifest.d.ts.map +1 -0
- package/dist/captureBaselineCoverageManifest.js +178 -0
- package/dist/captureBaselineCoverageManifest.js.map +1 -0
- package/dist/captureBaselineSanity.d.ts +9 -0
- package/dist/captureBaselineSanity.d.ts.map +1 -0
- package/dist/captureBaselineSanity.js +32 -0
- package/dist/captureBaselineSanity.js.map +1 -0
- package/dist/captureBenchmark.d.ts.map +1 -1
- package/dist/captureBenchmark.js +5 -1
- package/dist/captureBenchmark.js.map +1 -1
- package/dist/captureDomReadback.d.ts +4 -0
- package/dist/captureDomReadback.d.ts.map +1 -0
- package/dist/captureDomReadback.js +51 -0
- package/dist/captureDomReadback.js.map +1 -0
- package/dist/captureEntry.d.ts +12 -3
- package/dist/captureEntry.d.ts.map +1 -1
- package/dist/captureEntry.js +87 -36
- package/dist/captureEntry.js.map +1 -1
- package/dist/captureEntryFilter.d.ts +5 -0
- package/dist/captureEntryFilter.d.ts.map +1 -0
- package/dist/captureEntryFilter.js +23 -0
- package/dist/captureEntryFilter.js.map +1 -0
- package/dist/captureFlightPreset.js +10 -4
- package/dist/captureFlightPreset.js.map +1 -1
- package/dist/captureProtocol.d.ts +3 -0
- package/dist/captureProtocol.d.ts.map +1 -1
- package/dist/captureProtocol.js.map +1 -1
- package/dist/captureResourceFailure.d.ts +4 -0
- package/dist/captureResourceFailure.d.ts.map +1 -0
- package/dist/captureResourceFailure.js +31 -0
- package/dist/captureResourceFailure.js.map +1 -0
- package/dist/captureScreenshotHash.d.ts +30 -0
- package/dist/captureScreenshotHash.d.ts.map +1 -0
- package/dist/captureScreenshotHash.js +108 -0
- package/dist/captureScreenshotHash.js.map +1 -0
- package/dist/captureServer.d.ts +8 -0
- package/dist/captureServer.d.ts.map +1 -1
- package/dist/captureServer.js +126 -22
- package/dist/captureServer.js.map +1 -1
- package/dist/captureSuite.d.ts +11 -0
- package/dist/captureSuite.d.ts.map +1 -1
- package/dist/captureSuite.js +6 -4
- package/dist/captureSuite.js.map +1 -1
- package/dist/captureValidation.d.ts +20 -3
- package/dist/captureValidation.d.ts.map +1 -1
- package/dist/captureValidation.js +222 -70
- package/dist/captureValidation.js.map +1 -1
- package/dist/captureWorkflow.d.ts.map +1 -1
- package/dist/captureWorkflow.js +3 -0
- package/dist/captureWorkflow.js.map +1 -1
- package/dist/functionalScene3Ds.d.ts.map +1 -1
- package/dist/functionalScene3Ds.js +5 -3
- package/dist/functionalScene3Ds.js.map +1 -1
- package/dist/functionalVerify.d.ts.map +1 -1
- package/dist/functionalVerify.js +57 -16
- package/dist/functionalVerify.js.map +1 -1
- package/package.json +5 -5
- package/src/baselineStore.test.ts +210 -7
- package/src/bin.test.ts +32 -0
- package/src/captureBaselineCoverageManifest.test.ts +368 -0
- package/src/captureBaselineSanity.test.ts +38 -0
- package/src/captureBenchmark.e2e.test.ts +29 -1
- package/src/captureDomReadback.test.ts +35 -0
- package/src/captureEntry.e2e.test.ts +108 -0
- package/src/captureEntryFilter.test.ts +45 -0
- package/src/captureEyes.e2e.test.ts +43 -0
- package/src/captureFlightPreset.test.ts +10 -0
- package/src/capturePage.test.ts +23 -3
- package/src/captureResourceFailure.test.ts +60 -0
- package/src/captureScreenshotHash.test.ts +142 -0
- package/src/captureServer.test.ts +103 -3
- package/src/captureValidation.test.ts +217 -36
- package/src/functionalScene3Ds.test.ts +7 -0
- package/src/functionalVerify.test.ts +33 -3
package/README.md
CHANGED
|
@@ -160,7 +160,7 @@ The update command writes stable baselines to `<subject>/benchmarks/<entry>.json
|
|
|
160
160
|
|
|
161
161
|
`iterations` is a minimum: the runner adaptively increases it until each timed sample reaches `sampleDurationMs`, avoiding zero-duration and timer-quantization noise for very fast targets.
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
A gating run with no committed baseline for any selected target is unconfigured: it reports the missing baseline evidence and exits non-zero instead of treating zero comparisons as clean. Once baselines exist, no calibration makes performance completely host-independent: renderer workloads stress different parts of CPUs, drivers, and GPUs. The gate therefore prefers a same-run ratio when `reference` is available, because shared host conditions cancel best. Choose a reference with a comparable resource path; a CPU-DOM versus discrete-GPU ratio still reflects that machine's CPU/GPU balance. Otherwise the gate compares `median × calibration throughput`, an estimate of host-normalized work. Keep raw medians for same-machine trends, use ratios for heterogeneous CI, and treat calibrated scores as a useful secondary signal rather than a physical unit. Benchmarks run serially by design so ordinary capture worker concurrency cannot contaminate them.
|
|
164
164
|
|
|
165
165
|
## Batch many resources and subjects
|
|
166
166
|
|
package/dist/baselineStore.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
import type { CaptureBaselineProvenance, CaptureBaselineProvenanceField, CaptureColumnBaseline } from '@flighthq/types/contract';
|
|
1
2
|
export type BaselineField = 'fingerprint' | 'sourceHash' | 'sha256';
|
|
3
|
+
export type CaptureBaselineEvidence = Readonly<CaptureColumnBaseline> & Required<Pick<CaptureColumnBaseline, 'fingerprint' | 'sha256'>>;
|
|
2
4
|
export declare function baselinePath(root: string, subject: string, name: string): string;
|
|
3
5
|
export declare function getBaselineField(root: string, subject: string, name: string, column: string, field: BaselineField): string | null;
|
|
4
|
-
export declare function
|
|
6
|
+
export declare function getBaselineProvenance(root: string, subject: string, name: string, column: string, field: CaptureBaselineProvenanceField): CaptureBaselineProvenance | null;
|
|
7
|
+
/**
|
|
8
|
+
* Replaces one column's captured evidence in a single read/write transaction. Fingerprint and exact
|
|
9
|
+
* screenshot hash are required together so the store cannot attribute two independent capture passes to
|
|
10
|
+
* one record. Optional evidence such as source/provenance is copied from the same value rather than
|
|
11
|
+
* preserved from an older column.
|
|
12
|
+
*/
|
|
13
|
+
export declare function setBaselineCaptureEvidence(root: string, subject: string, name: string, column: string, evidence: CaptureBaselineEvidence): void;
|
|
14
|
+
export declare function setBaselineField(root: string, subject: string, name: string, column: string, field: BaselineField, value: string, provenance?: Readonly<CaptureBaselineProvenance>): void;
|
|
15
|
+
export declare function setBaselineProvenance(root: string, subject: string, name: string, column: string, field: CaptureBaselineProvenanceField, provenance: Readonly<CaptureBaselineProvenance>): void;
|
|
5
16
|
//# sourceMappingURL=baselineStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baselineStore.d.ts","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"baselineStore.d.ts","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAEV,yBAAyB,EACzB,8BAA8B,EAC9B,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC;AACpE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GACnE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC;AASlE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,MAAM,GAAG,IAAI,CAEf;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,8BAA8B,GACpC,yBAAyB,GAAG,IAAI,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAaN;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC/C,IAAI,CAsBN;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,8BAA8B,EACrC,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC9C,IAAI,CAYN"}
|
package/dist/baselineStore.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
// Per-test committed baseline store: one JSON file per test at <subject-root>/baselines/<name>.json,
|
|
2
2
|
// holding every column's values, e.g. { "canvas": { "fingerprint": "…", "sha256": "…" }, "flight:webgl": {…} }.
|
|
3
|
-
// captureEntry
|
|
4
|
-
// (coarse render fingerprint).
|
|
5
|
-
//
|
|
6
|
-
//
|
|
3
|
+
// captureEntry produces each column's `sha256` (screenshot hash); captureValidation produces its
|
|
4
|
+
// `fingerprint` (coarse render fingerprint). The normal lifecycle therefore has two stages: sha256-only,
|
|
5
|
+
// then paired after validation. Each independently-written value owns its provenance. A join is refused
|
|
6
|
+
// only when BOTH provenance records exist and disagree; missing provenance is unknown and remains allowed
|
|
7
|
+
// for legacy records. Other columns still use read-merge-write. Output is prettier-compatible (sorted
|
|
8
|
+
// keys, 2-space, trailing newline) so it never churns the format gate. Replaces the old
|
|
9
|
+
// tools/baselines/<subject>/<name>/<renderer>/{fingerprint.txt,baseline.sha256}.
|
|
7
10
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
8
11
|
import { dirname, join } from 'node:path';
|
|
9
|
-
import { createCaptureBaseline, formatCaptureBaseline, getCaptureBaselineField, parseCaptureBaseline, setCaptureBaselineField, } from '@flighthq/capture/contract';
|
|
12
|
+
import { createCaptureBaseline, formatCaptureBaseline, getCaptureBaselineField, getCaptureBaselineProvenance, parseCaptureBaseline, setCaptureBaselineField, setCaptureBaselineProvenance, } from '@flighthq/capture/contract';
|
|
13
|
+
import { isRejectedCaptureBaselineHash, isUniformCaptureFingerprint } from './captureBaselineSanity.js';
|
|
10
14
|
// Per-subject baseline root: baselines colocate with their suite (functional/examples are
|
|
11
15
|
// top-level). One JSON file per test under the root's baselines/ dir.
|
|
12
16
|
const BASELINE_ROOTS = {
|
|
@@ -20,12 +24,85 @@ export function baselinePath(root, subject, name) {
|
|
|
20
24
|
export function getBaselineField(root, subject, name, column, field) {
|
|
21
25
|
return getCaptureBaselineField(readBaseline(baselinePath(root, subject, name)), column, field);
|
|
22
26
|
}
|
|
23
|
-
|
|
27
|
+
// What produced ONE of a column's committed values — `field` names which — or null when that value
|
|
28
|
+
// predates provenance recording. Reads as UNKNOWN, never as agreement.
|
|
29
|
+
export function getBaselineProvenance(root, subject, name, column, field) {
|
|
30
|
+
return getCaptureBaselineProvenance(readBaseline(baselinePath(root, subject, name)), column, field);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Replaces one column's captured evidence in a single read/write transaction. Fingerprint and exact
|
|
34
|
+
* screenshot hash are required together so the store cannot attribute two independent capture passes to
|
|
35
|
+
* one record. Optional evidence such as source/provenance is copied from the same value rather than
|
|
36
|
+
* preserved from an older column.
|
|
37
|
+
*/
|
|
38
|
+
export function setBaselineCaptureEvidence(root, subject, name, column, evidence) {
|
|
39
|
+
if (typeof evidence.fingerprint !== 'string' || typeof evidence.sha256 !== 'string') {
|
|
40
|
+
throw new Error(`refusing incomplete baseline evidence for ${subject}/${name}/${column}: fingerprint and sha256 must be written together`);
|
|
41
|
+
}
|
|
42
|
+
assertEvidenceFieldSanity(subject, name, column, 'fingerprint', evidence.fingerprint);
|
|
43
|
+
assertEvidenceFieldSanity(subject, name, column, 'sha256', evidence.sha256);
|
|
44
|
+
assertMatchingProvenance(subject, name, column, evidence.fingerprintProvenance, evidence.sha256Provenance);
|
|
45
|
+
const path = baselinePath(root, subject, name);
|
|
46
|
+
const data = readBaseline(path);
|
|
47
|
+
data[column] = { ...evidence };
|
|
48
|
+
writeBaseline(path, data);
|
|
49
|
+
}
|
|
50
|
+
export function setBaselineField(root, subject, name, column, field, value, provenance) {
|
|
24
51
|
const path = baselinePath(root, subject, name);
|
|
25
52
|
const data = readBaseline(path);
|
|
53
|
+
if (field === 'fingerprint' || field === 'sha256') {
|
|
54
|
+
assertEvidenceFieldSanity(subject, name, column, field, value);
|
|
55
|
+
assertMatchingProvenance(subject, name, column, field === 'fingerprint' ? provenance : getCaptureBaselineProvenance(data, column, 'fingerprint'), field === 'sha256' ? provenance : getCaptureBaselineProvenance(data, column, 'sha256'));
|
|
56
|
+
}
|
|
26
57
|
setCaptureBaselineField(data, column, field, value);
|
|
58
|
+
if (field === 'fingerprint' || field === 'sha256') {
|
|
59
|
+
if (provenance === undefined) {
|
|
60
|
+
clearCaptureBaselineProvenance(data, column, field);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
setCaptureBaselineProvenance(data, column, field, provenance);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
writeBaseline(path, data);
|
|
67
|
+
}
|
|
68
|
+
// Records what produced ONE of a column's values. Read-merge-write like the field setter, so it leaves
|
|
69
|
+
// every other column and every other field of this one untouched — no existing record is rewritten.
|
|
70
|
+
export function setBaselineProvenance(root, subject, name, column, field, provenance) {
|
|
71
|
+
const path = baselinePath(root, subject, name);
|
|
72
|
+
const data = readBaseline(path);
|
|
73
|
+
assertMatchingProvenance(subject, name, column, field === 'fingerprint' ? provenance : getCaptureBaselineProvenance(data, column, 'fingerprint'), field === 'sha256' ? provenance : getCaptureBaselineProvenance(data, column, 'sha256'));
|
|
74
|
+
setCaptureBaselineProvenance(data, column, field, provenance);
|
|
27
75
|
writeBaseline(path, data);
|
|
28
76
|
}
|
|
77
|
+
function assertEvidenceFieldSanity(subject, name, column, field, value) {
|
|
78
|
+
if (field === 'fingerprint' && isUniformCaptureFingerprint(value)) {
|
|
79
|
+
throw new Error(`refusing baseline evidence for ${subject}/${name}/${column}: fingerprint is uniform and cannot distinguish a rendered frame from a blank one`);
|
|
80
|
+
}
|
|
81
|
+
if (field === 'sha256' && isRejectedCaptureBaselineHash(value)) {
|
|
82
|
+
throw new Error(`refusing baseline evidence for ${subject}/${name}/${column}: sha256 is a known blank frame (${value.slice(0, 12)}…)`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function assertMatchingProvenance(subject, name, column, fingerprint, sha256) {
|
|
86
|
+
if (fingerprint === null || fingerprint === undefined || sha256 === null || sha256 === undefined)
|
|
87
|
+
return;
|
|
88
|
+
if (fingerprint.frames === sha256.frames &&
|
|
89
|
+
fingerprint.sourceHash === sha256.sourceHash &&
|
|
90
|
+
fingerprint.targetKind === sha256.targetKind &&
|
|
91
|
+
fingerprint.verifyPublished === sha256.verifyPublished &&
|
|
92
|
+
fingerprint.warmupFrames === sha256.warmupFrames) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
throw new Error(`refusing split baseline provenance for ${subject}/${name}/${column}: fingerprint and sha256 were captured under different conditions`);
|
|
96
|
+
}
|
|
97
|
+
function clearCaptureBaselineProvenance(baseline, column, field) {
|
|
98
|
+
const entry = baseline[column];
|
|
99
|
+
if (entry === undefined)
|
|
100
|
+
return;
|
|
101
|
+
if (field === 'fingerprint')
|
|
102
|
+
delete entry.fingerprintProvenance;
|
|
103
|
+
else
|
|
104
|
+
delete entry.sha256Provenance;
|
|
105
|
+
}
|
|
29
106
|
function readBaseline(path) {
|
|
30
107
|
if (!existsSync(path))
|
|
31
108
|
return createCaptureBaseline();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baselineStore.js","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,gHAAgH;AAChH,
|
|
1
|
+
{"version":3,"file":"baselineStore.js","sourceRoot":"","sources":["../src/baselineStore.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -30,14 +30,14 @@ const USAGE = `usage:
|
|
|
30
30
|
tool-capture batch [--config <file>] [--only <subject>] [--subjects-parallel <n>] [options]
|
|
31
31
|
|
|
32
32
|
capture options:
|
|
33
|
-
--filter <name> --renderer <ids> --out <dir> --wait <ms> --frames <n>
|
|
33
|
+
--filter <substring> --filter-exact <name> --renderer <ids> --out <dir> --wait <ms> --frames <n>
|
|
34
34
|
--parallel <n> --sequential --dev --build --update-baseline --fail-on-changed
|
|
35
35
|
--fail-on-error --verify --no-verify --observe --retries <n> --capture-timeout <ms>
|
|
36
36
|
|
|
37
37
|
Every command writes a versioned aggregate JSON report beneath its artifact directory.
|
|
38
38
|
|
|
39
39
|
validation options:
|
|
40
|
-
--report --update-fingerprints --no-regression --no-parity
|
|
40
|
+
--report --update-fingerprints --update-coverage --no-regression --no-parity
|
|
41
41
|
--stability-epsilon <n> --regression-tolerance <n> --parity-tolerance <n>
|
|
42
42
|
|
|
43
43
|
FLIGHT_CAPTURE_WORKER_COUNT pins worker concurrency when --parallel is omitted.
|
|
@@ -53,6 +53,52 @@ batch options:
|
|
|
53
53
|
|
|
54
54
|
Manifest: { "subject": "app", "entries": [{ "name": "home", "renderers": ["webgl"],
|
|
55
55
|
"routes": { "webgl": "pages/home/" } }] }`;
|
|
56
|
+
const CAPTURE_CLI_COMMANDS = new Set(['batch', 'benchmark', 'capture', 'observe', 'validate']);
|
|
57
|
+
const CAPTURE_CLI_OPTIONS = new Set([
|
|
58
|
+
'benchmark-reference',
|
|
59
|
+
'build',
|
|
60
|
+
'capture-timeout',
|
|
61
|
+
'config',
|
|
62
|
+
'dev',
|
|
63
|
+
'dir',
|
|
64
|
+
'fail-on-changed',
|
|
65
|
+
'fail-on-error',
|
|
66
|
+
'filter',
|
|
67
|
+
'filter-exact',
|
|
68
|
+
'frames',
|
|
69
|
+
'iterations',
|
|
70
|
+
'manifest',
|
|
71
|
+
'no-parity',
|
|
72
|
+
'no-regression',
|
|
73
|
+
'no-verify',
|
|
74
|
+
'observe',
|
|
75
|
+
'only',
|
|
76
|
+
'out',
|
|
77
|
+
'parallel',
|
|
78
|
+
'parity-tolerance',
|
|
79
|
+
'performance-tolerance',
|
|
80
|
+
'regression-tolerance',
|
|
81
|
+
'renderer',
|
|
82
|
+
'report',
|
|
83
|
+
'retries',
|
|
84
|
+
'root',
|
|
85
|
+
'sample-duration',
|
|
86
|
+
'samples',
|
|
87
|
+
'sequential',
|
|
88
|
+
'stability-epsilon',
|
|
89
|
+
'stability-tolerance',
|
|
90
|
+
'subject',
|
|
91
|
+
'subjects-parallel',
|
|
92
|
+
'tool',
|
|
93
|
+
'update-baseline',
|
|
94
|
+
'update-benchmarks',
|
|
95
|
+
'update-coverage',
|
|
96
|
+
'update-fingerprints',
|
|
97
|
+
'url',
|
|
98
|
+
'verify',
|
|
99
|
+
'wait',
|
|
100
|
+
'warmup',
|
|
101
|
+
]);
|
|
56
102
|
function flag(argv, key) {
|
|
57
103
|
const equals = argv.find((arg) => arg.startsWith(`--${key}=`));
|
|
58
104
|
if (equals !== undefined)
|
|
@@ -159,6 +205,7 @@ function captureOptions(argv) {
|
|
|
159
205
|
return {
|
|
160
206
|
outBase: flag(argv, 'out') ?? '.artifacts',
|
|
161
207
|
filter: flag(argv, 'filter'),
|
|
208
|
+
filterExact: flag(argv, 'filter-exact'),
|
|
162
209
|
rendererFilter: (flag(argv, 'renderer') ?? '').split(',').filter(Boolean),
|
|
163
210
|
extraWait: parseNonNegativeInteger(flag(argv, 'wait'), 0),
|
|
164
211
|
captureFrames: parseNonNegativeInteger(frames?.split(',')[0], 0),
|
|
@@ -174,12 +221,26 @@ function captureOptions(argv) {
|
|
|
174
221
|
}
|
|
175
222
|
function validationOptions(argv, subject, manifest) {
|
|
176
223
|
const preset = getFlightCaptureValidationPreset(subject);
|
|
224
|
+
const updateCoverage = hasFlag(argv, 'update-coverage');
|
|
225
|
+
const filter = flag(argv, 'filter');
|
|
226
|
+
const filterExact = flag(argv, 'filter-exact');
|
|
227
|
+
const rendererFilter = (flag(argv, 'renderer') ?? '').split(',').filter(Boolean);
|
|
228
|
+
// ★ The same guard scripts/reachability.ts puts on its baseline: an entry-filtered run has seen only
|
|
229
|
+
// part of the subject, so accepting its coverage as the pin would silently retire every entry outside
|
|
230
|
+
// the filter — the erosion this manifest exists to catch, performed by the tool itself.
|
|
231
|
+
// `--renderer` needs no such refusal: the regression tier is renderer-scoped by definition, and a
|
|
232
|
+
// renderer-scoped update carries the pins it did not run forward instead of dropping them.
|
|
233
|
+
if (updateCoverage && (filter !== undefined || filterExact !== undefined)) {
|
|
234
|
+
throw new Error('Capture baseline coverage manifest updates must be whole-subject — drop --filter');
|
|
235
|
+
}
|
|
177
236
|
return {
|
|
178
|
-
filter
|
|
179
|
-
|
|
237
|
+
filter,
|
|
238
|
+
filterExact,
|
|
239
|
+
rendererFilter,
|
|
180
240
|
captureFrames: Math.max(1, parseNonNegativeInteger(flag(argv, 'frames'), 1)),
|
|
181
241
|
report: hasFlag(argv, 'report'),
|
|
182
242
|
updateFingerprints: hasFlag(argv, 'update-fingerprints'),
|
|
243
|
+
updateCoverage,
|
|
183
244
|
gateRegression: !hasFlag(argv, 'no-regression'),
|
|
184
245
|
gateParity: !hasFlag(argv, 'no-parity'),
|
|
185
246
|
stabilityEpsilon: parseNumber(flag(argv, 'stability-epsilon')),
|
|
@@ -250,6 +311,11 @@ async function batch(argv) {
|
|
|
250
311
|
}
|
|
251
312
|
async function main() {
|
|
252
313
|
const [command, ...argv] = process.argv.slice(2);
|
|
314
|
+
if (command === undefined || !CAPTURE_CLI_COMMANDS.has(command)) {
|
|
315
|
+
console.error(USAGE);
|
|
316
|
+
process.exit(2);
|
|
317
|
+
}
|
|
318
|
+
validateCaptureCliOptions(argv);
|
|
253
319
|
// Pinned once for the process rather than threaded through every option bag: the budget governs
|
|
254
320
|
// waits in the capture core, the validation loader and the stall reason alike, and those are reached
|
|
255
321
|
// from three different call shapes. One resolution point is also what keeps `--capture-timeout` and
|
|
@@ -278,8 +344,6 @@ async function main() {
|
|
|
278
344
|
process.exit(await benchmark(argv));
|
|
279
345
|
if (command === 'batch')
|
|
280
346
|
process.exit(await batch(argv));
|
|
281
|
-
console.error(USAGE);
|
|
282
|
-
process.exit(2);
|
|
283
347
|
}
|
|
284
348
|
function captureWorkerCount(argv) {
|
|
285
349
|
// The resolver's four-worker EXPEDIENT keeps today's capture legs usable under both CPU starvation
|
|
@@ -310,6 +374,16 @@ function removeBatchOptions(argv) {
|
|
|
310
374
|
}
|
|
311
375
|
return result;
|
|
312
376
|
}
|
|
377
|
+
function validateCaptureCliOptions(argv) {
|
|
378
|
+
for (const argument of argv) {
|
|
379
|
+
if (!argument.startsWith('--'))
|
|
380
|
+
continue;
|
|
381
|
+
const equalsIndex = argument.indexOf('=');
|
|
382
|
+
const name = argument.slice(2, equalsIndex < 0 ? undefined : equalsIndex);
|
|
383
|
+
if (!CAPTURE_CLI_OPTIONS.has(name))
|
|
384
|
+
throw new Error(`unknown option --${name}`);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
313
387
|
main().catch((err) => {
|
|
314
388
|
if (isBrowserClosedError(err))
|
|
315
389
|
process.exit(130);
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/** The three kinds of evidence a capture target can carry. Each is independently losable. */
|
|
2
|
+
export type CaptureBaselineEvidenceKind = 'fingerprint' | 'oracle' | 'screenshot';
|
|
3
|
+
export interface CaptureBaselineCoverageManifest {
|
|
4
|
+
schemaVersion: 2;
|
|
5
|
+
/**
|
|
6
|
+
* Per subject (`functional`, `examples`): each `entry/renderer` identity mapped to the sorted evidence
|
|
7
|
+
* kinds it carries. A target with no evidence at all is absent rather than mapped to an empty list.
|
|
8
|
+
*/
|
|
9
|
+
subjects: Record<string, Record<string, CaptureBaselineEvidenceKind[]>>;
|
|
10
|
+
}
|
|
11
|
+
export interface CaptureBaselineCoverageDiff {
|
|
12
|
+
/** Identities covered now that the manifest does not record. */
|
|
13
|
+
gained: string[];
|
|
14
|
+
/** Identities the manifest records that ran and are NO LONGER covered. A failure. */
|
|
15
|
+
lost: string[];
|
|
16
|
+
/** Identities the manifest records that this run never visited. Only meaningful whole-repo. */
|
|
17
|
+
absent: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare const CAPTURE_BASELINE_COVERAGE_MANIFEST_VERSION = 2;
|
|
20
|
+
export declare const CAPTURE_BASELINE_EVIDENCE_KINDS: readonly CaptureBaselineEvidenceKind[];
|
|
21
|
+
/** Where the committed pin lives — one file, keyed by subject, beside the reachability baseline. */
|
|
22
|
+
export declare function captureBaselineCoverageManifestPath(root: string): string;
|
|
23
|
+
export declare function createCaptureBaselineCoverageManifest(subjects: Readonly<Record<string, Readonly<Record<string, readonly CaptureBaselineEvidenceKind[]>>>>): CaptureBaselineCoverageManifest;
|
|
24
|
+
/**
|
|
25
|
+
* Diffs observed coverage against the manifest for one subject.
|
|
26
|
+
*
|
|
27
|
+
* `visited` is every identity whose coverage the run DETERMINED, so a scoped run is judged only on what
|
|
28
|
+
* it settled. `scope.undetermined` names the ones it could not settle at all (a page that never loaded):
|
|
29
|
+
* those are neither a loss nor a vanishing, because the run learned nothing about them.
|
|
30
|
+
* A LOSS (visited, but no baseline) is reportable from any run — the target was there and its evidence
|
|
31
|
+
* was not. An ABSENCE (pinned but never visited) is only meaningful when the run could have visited it,
|
|
32
|
+
* because otherwise "not visited" is indistinguishable from "filtered out".
|
|
33
|
+
*
|
|
34
|
+
* Scope is therefore expressed precisely rather than as one boolean: `entryFiltered` suppresses the
|
|
35
|
+
* absence check entirely (any entry could have been excluded), and `activeRenderers` narrows it to the
|
|
36
|
+
* renderers this run actually ran, so `--renderer=webgl` does not report every canvas pin as vanished.
|
|
37
|
+
*/
|
|
38
|
+
export declare function diffCaptureBaselineCoverage(manifest: Readonly<CaptureBaselineCoverageManifest>, subject: string, covered: Readonly<Record<string, readonly CaptureBaselineEvidenceKind[]>>, visited: readonly string[], scope: Readonly<{
|
|
39
|
+
entryFiltered: boolean;
|
|
40
|
+
activeRenderers: readonly string[] | null;
|
|
41
|
+
undetermined?: readonly string[];
|
|
42
|
+
/**
|
|
43
|
+
* The evidence kinds this run was able to observe. A run that never looked at screenshots must not
|
|
44
|
+
* report every screenshot pin as lost — the same not-observed-is-not-absent rule the other two scope
|
|
45
|
+
* fields apply to entries and renderers, applied to the third axis.
|
|
46
|
+
*/
|
|
47
|
+
kinds?: readonly CaptureBaselineEvidenceKind[];
|
|
48
|
+
}>): CaptureBaselineCoverageDiff;
|
|
49
|
+
/** `entry/renderer`, the identity a manifest pins. */
|
|
50
|
+
export declare function formatCaptureBaselineCoverageIdentity(entry: string, renderer: string): string;
|
|
51
|
+
/** `entry/renderer#kind` — the unit a loss is named in. `#` because a renderer id may contain `:`. */
|
|
52
|
+
export declare function formatCaptureBaselineEvidenceIdentity(identity: string, kind: CaptureBaselineEvidenceKind): string;
|
|
53
|
+
/**
|
|
54
|
+
* True when the diff records something the operator must accept or repair — in EITHER direction.
|
|
55
|
+
*
|
|
56
|
+
* A gain fails too, and that is deliberate. The manifest is an exact set, not a floor: an unaccepted gain
|
|
57
|
+
* means the pin no longer describes the tree, so it ages silently until someone finally accepts a mix of
|
|
58
|
+
* current and stale. It also closes the case that justifies identities over a count in the first place —
|
|
59
|
+
* a same-count SWAP, where one target loses its baseline and a different one gains one. Against a count
|
|
60
|
+
* that reconciles; against a floor that only fails on loss it is half-reported; only an exact set names
|
|
61
|
+
* both halves. The sibling registrar manifest fails in both directions for the same reason.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isCaptureBaselineCoverageFailure(diff: Readonly<CaptureBaselineCoverageDiff>): boolean;
|
|
64
|
+
/** Every `target#kind` a manifest pins for one subject, sorted. */
|
|
65
|
+
export declare function listCaptureBaselineEvidence(manifest: Readonly<CaptureBaselineCoverageManifest>, subject: string): string[];
|
|
66
|
+
/** The committed pin, or an empty manifest when none exists yet. A missing file is not an error. */
|
|
67
|
+
export declare function readCaptureBaselineCoverageManifest(root: string): CaptureBaselineCoverageManifest;
|
|
68
|
+
/**
|
|
69
|
+
* Rewrites ONE subject's pin, preserving every other subject — an update run covers the subject it ran and
|
|
70
|
+
* knows nothing about the other, so it must not speak for it.
|
|
71
|
+
*
|
|
72
|
+
* `activeRenderers` and `determined` apply the same rule one level down, twice. The regression tier is
|
|
73
|
+
* legitimately renderer-scoped (`--renderer=canvas,webgl,webgpu`; DOM produces no fingerprint), so refusing
|
|
74
|
+
* every scoped update would refuse the tier's own canonical command; and within an accepted run a page that
|
|
75
|
+
* failed to load settles nothing about its target. So a pin is retired ONLY when this run positively
|
|
76
|
+
* determined that identity to be uncovered. Everything else is carried forward. One flaky target therefore
|
|
77
|
+
* cannot quietly retire a pin, and cannot block the whole acceptance either.
|
|
78
|
+
*/
|
|
79
|
+
export declare function writeCaptureBaselineCoverageManifest(root: string, subject: string, covered: Readonly<Record<string, readonly CaptureBaselineEvidenceKind[]>>, activeRenderers?: readonly string[] | null, determined?: readonly string[] | null, observedKinds?: readonly CaptureBaselineEvidenceKind[] | null): CaptureBaselineCoverageManifest;
|
|
80
|
+
//# sourceMappingURL=captureBaselineCoverageManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureBaselineCoverageManifest.d.ts","sourceRoot":"","sources":["../src/captureBaselineCoverageManifest.ts"],"names":[],"mappings":"AAqCA,6FAA6F;AAC7F,MAAM,MAAM,2BAA2B,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElF,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,CAAC,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,2BAA2B;IAC1C,gEAAgE;IAChE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qFAAqF;IACrF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+FAA+F;IAC/F,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,0CAA0C,IAAI,CAAC;AAE5D,eAAO,MAAM,+BAA+B,EAAE,SAAS,2BAA2B,EAIjF,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,GACnG,+BAA+B,CAcjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,QAAQ,CAAC,+BAA+B,CAAC,EACnD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC,CAAC,EACzE,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,QAAQ,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,2BAA2B,EAAE,CAAC;CAChD,CAAC,GACD,2BAA2B,CAiC7B;AAED,sDAAsD;AACtD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED,sGAAsG;AACtG,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,MAAM,CAEjH;AAED;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAErG;AAED,mEAAmE;AACnE,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,QAAQ,CAAC,+BAA+B,CAAC,EACnD,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAKV;AAED,oGAAoG;AACpG,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,+BAA+B,CAejG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,2BAA2B,EAAE,CAAC,CAAC,EACzE,eAAe,GAAE,SAAS,MAAM,EAAE,GAAG,IAAW,EAChD,UAAU,GAAE,SAAS,MAAM,EAAE,GAAG,IAAW,EAC3C,aAAa,GAAE,SAAS,2BAA2B,EAAE,GAAG,IAAW,GAClE,+BAA+B,CAuBjC"}
|