@flighthq/tool-capture 0.3.0-next.906.07cea63 → 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 +2 -2
- package/dist/baselineStore.d.ts +13 -2
- 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 +99 -9
- 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/captureBrowser.d.ts +1 -0
- package/dist/captureBrowser.d.ts.map +1 -1
- package/dist/captureBrowser.js +20 -4
- package/dist/captureBrowser.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 +14 -3
- package/dist/captureEntry.d.ts.map +1 -1
- package/dist/captureEntry.js +151 -51
- 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 +22 -6
- package/dist/captureFlightPreset.js.map +1 -1
- package/dist/captureFormat.d.ts +1 -1
- package/dist/captureFormat.d.ts.map +1 -1
- package/dist/captureFormat.js +2 -1
- package/dist/captureFormat.js.map +1 -1
- package/dist/capturePage.d.ts +4 -2
- package/dist/capturePage.d.ts.map +1 -1
- package/dist/capturePage.js +14 -0
- package/dist/capturePage.js.map +1 -1
- package/dist/captureProtocol.d.ts +5 -0
- package/dist/captureProtocol.d.ts.map +1 -1
- package/dist/captureProtocol.js.map +1 -1
- package/dist/captureRegistryMiss.d.ts +8 -0
- package/dist/captureRegistryMiss.d.ts.map +1 -0
- package/dist/captureRegistryMiss.js +41 -0
- package/dist/captureRegistryMiss.js.map +1 -0
- 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 +136 -38
- package/dist/captureServer.js.map +1 -1
- package/dist/captureSourceHash.d.ts +4 -0
- package/dist/captureSourceHash.d.ts.map +1 -0
- package/dist/captureSourceHash.js +22 -0
- package/dist/captureSourceHash.js.map +1 -0
- package/dist/captureSuite.d.ts +11 -0
- package/dist/captureSuite.d.ts.map +1 -1
- package/dist/captureSuite.js +12 -6
- package/dist/captureSuite.js.map +1 -1
- package/dist/captureTimeout.d.ts +4 -0
- package/dist/captureTimeout.d.ts.map +1 -0
- package/dist/captureTimeout.js +39 -0
- package/dist/captureTimeout.js.map +1 -0
- package/dist/captureValidation.d.ts +57 -1
- package/dist/captureValidation.d.ts.map +1 -1
- package/dist/captureValidation.js +445 -51
- package/dist/captureValidation.js.map +1 -1
- package/dist/captureWorkerCount.d.ts +2 -0
- package/dist/captureWorkerCount.d.ts.map +1 -0
- package/dist/captureWorkerCount.js +20 -0
- package/dist/captureWorkerCount.js.map +1 -0
- package/dist/captureWorkflow.d.ts +8 -0
- package/dist/captureWorkflow.d.ts.map +1 -1
- package/dist/captureWorkflow.js +18 -5
- package/dist/captureWorkflow.js.map +1 -1
- package/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.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 +3 -3
- package/dist/functionalVerify.d.ts.map +1 -1
- package/dist/functionalVerify.js +136 -35
- package/dist/functionalVerify.js.map +1 -1
- package/package.json +7 -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/captureEntry.test.ts +36 -0
- package/src/captureEntryFilter.test.ts +45 -0
- package/src/captureEyes.e2e.test.ts +75 -1
- package/src/captureFlightPreset.test.ts +22 -0
- package/src/captureFormat.test.ts +22 -0
- package/src/capturePage.test.ts +48 -5
- package/src/captureRegistryMiss.test.ts +106 -0
- package/src/captureResourceFailure.test.ts +60 -0
- package/src/captureScreenshotHash.test.ts +142 -0
- package/src/captureServer.test.ts +133 -7
- package/src/captureSourceHash.test.ts +62 -0
- package/src/captureTimeout.test.ts +77 -0
- package/src/captureValidation.test.ts +402 -1
- package/src/captureWorkerCount.test.ts +28 -0
- package/src/captureWorkflow.test.ts +8 -1
- package/src/functionalScene3Ds.test.ts +7 -0
- package/src/functionalVerify.test.ts +106 -6
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ The adapter is inert outside a tool-capture browser. During capture it registers
|
|
|
87
87
|
await verifyCaptureTarget(exampleModule, renderer);
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Fingerprints use the `<grid-size>:<rgb-hex>` format produced by `
|
|
90
|
+
Fingerprints use the `<grid-size>:<rgb-hex>` format produced by `formatBitmapFingerprint`. Once the page reaches a terminal verification state, validation is turn-key:
|
|
91
91
|
|
|
92
92
|
```sh
|
|
93
93
|
tool-capture validate --dir dist --no-regression
|
|
@@ -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
|
-
|
|
1
|
+
import type { CaptureBaselineProvenance, CaptureBaselineProvenanceField, CaptureColumnBaseline } from '@flighthq/types/contract';
|
|
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
|
@@ -15,7 +15,9 @@ import { isBrowserClosedError } from './captureInterrupt.js';
|
|
|
15
15
|
import { readCaptureManifest } from './captureManifest.js';
|
|
16
16
|
import { resolveCaptureDirectoryServer, resolveServer, resolveStaticServer } from './captureServer.js';
|
|
17
17
|
import { runCaptureSuite } from './captureSuite.js';
|
|
18
|
+
import { resolveCaptureTimeoutMs, setCaptureTimeoutMs } from './captureTimeout.js';
|
|
18
19
|
import { runCaptureValidation } from './captureValidation.js';
|
|
20
|
+
import { resolveCaptureWorkerCount } from './captureWorkerCount.js';
|
|
19
21
|
import { runCaptureBatch } from './captureWorkflow.js';
|
|
20
22
|
const USAGE = `usage:
|
|
21
23
|
tool-capture observe <url> [--out <dir>] [--wait <ms>] [--frames <n>] [--retries <n>]
|
|
@@ -28,16 +30,20 @@ const USAGE = `usage:
|
|
|
28
30
|
tool-capture batch [--config <file>] [--only <subject>] [--subjects-parallel <n>] [options]
|
|
29
31
|
|
|
30
32
|
capture options:
|
|
31
|
-
--filter <name> --renderer <ids> --out <dir> --wait <ms> --frames <n>
|
|
33
|
+
--filter <substring> --filter-exact <name> --renderer <ids> --out <dir> --wait <ms> --frames <n>
|
|
32
34
|
--parallel <n> --sequential --dev --build --update-baseline --fail-on-changed
|
|
33
|
-
--fail-on-error --verify --no-verify --observe --retries <n>
|
|
35
|
+
--fail-on-error --verify --no-verify --observe --retries <n> --capture-timeout <ms>
|
|
34
36
|
|
|
35
37
|
Every command writes a versioned aggregate JSON report beneath its artifact directory.
|
|
36
38
|
|
|
37
39
|
validation options:
|
|
38
|
-
--report --update-fingerprints --no-regression --no-parity
|
|
40
|
+
--report --update-fingerprints --update-coverage --no-regression --no-parity
|
|
39
41
|
--stability-epsilon <n> --regression-tolerance <n> --parity-tolerance <n>
|
|
40
42
|
|
|
43
|
+
FLIGHT_CAPTURE_WORKER_COUNT pins worker concurrency when --parallel is omitted.
|
|
44
|
+
FLIGHT_CAPTURE_TIMEOUT_MS pins the per-wait budget (page load, frame poll, verification) when
|
|
45
|
+
--capture-timeout is omitted; default 15000. Raise it on contended or software-adapter machines.
|
|
46
|
+
|
|
41
47
|
benchmark options:
|
|
42
48
|
--warmup <n> --iterations <n> --samples <n> --sample-duration <ms> --benchmark-reference <renderer>
|
|
43
49
|
--performance-tolerance <fraction> --stability-tolerance <fraction> --retries <n> --update-benchmarks
|
|
@@ -47,6 +53,52 @@ batch options:
|
|
|
47
53
|
|
|
48
54
|
Manifest: { "subject": "app", "entries": [{ "name": "home", "renderers": ["webgl"],
|
|
49
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
|
+
]);
|
|
50
102
|
function flag(argv, key) {
|
|
51
103
|
const equals = argv.find((arg) => arg.startsWith(`--${key}=`));
|
|
52
104
|
if (equals !== undefined)
|
|
@@ -153,10 +205,11 @@ function captureOptions(argv) {
|
|
|
153
205
|
return {
|
|
154
206
|
outBase: flag(argv, 'out') ?? '.artifacts',
|
|
155
207
|
filter: flag(argv, 'filter'),
|
|
208
|
+
filterExact: flag(argv, 'filter-exact'),
|
|
156
209
|
rendererFilter: (flag(argv, 'renderer') ?? '').split(',').filter(Boolean),
|
|
157
210
|
extraWait: parseNonNegativeInteger(flag(argv, 'wait'), 0),
|
|
158
211
|
captureFrames: parseNonNegativeInteger(frames?.split(',')[0], 0),
|
|
159
|
-
workerCount:
|
|
212
|
+
workerCount: captureWorkerCount(argv),
|
|
160
213
|
sequential: hasFlag(argv, 'sequential'),
|
|
161
214
|
updateBaseline: hasFlag(argv, 'update-baseline'),
|
|
162
215
|
failOnChanged: hasFlag(argv, 'fail-on-changed'),
|
|
@@ -168,19 +221,33 @@ function captureOptions(argv) {
|
|
|
168
221
|
}
|
|
169
222
|
function validationOptions(argv, subject, manifest) {
|
|
170
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
|
+
}
|
|
171
236
|
return {
|
|
172
|
-
filter
|
|
173
|
-
|
|
237
|
+
filter,
|
|
238
|
+
filterExact,
|
|
239
|
+
rendererFilter,
|
|
174
240
|
captureFrames: Math.max(1, parseNonNegativeInteger(flag(argv, 'frames'), 1)),
|
|
175
241
|
report: hasFlag(argv, 'report'),
|
|
176
242
|
updateFingerprints: hasFlag(argv, 'update-fingerprints'),
|
|
243
|
+
updateCoverage,
|
|
177
244
|
gateRegression: !hasFlag(argv, 'no-regression'),
|
|
178
245
|
gateParity: !hasFlag(argv, 'no-parity'),
|
|
179
246
|
stabilityEpsilon: parseNumber(flag(argv, 'stability-epsilon')),
|
|
180
247
|
regressionTolerance: parseNumber(flag(argv, 'regression-tolerance')),
|
|
181
248
|
parityTolerance: parseNumber(flag(argv, 'parity-tolerance')),
|
|
182
249
|
sequential: hasFlag(argv, 'sequential'),
|
|
183
|
-
workerCount:
|
|
250
|
+
workerCount: captureWorkerCount(argv),
|
|
184
251
|
fingerprintSkip: manifest?.validation?.fingerprintSkip ?? (manifest === null ? preset.fingerprintSkip : []),
|
|
185
252
|
paritySkip: manifest?.validation?.paritySkip ?? (manifest === null ? preset.paritySkip : {}),
|
|
186
253
|
parityGroups: manifest?.validation?.parityGroups ?? (manifest === null ? preset.parityGroups : undefined),
|
|
@@ -244,6 +311,16 @@ async function batch(argv) {
|
|
|
244
311
|
}
|
|
245
312
|
async function main() {
|
|
246
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);
|
|
319
|
+
// Pinned once for the process rather than threaded through every option bag: the budget governs
|
|
320
|
+
// waits in the capture core, the validation loader and the stall reason alike, and those are reached
|
|
321
|
+
// from three different call shapes. One resolution point is also what keeps `--capture-timeout` and
|
|
322
|
+
// FLIGHT_CAPTURE_TIMEOUT_MS from being able to mean different things in different waits.
|
|
323
|
+
setCaptureTimeoutMs(resolveCaptureTimeoutMs(flag(argv, 'capture-timeout'), process.env['FLIGHT_CAPTURE_TIMEOUT_MS']));
|
|
247
324
|
if (command === 'observe') {
|
|
248
325
|
const url = argv[0];
|
|
249
326
|
if (url === undefined || url.startsWith('--'))
|
|
@@ -267,8 +344,11 @@ async function main() {
|
|
|
267
344
|
process.exit(await benchmark(argv));
|
|
268
345
|
if (command === 'batch')
|
|
269
346
|
process.exit(await batch(argv));
|
|
270
|
-
|
|
271
|
-
|
|
347
|
+
}
|
|
348
|
+
function captureWorkerCount(argv) {
|
|
349
|
+
// The resolver's four-worker EXPEDIENT keeps today's capture legs usable under both CPU starvation
|
|
350
|
+
// and workspace-mount descriptor bursts; available parallelism, not four itself, is the sizing rule.
|
|
351
|
+
return resolveCaptureWorkerCount(flag(argv, 'parallel'), process.env['FLIGHT_CAPTURE_WORKER_COUNT']);
|
|
272
352
|
}
|
|
273
353
|
function parseNonNegativeInteger(value, fallback) {
|
|
274
354
|
if (value === undefined)
|
|
@@ -294,6 +374,16 @@ function removeBatchOptions(argv) {
|
|
|
294
374
|
}
|
|
295
375
|
return result;
|
|
296
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
|
+
}
|
|
297
387
|
main().catch((err) => {
|
|
298
388
|
if (isBrowserClosedError(err))
|
|
299
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"}
|