@flighthq/tool-capture 0.2.0 → 0.2.1-next.410.a23f189

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.
@@ -1 +1 @@
1
- {"version":3,"file":"captureBrowser.d.ts","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhE,wBAAsB,aAAa,CACjC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACzD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CA+FxD"}
1
+ {"version":3,"file":"captureBrowser.d.ts","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEhE,wBAAsB,aAAa,CACjC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACzD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CAoHxD"}
@@ -63,6 +63,15 @@ export async function launchBrowser(options = {}) {
63
63
  }
64
64
  return realGetContext.call(this, type, attrs);
65
65
  };
66
+ // A scene whose first frames render blank while it warms up (async mesh/texture upload, an IBL
67
+ // bake, a float render target) needs more than `frames` frames before its first non-blank frame.
68
+ // Freezing hard on frame N would then shoot black. So for a GPU verifier the halt treats `frames`
69
+ // as a minimum: once past it, keep advancing until the verifier publishes a real (non-blank) frame,
70
+ // up to this ceiling. Scenes already non-blank by frame N halt at exactly N (unchanged), so stable
71
+ // baselines are unaffected; only warm-up-slow scenes render the extra frames. A scene that stays
72
+ // blank to the ceiling still stops, and the verifier guard in captureEntry then fails it — no false
73
+ // green, no unbounded loop (captureEntry's own 15s wait is the outer bound either way).
74
+ const warmupCeiling = frames + 600;
66
75
  let count = 0;
67
76
  const realRequestAnimationFrame = window.requestAnimationFrame.bind(window);
68
77
  // Expose the un-hijacked rAF so the render verifier can await a genuine presented frame before it
@@ -70,11 +79,19 @@ export async function launchBrowser(options = {}) {
70
79
  // verifier awaiting window.requestAnimationFrame could hang; it uses this stashed one instead.
71
80
  flags.__ftRealRequestAnimationFrame = realRequestAnimationFrame;
72
81
  window.requestAnimationFrame = (callback) => realRequestAnimationFrame((time) => {
73
- if (count >= frames)
74
- return; // halt: scene stops advancing on frame N
82
+ if (flags.__captureFramesReached)
83
+ return; // halted: scene holds its last frame
84
+ if (count >= frames) {
85
+ const targetKind = flags.__ftTarget?.kind;
86
+ const gpuVerifying = verify && (targetKind === 'webgl' || targetKind === 'webgpu');
87
+ const haveRealFrame = (flags.__ftVerification?.fingerprint ?? null) !== null || document.getElementById('ft-error') !== null;
88
+ if (!gpuVerifying || haveRealFrame || count >= warmupCeiling) {
89
+ flags.__captureFramesReached = true;
90
+ return; // halt: scene stops advancing
91
+ }
92
+ // else: still warming up — fall through to render another frame
93
+ }
75
94
  count++;
76
- if (count >= frames)
77
- flags.__captureFramesReached = true;
78
95
  callback(time);
79
96
  });
80
97
  }, { frames: captureFrames, verify });
@@ -1 +1 @@
1
- {"version":3,"file":"captureBrowser.js","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captureBrowser.js","sourceRoot":"","sources":["../src/captureBrowser.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  export declare const RENDERERS: readonly ["dom", "canvas", "webgl", "webgpu"];
2
- export type Tool = 'examples' | 'functional';
2
+ export type Tool = 'examples' | 'functional' | 'reference';
3
3
  export interface Entry {
4
4
  name: string;
5
5
  renderers: string[];
6
+ route?: (renderer: string) => string;
6
7
  }
7
8
  export declare const BACKEND_UNAVAILABLE: RegExp;
8
9
  export declare function discoverEntries(tool: Tool, root: string): Entry[];
@@ -1 +1 @@
1
- {"version":3,"file":"captureEntries.d.ts","sourceRoot":"","sources":["../src/captureEntries.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,+CAAgD,CAAC;AACvE,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7C,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AASD,eAAO,MAAM,mBAAmB,QACgJ,CAAC;AAEjL,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAkBjE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAI1F;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"captureEntries.d.ts","sourceRoot":"","sources":["../src/captureEntries.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS,+CAAgD,CAAC;AAIvE,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IAIpB,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AASD,eAAO,MAAM,mBAAmB,QACgJ,CAAC;AAEjL,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAqBjE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAI1F;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -13,6 +13,10 @@ export const RENDERERS = ['dom', 'canvas', 'webgl', 'webgpu'];
13
13
  // as "unavailable".
14
14
  export const BACKEND_UNAVAILABLE = /WebGPU adapter|WebGPU device|requestAdapter|requestDevice|GPUAdapter|WebGPU is not supported|external Instance reference no longer exists|device (was )?lost|device is lost/i;
15
15
  export function discoverEntries(tool, root) {
16
+ // 'reference' entries come from the external flight-reference harness (the reference runner supplies
17
+ // them with routes), not from a directory walk here.
18
+ if (tool === 'reference')
19
+ return [];
16
20
  // Functional scenes are flat files under functional/scenes/; the shared discovery is the single
17
21
  // source of truth (also used by tools/functional/vite.config.ts).
18
22
  if (tool === 'functional')
@@ -1 +1 @@
1
- {"version":3,"file":"captureEntries.js","sourceRoot":"","sources":["../src/captureEntries.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,uEAAuE;AAEvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAQvE,oGAAoG;AACpG,+FAA+F;AAC/F,oGAAoG;AACpG,qGAAqG;AACrG,oGAAoG;AACpG,sGAAsG;AACtG,oBAAoB;AACpB,MAAM,CAAC,MAAM,mBAAmB,GAC9B,8KAA8K,CAAC;AAEjL,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,IAAY;IACtD,gGAAgG;IAChG,kEAAkE;IAClE,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/F,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;SAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,eAAe,GAAI,SAA+B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAChD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAC9C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,MAAyB;IAC/E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9F,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,iFAAiF;AACjF,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"captureEntries.js","sourceRoot":"","sources":["../src/captureEntries.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,uEAAuE;AAEvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAevE,oGAAoG;AACpG,+FAA+F;AAC/F,oGAAoG;AACpG,qGAAqG;AACrG,oGAAoG;AACpG,sGAAsG;AACtG,oBAAoB;AACpB,MAAM,CAAC,MAAM,mBAAmB,GAC9B,8KAA8K,CAAC;AAEjL,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,IAAY;IACtD,qGAAqG;IACrG,qDAAqD;IACrD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACpC,gGAAgG;IAChG,kEAAkE;IAClE,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/F,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;SAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,eAAe,GAAI,SAA+B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAChD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAC9C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,MAAyB;IAC/E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9F,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,iFAAiF;AACjF,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC"}
@@ -46,6 +46,12 @@ export interface CaptureEntryOptions {
46
46
  * identifies its entry: `entry.name/renderer` rather than just `renderer`.
47
47
  */
48
48
  displayLabel?: string;
49
+ /**
50
+ * Forces (true) or disables (false) the in-page render-verification wait + surface readback. Defaults
51
+ * to `tool === 'functional'`. An external subject (reference) sets it true once its pages register a
52
+ * functional target, so its WebGL captures read the fingerprinted surface instead of a black canvas.
53
+ */
54
+ verify?: boolean;
49
55
  }
50
56
  export interface ParallelCaptureOptions {
51
57
  context: BrowserContext;
@@ -60,6 +66,7 @@ export interface ParallelCaptureOptions {
60
66
  captureFrames?: number;
61
67
  failOnError?: boolean;
62
68
  isAborted?: () => boolean;
69
+ verify?: boolean;
63
70
  /** Number of Playwright pages to run concurrently. Default: 6. */
64
71
  workerCount?: number;
65
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"captureEntry.d.ts","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAQ,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sGAAsG;IACtG,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,CA+PjG;AA2CD,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8ClG;AAKD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAUrH"}
1
+ {"version":3,"file":"captureEntry.d.ts","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAQ,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sGAAsG;IACtG,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,CAoRjG;AAwDD,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA+ClG;AAKD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAUrH"}
@@ -18,6 +18,10 @@ import { isBrowserClosedError } from './captureInterrupt.js';
18
18
  export async function captureEntry(opts) {
19
19
  const { context, entry, renderers, baseUrl, tool, outBase, root, updateBaseline = false, extraWait = 0, captureFrames = 0, failOnError = false, isAborted = () => false, } = opts;
20
20
  const { displayLabel } = opts;
21
+ // The in-page render verifier drives the surface readback (__ftRenderImage) that avoids Docker's
22
+ // compositor-only black WebGL screenshots. It is implicit for the functional tool; an external subject
23
+ // (reference) opts in via `verify` once its pages register a functional target.
24
+ const verify = opts.verify ?? tool === 'functional';
21
25
  let anyFailed = false;
22
26
  let anyChanged = false;
23
27
  // Detail lines below the caller's [N/M] header drop the entry name (the header carries it) and
@@ -31,11 +35,13 @@ export async function captureEntry(opts) {
31
35
  // Stop launching pages once an interrupt has begun; the partial result is reported by the caller.
32
36
  if (isAborted())
33
37
  break;
34
- const urlPath = tool === 'examples'
35
- ? `examples/${entry.name}/${routeSegment(renderer)}/`
36
- : tool === 'functional'
37
- ? `tests/${entry.name}/${routeSegment(renderer)}/`
38
- : ''; // landing: the single page is served at the server root
38
+ const urlPath = entry.route
39
+ ? entry.route(renderer)
40
+ : tool === 'examples'
41
+ ? `examples/${entry.name}/${routeSegment(renderer)}/`
42
+ : tool === 'functional'
43
+ ? `tests/${entry.name}/${routeSegment(renderer)}/`
44
+ : ''; // landing: the single page is served at the server root
39
45
  const url = `${baseUrl}/${urlPath}`;
40
46
  const { outDir, tmpScreenshot, finalScreenshot, tmpLogs, finalLogs, statusPath } = getCaptureOutputPaths(outBase, tool, entry.name, renderer);
41
47
  mkdirSync(outDir, { recursive: true });
@@ -59,6 +65,8 @@ export async function captureEntry(opts) {
59
65
  // ignored to avoid HMR/info noise.
60
66
  const type = msg.type();
61
67
  if (type === 'error' || type === 'warning') {
68
+ if (type === 'warning' && isCaptureReadPixelsWarning(text))
69
+ return;
62
70
  logs.push({
63
71
  __flight: true,
64
72
  t: -1,
@@ -102,33 +110,48 @@ export async function captureEntry(opts) {
102
110
  }
103
111
  if (extraWait > 0)
104
112
  await page.waitForTimeout(extraWait);
105
- const waitsForVerification = tool === 'functional';
106
- if (waitsForVerification)
113
+ const waitsForVerification = verify;
114
+ // The verification wait is the longest single step (up to 15s) and prints nothing while it
115
+ // polls, so a run can look hung right after "Ready at". A muted heartbeat marks that the entry
116
+ // is verifying, so the pause reads as progress rather than a stall.
117
+ if (waitsForVerification) {
118
+ console.log(statusLine('muted', renderer, 'verifying render…'));
107
119
  await waitForRenderVerification(page);
120
+ }
121
+ const verificationTargetKind = waitsForVerification ? await getFunctionalTargetKind(page) : null;
108
122
  // Screenshot the render output only — not the full viewport — so all renderers produce the same
109
123
  // frame size and the gallery blink comparator has something meaningful to compare.
110
124
  //
111
- // - webgpu: SwiftShader can't present to the swapchain, so the canvas is blank in a Playwright
112
- // screenshot. The functional verifier reads the frame back from the GPU and exposes it as a PNG
113
- // data URL (window.__ftRenderImage). Fall back to a full page screenshot if unavailable (e.g.
114
- // examples, which don't run the verifier).
125
+ // - functional raster renders: the verifier exposes the same surface it fingerprinted as a PNG
126
+ // data URL (window.__ftRenderImage), avoiding compositor-only black screenshots in Docker.
127
+ // - webgpu examples: SwiftShader can't present to the swapchain, so the canvas is blank in a
128
+ // Playwright screenshot. Functional captures require the verifier image; examples fall back.
115
129
  // - dom: no canvas; the renderer appends a sized <div> directly to <body>.
116
130
  // - canvas / webgl: a <canvas> is appended directly to <body>.
117
131
  // - fallback: full page screenshot when neither canvas nor div is found (unknown layout).
118
132
  let screenshotBuffer;
119
133
  const backend = rendererBackend(renderer);
120
- if (backend === 'webgpu') {
121
- const dataUrl = await getRenderImageDataUrl(page);
122
- if (dataUrl) {
123
- screenshotBuffer = Buffer.from(dataUrl.split(',')[1], 'base64');
124
- }
125
- else if (waitsForVerification) {
134
+ const dataUrl = waitsForVerification ? await getRenderImageDataUrl(page) : null;
135
+ if (dataUrl && backend !== 'dom') {
136
+ screenshotBuffer = Buffer.from(dataUrl.split(',')[1], 'base64');
137
+ }
138
+ else if (backend === 'webgpu') {
139
+ if (waitsForVerification) {
126
140
  throw new Error('WebGPU verifier did not produce a render image');
127
141
  }
128
142
  else {
129
143
  screenshotBuffer = await page.screenshot();
130
144
  }
131
145
  }
146
+ else if (backend === 'webgl' && waitsForVerification && verificationTargetKind === 'webgl') {
147
+ // The page registered a WebGL verification target but published no verified frame, so its
148
+ // readback was blank — a canvas screenshot here would be an all-black false pass (the exact
149
+ // shape that hid a real render bug: green ✓ over a black frame, missed even by --fail-on-error
150
+ // since a verify timeout logs nothing). Fail loudly instead, mirroring the WebGPU guard above.
151
+ // A page that registers no target is not making a verification claim and still falls through
152
+ // to the canvas-screenshot fallback below.
153
+ throw new Error('WebGL verifier did not produce a render image (blank or failed render)');
154
+ }
132
155
  else if (backend === 'dom') {
133
156
  screenshotBuffer = await page
134
157
  .locator('body > div')
@@ -242,10 +265,22 @@ async function getRenderImageDataUrl(page) {
242
265
  .evaluate(() => window.__ftRenderImage ?? null)
243
266
  .catch(() => null);
244
267
  }
268
+ // The kind of functional target the page registered (webgl / webgpu / canvas / dom), or null if it
269
+ // registered none. A registered target is the page's claim that it verifies its own render; the
270
+ // screenshot selection uses it to tell "opted into verification but drew blank" (a failure) from
271
+ // "never opted in" (the canvas-screenshot fallback is expected).
272
+ async function getFunctionalTargetKind(page) {
273
+ return page
274
+ .evaluate(() => window.__ftTarget?.kind ?? null)
275
+ .catch(() => null);
276
+ }
245
277
  function rendererBackend(renderer) {
246
278
  const i = renderer.indexOf(':');
247
279
  return i === -1 ? renderer : renderer.slice(i + 1);
248
280
  }
281
+ function isCaptureReadPixelsWarning(text) {
282
+ return text.includes('GPU stall due to ReadPixels');
283
+ }
249
284
  async function waitForRenderVerification(page) {
250
285
  await page
251
286
  .waitForFunction(() => {
@@ -257,9 +292,7 @@ async function waitForRenderVerification(page) {
257
292
  return false;
258
293
  if (verification.render === 'dom')
259
294
  return true;
260
- if (verification.render === 'webgpu')
261
- return typeof w.__ftRenderImage === 'string' && w.__ftRenderImage !== '';
262
- return verification.fingerprint !== null;
295
+ return verification.fingerprint !== null && typeof w.__ftRenderImage === 'string' && w.__ftRenderImage !== '';
263
296
  }, null, { polling: 100, timeout: 15_000 })
264
297
  .catch(() => { });
265
298
  return page
@@ -304,6 +337,7 @@ export async function captureParallel(opts) {
304
337
  extraWait: opts.extraWait,
305
338
  captureFrames: opts.captureFrames,
306
339
  failOnError: opts.failOnError,
340
+ verify: opts.verify,
307
341
  isAborted: () => isAborted(),
308
342
  });
309
343
  if (result === 'ok')
@@ -1 +1 @@
1
- {"version":3,"file":"captureEntry.js","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captureEntry.js","sourceRoot":"","sources":["../src/captureEntry.ts"],"names":[],"mappings":"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"}
@@ -134,9 +134,12 @@ export function resolveStaticServer(opts) {
134
134
  });
135
135
  });
136
136
  }
137
- // The root npm script that starts each tool's dev server, used in the manual-start tip.
137
+ // The root npm script that starts each tool's dev server, used in the manual-start tip. 'reference'
138
+ // runs its own dev server (flight-reference's Vite) via the reference-capture runner, not resolveServer,
139
+ // so its entry is only here to satisfy the Tool map.
138
140
  const DEV_SCRIPT = {
139
141
  examples: 'dev:examples',
140
142
  functional: 'dev:functional',
143
+ reference: 'dev:reference',
141
144
  };
142
145
  //# sourceMappingURL=captureServer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"captureServer.js","sourceRoot":"","sources":["../src/captureServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captureServer.js","sourceRoot":"","sources":["../src/captureServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { CanvasRenderState, DisplayObject, DomRenderState, GlRenderState, Surface, WgpuRenderState } from '@flighthq/types';
2
+ export declare const FUNCTIONAL_VERIFICATION_IMAGE_KEY = "__ftRenderImage";
3
+ export type FunctionalRenderOracle = (surface: Readonly<Surface>) => void | Promise<void>;
4
+ export interface FunctionalCanvasTarget {
5
+ kind: 'canvas';
6
+ state: CanvasRenderState;
7
+ width: number;
8
+ height: number;
9
+ scale: number;
10
+ render(root: DisplayObject): void;
11
+ }
12
+ export interface FunctionalDomTarget {
13
+ kind: 'dom';
14
+ state: DomRenderState;
15
+ width: number;
16
+ height: number;
17
+ scale: number;
18
+ render(root: DisplayObject): void;
19
+ }
20
+ export interface FunctionalGlTarget {
21
+ kind: 'webgl';
22
+ state: GlRenderState;
23
+ width: number;
24
+ height: number;
25
+ scale: number;
26
+ render(root: DisplayObject): void;
27
+ }
28
+ export interface FunctionalTestModule {
29
+ assertRender?: FunctionalRenderOracle;
30
+ minCoverage?: number;
31
+ }
32
+ export interface FunctionalVerification {
33
+ render: string;
34
+ coverage: number | null;
35
+ fingerprint: string | null;
36
+ }
37
+ export interface FunctionalWgpuTarget {
38
+ kind: 'webgpu';
39
+ state: WgpuRenderState;
40
+ width: number;
41
+ height: number;
42
+ scale: number;
43
+ render(root: DisplayObject): void;
44
+ }
45
+ export type FunctionalTarget = FunctionalCanvasTarget | FunctionalDomTarget | FunctionalGlTarget | FunctionalWgpuTarget;
46
+ export declare function publishFunctionalRenderSync(render: string): boolean;
47
+ export declare function registerFunctionalTarget<T extends FunctionalTarget>(target: T): T;
48
+ export declare function registerWgpuFunctionalTarget(state: WgpuRenderState, scale?: number): void;
49
+ export declare function runRenderVerification(testModule: FunctionalTestModule, render: string): Promise<void>;
50
+ export declare function snapshotFunctionalRender(): Promise<Surface | null>;
51
+ //# sourceMappingURL=functionalVerify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionalVerify.d.ts","sourceRoot":"","sources":["../src/functionalVerify.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,OAAO,EACP,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,iCAAiC,oBAAoB,CAAC;AAMnE,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAgBxH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAenE;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,gBAAgB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAGjF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,SAAI,GAAG,IAAI,CAUpF;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B3G;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQxE"}
@@ -0,0 +1,140 @@
1
+ import { createSurfaceFromWgpuRenderState, enableWgpuFrameCapture } from '@flighthq/render-wgpu';
2
+ import { createSurface, createSurfaceFingerprint, createSurfaceFromImageSource, formatSurfaceFingerprint, getSurfaceCoverage, getSurfacePixel, } from '@flighthq/surface';
3
+ export const FUNCTIONAL_VERIFICATION_IMAGE_KEY = '__ftRenderImage';
4
+ const DEFAULT_MIN_COVERAGE = 0.0008;
5
+ const BACKGROUND_CHANNEL_TOLERANCE = 6;
6
+ const FINGERPRINT_GRID = 16;
7
+ // Synchronously reads the registered webgl target's default framebuffer and publishes it for the capture
8
+ // harness (sets __ftVerification + __ftRenderImage). Unlike runRenderVerification it does NOT wait for a
9
+ // presented frame — so it MUST be called in the same task as the draw (right after presentGlScene in an
10
+ // animation frame), while the drawing buffer is still valid. This is what lets an animated app read back
11
+ // without preserveDrawingBuffer:true (which a wait-then-read would need, and which breaks on-screen
12
+ // animation on some drivers). Returns true once a non-blank frame was published; the caller stops calling
13
+ // it then, and retries on the next frame while it returns false.
14
+ export function publishFunctionalRenderSync(render) {
15
+ const target = window.__ftTarget;
16
+ if (target?.kind !== 'webgl')
17
+ return false;
18
+ const surface = createSurfaceFromGlRenderState(target.state);
19
+ if (surface === null)
20
+ return false;
21
+ const background = getSurfacePixel(surface, 0, 0);
22
+ const coverage = getSurfaceCoverage(surface, background, BACKGROUND_CHANNEL_TOLERANCE);
23
+ if (coverage < DEFAULT_MIN_COVERAGE)
24
+ return false;
25
+ window.__ftVerification = {
26
+ render,
27
+ coverage,
28
+ fingerprint: formatSurfaceFingerprint(createSurfaceFingerprint(surface, FINGERPRINT_GRID)),
29
+ };
30
+ window.__ftRenderImage = encodeSurfaceToDataUrl(surface);
31
+ return true;
32
+ }
33
+ export function registerFunctionalTarget(target) {
34
+ window.__ftTarget = target;
35
+ return target;
36
+ }
37
+ export function registerWgpuFunctionalTarget(state, scale = 1) {
38
+ enableWgpuFrameCapture(state);
39
+ registerFunctionalTarget({
40
+ kind: 'webgpu',
41
+ state,
42
+ width: state.canvas.width,
43
+ height: state.canvas.height,
44
+ scale,
45
+ render: () => { },
46
+ });
47
+ }
48
+ export async function runRenderVerification(testModule, render) {
49
+ const result = { render, coverage: null, fingerprint: null };
50
+ window.__ftVerification = result;
51
+ if (render === 'dom') {
52
+ const target = window.__ftTarget;
53
+ if (target?.kind === 'dom') {
54
+ const element = target.state.element;
55
+ const hasContent = element.childElementCount > 0 || (element.textContent ?? '').trim() !== '';
56
+ if (!hasContent)
57
+ throw new Error(`[verify:${render}] blank render: no DOM output produced`);
58
+ }
59
+ return;
60
+ }
61
+ await waitForPresentedFrame();
62
+ const surface = await snapshotFunctionalRender();
63
+ if (surface === null)
64
+ return;
65
+ const background = getSurfacePixel(surface, 0, 0);
66
+ const coverage = getSurfaceCoverage(surface, background, BACKGROUND_CHANNEL_TOLERANCE);
67
+ result.coverage = coverage;
68
+ result.fingerprint = formatSurfaceFingerprint(createSurfaceFingerprint(surface, FINGERPRINT_GRID));
69
+ const minCoverage = testModule.minCoverage ?? DEFAULT_MIN_COVERAGE;
70
+ if (coverage < minCoverage) {
71
+ throw new Error(`[verify:${render}] blank render: coverage ${coverage.toFixed(5)} below ${minCoverage}`);
72
+ }
73
+ await testModule.assertRender?.(surface);
74
+ window.__ftRenderImage = encodeSurfaceToDataUrl(getFunctionalRenderImageSurface() ?? surface);
75
+ }
76
+ export async function snapshotFunctionalRender() {
77
+ const target = window.__ftTarget;
78
+ if (target?.kind === 'dom')
79
+ return null;
80
+ if (target?.kind === 'webgpu')
81
+ return createSurfaceFromWgpuRenderState(target.state);
82
+ const canvas = target ? target.state.canvas : findRenderCanvas();
83
+ if (canvas === null || canvas.width === 0 || canvas.height === 0)
84
+ return null;
85
+ if (target?.kind === 'webgl')
86
+ target.state.gl.finish();
87
+ return createSurfaceFromImageSource(canvas, canvas.width, canvas.height);
88
+ }
89
+ function getFunctionalRenderImageSurface() {
90
+ const target = window.__ftTarget;
91
+ if (target?.kind !== 'webgl')
92
+ return null;
93
+ return createSurfaceFromGlRenderState(target.state);
94
+ }
95
+ function createSurfaceFromGlRenderState(state) {
96
+ const canvas = state.canvas;
97
+ const width = canvas.width;
98
+ const height = canvas.height;
99
+ if (width === 0 || height === 0)
100
+ return null;
101
+ const gl = state.gl;
102
+ gl.finish();
103
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
104
+ const bottomUp = new Uint8Array(width * height * 4);
105
+ gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, bottomUp);
106
+ const surface = createSurface(width, height);
107
+ const out = surface.data;
108
+ const rowBytes = width * 4;
109
+ for (let y = 0; y < height; y++) {
110
+ const srcRow = (height - 1 - y) * rowBytes;
111
+ const dstRow = y * rowBytes;
112
+ out.set(bottomUp.subarray(srcRow, srcRow + rowBytes), dstRow);
113
+ }
114
+ return surface;
115
+ }
116
+ function encodeSurfaceToDataUrl(surface) {
117
+ const canvas = document.createElement('canvas');
118
+ canvas.width = surface.width;
119
+ canvas.height = surface.height;
120
+ const ctx = canvas.getContext('2d');
121
+ if (ctx === null)
122
+ return '';
123
+ ctx.putImageData(new ImageData(new Uint8ClampedArray(surface.data), surface.width, surface.height), 0, 0);
124
+ return canvas.toDataURL('image/png');
125
+ }
126
+ function findRenderCanvas() {
127
+ let best = null;
128
+ for (const canvas of document.querySelectorAll('canvas')) {
129
+ if (best === null || canvas.width * canvas.height > best.width * best.height)
130
+ best = canvas;
131
+ }
132
+ return best;
133
+ }
134
+ function waitForPresentedFrame() {
135
+ const raf = window.__ftRealRequestAnimationFrame ?? window.requestAnimationFrame.bind(window);
136
+ return new Promise((resolve) => {
137
+ raf(() => raf(() => resolve()));
138
+ });
139
+ }
140
+ //# sourceMappingURL=functionalVerify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functionalVerify.js","sourceRoot":"","sources":["../src/functionalVerify.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@ export * from './captureInterrupt';
7
7
  export * from './captureRenderTarget';
8
8
  export * from './captureServer';
9
9
  export * from './functionalScenes';
10
+ export * from './functionalVerify';
11
+ export * from './referenceCapture';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -7,4 +7,6 @@ export * from './captureInterrupt';
7
7
  export * from './captureRenderTarget';
8
8
  export * from './captureServer';
9
9
  export * from './functionalScenes';
10
+ export * from './functionalVerify';
11
+ export * from './referenceCapture';
10
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Entry } from './captureEntries.js';
2
+ export interface ReferenceCaptureOptions {
3
+ /** The flight-reference checkout root (contains content/frameworks/…). */
4
+ checkoutDir: string;
5
+ /** The Flight monorepo root, passed to the dev server as FLIGHT_REPO so @flighthq/* resolve to source. */
6
+ repoRoot: string;
7
+ /** Only capture cases whose `framework/corpus/case` id contains this substring. */
8
+ filter?: string;
9
+ captureFrames?: number;
10
+ extraWait?: number;
11
+ updateBaseline?: boolean;
12
+ failOnError?: boolean;
13
+ /** Output base; artifacts land at {outBase}/reference/{framework/corpus/case}/{renderer}/. */
14
+ outBase: string;
15
+ workerCount?: number;
16
+ }
17
+ export interface ReferenceCaptureResult {
18
+ captured: number;
19
+ changed: number;
20
+ failed: number;
21
+ aborted: boolean;
22
+ }
23
+ export declare function discoverReferenceEntries(checkoutDir: string): Entry[];
24
+ export declare function runReferenceCapture(options: Readonly<ReferenceCaptureOptions>): Promise<ReferenceCaptureResult>;
25
+ export declare function startReferenceDevServer(checkoutDir: string, repoRoot: string): Promise<{
26
+ url: string;
27
+ kill: () => void;
28
+ }>;
29
+ //# sourceMappingURL=referenceCapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referenceCapture.d.ts","sourceRoot":"","sources":["../src/referenceCapture.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAMjD,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,0GAA0G;IAC1G,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,CAuBrE;AAID,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkDrH;AASD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAiC5C"}
@@ -0,0 +1,137 @@
1
+ // The reference-subject capture driver: start flight-reference's Vite dev server (pointed at a Flight
2
+ // checkout via FLIGHT_REPO), enumerate its framework/corpus/case routes, and drive
3
+ // the shared captureEntry path with verify:true. This lives in tool-capture — beside the in-page
4
+ // verifier (functionalVerify) and the capture core (captureEntry) — so BOTH ends of the reference
5
+ // capture are contained in one package; scripts/reference-capture.ts is a thin CLI over runReferenceCapture.
6
+ import { spawn } from 'node:child_process';
7
+ import { existsSync, readdirSync } from 'node:fs';
8
+ import { join, resolve } from 'node:path';
9
+ import { launchBrowser } from './captureBrowser.js';
10
+ import { routeSegment } from './captureEntries.js';
11
+ import { captureParallel } from './captureEntry.js';
12
+ import { formatSummaryCount, formatSummaryLine } from './captureFormat.js';
13
+ import { installAbortHandler } from './captureInterrupt.js';
14
+ // One capture Entry per flight-reference case: name = framework/corpus/case, and a `route` producing the
15
+ // harness's `${framework}-tests/${corpus}/${case}/flight/${renderer}/` URL. Only cases with a Flight
16
+ // implementation (flight/src/app.ts) are captured; every framework (openfl/starling/awayjs) is included.
17
+ export function discoverReferenceEntries(checkoutDir) {
18
+ const frameworksDir = join(checkoutDir, 'content', 'frameworks');
19
+ const entries = [];
20
+ if (!existsSync(frameworksDir))
21
+ return entries;
22
+ for (const framework of readdirSync(frameworksDir, { withFileTypes: true })) {
23
+ if (!framework.isDirectory())
24
+ continue;
25
+ const frameworkDir = join(frameworksDir, framework.name);
26
+ for (const corpus of readdirSync(frameworkDir, { withFileTypes: true })) {
27
+ if (!corpus.isDirectory())
28
+ continue;
29
+ const corpusDir = join(frameworkDir, corpus.name);
30
+ for (const c of readdirSync(corpusDir, { withFileTypes: true })) {
31
+ if (!c.isDirectory() || c.name === '_shared')
32
+ continue;
33
+ if (!existsSync(join(corpusDir, c.name, 'flight', 'src', 'app.ts')))
34
+ continue;
35
+ const routePrefix = `${framework.name}-tests`;
36
+ entries.push({
37
+ name: `${framework.name}/${corpus.name}/${c.name}`,
38
+ renderers: ['webgl'],
39
+ route: (renderer) => `${routePrefix}/${corpus.name}/${c.name}/flight/${routeSegment(renderer)}/`,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ return entries.sort((a, b) => a.name.localeCompare(b.name));
45
+ }
46
+ // The full reference-capture session: enumerate, start the dev server, drive captureEntry (verify:true) in
47
+ // parallel, then tear the server + browser down. Prints the same summary line as the monorepo capture.
48
+ export async function runReferenceCapture(options) {
49
+ let entries = discoverReferenceEntries(options.checkoutDir);
50
+ if (options.filter)
51
+ entries = entries.filter((e) => e.name.includes(options.filter));
52
+ if (entries.length === 0)
53
+ throw new Error(`No reference cases found filter="${options.filter ?? ''}"`);
54
+ console.log('Starting flight-reference Vite dev server…');
55
+ const server = await startReferenceDevServer(options.checkoutDir, options.repoRoot);
56
+ console.log(`Ready at ${server.url}\n`);
57
+ const { browser, context } = await launchBrowser({ captureFrames: options.captureFrames ?? 1, verify: true });
58
+ const isAborted = installAbortHandler();
59
+ let captured = 0;
60
+ let changed = 0;
61
+ let failed = 0;
62
+ try {
63
+ const result = await captureParallel({
64
+ context,
65
+ entries,
66
+ rendererFilter: [],
67
+ baseUrl: server.url,
68
+ tool: 'reference',
69
+ outBase: resolve(options.outBase),
70
+ root: options.checkoutDir,
71
+ updateBaseline: options.updateBaseline,
72
+ extraWait: options.extraWait,
73
+ captureFrames: options.captureFrames,
74
+ failOnError: options.failOnError,
75
+ verify: true,
76
+ isAborted,
77
+ workerCount: options.workerCount ?? 4,
78
+ });
79
+ captured = result.captured;
80
+ changed = result.changed;
81
+ failed = result.failed;
82
+ }
83
+ finally {
84
+ await browser.close().catch(() => { });
85
+ server.kill();
86
+ }
87
+ console.log('\n' +
88
+ formatSummaryLine(failed > 0, [
89
+ formatSummaryCount(captured, 'captured', 'pass'),
90
+ formatSummaryCount(changed, 'changed', 'warn'),
91
+ formatSummaryCount(failed, 'failed', 'fail'),
92
+ ]));
93
+ console.log(`Output: ${resolve(options.outBase)}/reference/`);
94
+ return { captured, changed, failed, aborted: isAborted() };
95
+ }
96
+ // Spawns flight-reference's Vite dev server in the checkout, resolving once it logs its Local URL.
97
+ // FLIGHT_REPO points its @flighthq/* aliases at the Flight source. We deliberately do NOT set
98
+ // FLIGHT_SDK_SOURCE: that flag excludes @flighthq/sdk from Vite's dep pre-bundling to serve it as raw
99
+ // source over HMR (for actively editing SDK internals) — which makes a cold page transform the entire SDK
100
+ // module graph (~1700 modules, tens of seconds) and blow past the capture's page timeout. Capture renders
101
+ // once and only needs the built result, so the pre-bundled path (esbuild-bundling the same local source
102
+ // once) is both correct and far faster here.
103
+ export function startReferenceDevServer(checkoutDir, repoRoot) {
104
+ return new Promise((resolveUrl, reject) => {
105
+ const child = spawn('npx', ['vite', '--host', '0.0.0.0'], {
106
+ cwd: checkoutDir,
107
+ stdio: ['ignore', 'pipe', 'pipe'],
108
+ env: { ...process.env, FLIGHT_REPO: repoRoot },
109
+ });
110
+ let resolved = false;
111
+ const timeout = setTimeout(() => {
112
+ if (!resolved) {
113
+ resolved = true;
114
+ reject(new Error('flight-reference Vite dev server did not start within 60s'));
115
+ }
116
+ }, 60_000);
117
+ const ansi = new RegExp(String.fromCharCode(27) + '\\[[0-9;]*m', 'g');
118
+ const onData = (data) => {
119
+ const match = /Local:\s+(https?:\/\/\S+)/.exec(data.toString().replace(ansi, ''));
120
+ if (match && !resolved) {
121
+ resolved = true;
122
+ clearTimeout(timeout);
123
+ resolveUrl({ url: match[1].replace(/\/$/, ''), kill: () => child.kill('SIGTERM') });
124
+ }
125
+ };
126
+ child.stdout?.on('data', onData);
127
+ child.stderr?.on('data', onData);
128
+ child.on('error', (err) => {
129
+ if (!resolved) {
130
+ resolved = true;
131
+ clearTimeout(timeout);
132
+ reject(err);
133
+ }
134
+ });
135
+ });
136
+ }
137
+ //# sourceMappingURL=referenceCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referenceCapture.js","sourceRoot":"","sources":["../src/referenceCapture.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/tool-capture",
3
- "version": "0.2.0",
3
+ "version": "0.2.1-next.410.a23f189",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/flighthq/flight.git",
@@ -32,6 +32,9 @@
32
32
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
33
33
  },
34
34
  "dependencies": {
35
+ "@flighthq/render-wgpu": "0.2.1-next.410.a23f189",
36
+ "@flighthq/surface": "0.2.1-next.410.a23f189",
37
+ "@flighthq/types": "0.2.1-next.410.a23f189",
35
38
  "@playwright/test": "^1.50.0",
36
39
  "picocolors": "^1.1.1"
37
40
  },
@@ -0,0 +1,94 @@
1
+ // @vitest-environment jsdom
2
+
3
+ import type { DomRenderState } from '@flighthq/types';
4
+ import { afterEach, describe, expect, it } from 'vitest';
5
+
6
+ import type { FunctionalTarget } from './functionalVerify';
7
+ import {
8
+ publishFunctionalRenderSync,
9
+ registerFunctionalTarget,
10
+ registerWgpuFunctionalTarget,
11
+ runRenderVerification,
12
+ snapshotFunctionalRender,
13
+ } from './functionalVerify';
14
+
15
+ // The verifier communicates through window globals; clear them between cases so state doesn't leak.
16
+ interface VerificationWindowLike {
17
+ __ftTarget?: unknown;
18
+ __ftVerification?: unknown;
19
+ __ftRenderImage?: unknown;
20
+ }
21
+
22
+ afterEach(() => {
23
+ const w = window as unknown as VerificationWindowLike;
24
+ w.__ftTarget = undefined;
25
+ w.__ftVerification = undefined;
26
+ w.__ftRenderImage = undefined;
27
+ });
28
+
29
+ // A minimal DOM target — the only backend snapshot/verification handles without a real GPU context.
30
+ function domTarget(element: HTMLElement): FunctionalTarget {
31
+ return {
32
+ kind: 'dom',
33
+ state: { element } as unknown as DomRenderState,
34
+ width: 10,
35
+ height: 10,
36
+ scale: 1,
37
+ render: () => {},
38
+ };
39
+ }
40
+
41
+ describe('publishFunctionalRenderSync', () => {
42
+ it('returns false when no target is registered', () => {
43
+ expect(publishFunctionalRenderSync('webgl')).toBe(false);
44
+ });
45
+
46
+ it('returns false for a non-webgl target and does not publish', () => {
47
+ registerFunctionalTarget(domTarget(document.createElement('div')));
48
+ expect(publishFunctionalRenderSync('webgl')).toBe(false);
49
+ expect((window as unknown as VerificationWindowLike).__ftRenderImage).toBeUndefined();
50
+ });
51
+ });
52
+
53
+ describe('registerFunctionalTarget', () => {
54
+ it('records the target on window and returns it', () => {
55
+ const target = domTarget(document.createElement('div'));
56
+ const returned = registerFunctionalTarget(target);
57
+ expect(returned).toBe(target);
58
+ expect((window as unknown as VerificationWindowLike).__ftTarget).toBe(target);
59
+ });
60
+ });
61
+
62
+ describe('registerWgpuFunctionalTarget', () => {
63
+ // Enabling wgpu frame capture needs a real WgpuRenderState; end-to-end coverage is the functional
64
+ // suite's job. Here we only assert the entry point is wired.
65
+ it('is a callable registrar', () => {
66
+ expect(typeof registerWgpuFunctionalTarget).toBe('function');
67
+ });
68
+ });
69
+
70
+ describe('runRenderVerification', () => {
71
+ it('throws on a blank DOM render (no elements or text)', async () => {
72
+ registerFunctionalTarget(domTarget(document.createElement('div')));
73
+ await expect(runRenderVerification({}, 'dom')).rejects.toThrow(/blank render/);
74
+ });
75
+
76
+ it('passes a DOM render that emitted content and records the verification', async () => {
77
+ const host = document.createElement('div');
78
+ host.appendChild(document.createElement('span'));
79
+ registerFunctionalTarget(domTarget(host));
80
+ await runRenderVerification({}, 'dom');
81
+ expect((window as unknown as VerificationWindowLike).__ftVerification).toMatchObject({ render: 'dom' });
82
+ });
83
+ });
84
+
85
+ describe('snapshotFunctionalRender', () => {
86
+ it('returns null for a DOM target', async () => {
87
+ registerFunctionalTarget(domTarget(document.createElement('div')));
88
+ expect(await snapshotFunctionalRender()).toBeNull();
89
+ });
90
+
91
+ it('returns null when no target and no canvas is present', async () => {
92
+ expect(await snapshotFunctionalRender()).toBeNull();
93
+ });
94
+ });
@@ -0,0 +1,81 @@
1
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+
5
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
6
+
7
+ import { discoverReferenceEntries, runReferenceCapture, startReferenceDevServer } from './referenceCapture';
8
+
9
+ // Builds a minimal flight-reference checkout tree: content/frameworks/<framework>/<corpus>/<case>. A case
10
+ // is only discoverable when it has a Flight implementation at flight/src/app.ts.
11
+ function writeCase(root: string, framework: string, corpus: string, name: string, withApp: boolean): void {
12
+ const caseDir = join(root, 'content', 'frameworks', framework, corpus, name);
13
+ mkdirSync(caseDir, { recursive: true });
14
+ if (withApp) {
15
+ mkdirSync(join(caseDir, 'flight', 'src'), { recursive: true });
16
+ writeFileSync(join(caseDir, 'flight', 'src', 'app.ts'), 'export {};');
17
+ }
18
+ }
19
+
20
+ describe('discoverReferenceEntries', () => {
21
+ let root: string;
22
+
23
+ beforeEach(() => {
24
+ root = mkdtempSync(join(tmpdir(), 'reference-capture-'));
25
+ });
26
+
27
+ afterEach(() => {
28
+ rmSync(root, { recursive: true, force: true });
29
+ });
30
+
31
+ it('returns one entry per case with a Flight app, named framework/corpus/case and sorted', () => {
32
+ writeCase(root, 'openfl', 'display', 'node-alpha', true);
33
+ writeCase(root, 'awayjs', 'intermediate', 'md5-animation', true);
34
+
35
+ const entries = discoverReferenceEntries(root);
36
+
37
+ expect(entries.map((e) => e.name)).toEqual(['awayjs/intermediate/md5-animation', 'openfl/display/node-alpha']);
38
+ expect(entries.every((e) => e.renderers.includes('webgl'))).toBe(true);
39
+ });
40
+
41
+ it('routes to the harness `${framework}-tests/${corpus}/${case}/flight/${renderer}/` URL', () => {
42
+ writeCase(root, 'awayjs', 'intermediate', 'md5-animation', true);
43
+
44
+ const [entry] = discoverReferenceEntries(root);
45
+
46
+ expect(entry!.route?.('webgl')).toBe('awayjs-tests/intermediate/md5-animation/flight/webgl/');
47
+ expect(entry!.route?.('flight:webgl')).toBe('awayjs-tests/intermediate/md5-animation/flight/flight-webgl/');
48
+ });
49
+
50
+ it('skips _shared directories and cases without a Flight app', () => {
51
+ writeCase(root, 'openfl', 'display', '_shared', true);
52
+ writeCase(root, 'openfl', 'display', 'starling-only', false);
53
+
54
+ expect(discoverReferenceEntries(root)).toEqual([]);
55
+ });
56
+
57
+ it('returns empty when the frameworks directory is absent', () => {
58
+ expect(discoverReferenceEntries(join(root, 'missing'))).toEqual([]);
59
+ });
60
+ });
61
+
62
+ describe('runReferenceCapture', () => {
63
+ // The full session starts flight-reference's Vite dev server and launches a browser, so it is exercised
64
+ // end to end by capture:reference. Here we only assert the entry point is wired and validates input.
65
+ it('rejects when no reference cases match', async () => {
66
+ const root = mkdtempSync(join(tmpdir(), 'reference-capture-'));
67
+ try {
68
+ await expect(
69
+ runReferenceCapture({ checkoutDir: root, repoRoot: root, outBase: join(root, 'out') }),
70
+ ).rejects.toThrow(/No reference cases/);
71
+ } finally {
72
+ rmSync(root, { recursive: true, force: true });
73
+ }
74
+ });
75
+ });
76
+
77
+ describe('startReferenceDevServer', () => {
78
+ it('is a callable dev-server starter', () => {
79
+ expect(typeof startReferenceDevServer).toBe('function');
80
+ });
81
+ });