vdelta 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/adapter.d.ts +7 -5
  2. package/dist/adapter.js +22 -3
  3. package/dist/adapter.js.map +1 -1
  4. package/dist/adapters/playwright/adapter.d.ts +27 -0
  5. package/dist/adapters/playwright/adapter.js +175 -0
  6. package/dist/adapters/playwright/adapter.js.map +1 -0
  7. package/dist/adapters/playwright/capture.d.ts +119 -0
  8. package/dist/adapters/playwright/capture.js +12 -0
  9. package/dist/adapters/playwright/capture.js.map +1 -0
  10. package/dist/adapters/playwright/recorder.d.ts +65 -0
  11. package/dist/adapters/playwright/recorder.js +511 -0
  12. package/dist/adapters/playwright/recorder.js.map +1 -0
  13. package/dist/adapters/playwright/reporter.cjs +322 -0
  14. package/dist/adapters/playwright/reporter.cjs.map +1 -0
  15. package/dist/adapters/playwright/reporter.d.cts +63 -0
  16. package/dist/adapters/registry.js +2 -1
  17. package/dist/adapters/registry.js.map +1 -1
  18. package/dist/adapters/vitest/adapter.d.ts +9 -10
  19. package/dist/adapters/vitest/adapter.js +8 -17
  20. package/dist/adapters/vitest/adapter.js.map +1 -1
  21. package/dist/adapters/vitest/recorder.d.ts +10 -1
  22. package/dist/adapters/vitest/recorder.js +18 -1
  23. package/dist/adapters/vitest/recorder.js.map +1 -1
  24. package/dist/compare.d.ts +5 -0
  25. package/dist/compare.js +28 -27
  26. package/dist/compare.js.map +1 -1
  27. package/dist/gate.js +9 -8
  28. package/dist/gate.js.map +1 -1
  29. package/dist/index.js +5 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/schema.d.ts +55 -1
  32. package/dist/schema.js +26 -8
  33. package/dist/schema.js.map +1 -1
  34. package/package.json +4 -2
  35. package/spec/veridelta-1.md +32 -3
@@ -0,0 +1,511 @@
1
+ /**
2
+ * playwright adapter, recorder side: turns a Capture dump plus execution
3
+ * context into a canonical RunRecord (§3). Composition `playwright-native/1`
4
+ * (docs/compositions/playwright-native-1.md): digest core = exception type +
5
+ * message + line-shift-stable relOffsets + tree-reconstructed
6
+ * `source_region` text; `source-region-text` and `retry-evidence` are
7
+ * declared `pass` (unlike vitest, which declares `source-region-text`
8
+ * `unsupported` — `../vitest/recorder.ts:67-74`); `resolved-config-coverage`
9
+ * is declared `unsupported` because playwright's resolved `FullConfig` never
10
+ * exposes `expect.timeout` to the reporter (doc §4 `expect.timeout` row,
11
+ * architecture decision 6). `resolved-config-coverage` is deliberately not
12
+ * added to `schema.ts`'s `EVIDENCE_CAPABILITY_NAMES` (decision 6 implementation
13
+ * contract): it is an `instrument`-level capability, not an evidence one, so
14
+ * `failure_evidence.degraded_capabilities` never lists it.
15
+ *
16
+ * Test IDs are project-scoped (`${rel}::${project}::${titles.join(' > ')}`)
17
+ * because playwright's own test identity is project-scoped
18
+ * (`TestCase.id`/`titlePath()` — see `../../adapters/playwright/reporter.cts`);
19
+ * without `project` in the id, same-titled tests in different projects would
20
+ * collide.
21
+ */
22
+ import { readFileSync, realpathSync } from 'node:fs';
23
+ import { isAbsolute, relative } from 'node:path';
24
+ import { AdapterCaptureError, } from '../../adapter.js';
25
+ import { canonicalDigest } from '../../digest.js';
26
+ import { redactText, redactValue } from '../../redact.js';
27
+ import { SCHEMA_VERSION, } from '../../schema.js';
28
+ import { CAPTURE_VERSION, } from './capture.js';
29
+ export const ADAPTER_NAME = 'playwright';
30
+ export const COMPOSITION_ID = 'playwright-native/1';
31
+ /** Env vars whose values (fingerprinted, never stored) are comparison-relevant. */
32
+ export const DECLARED_ENV_VARS = ['CI', 'NODE_ENV', 'TZ', 'LANG'];
33
+ /**
34
+ * A capture the recorder cannot turn into a record: unsupported capture
35
+ * version, or an ambiguity it refuses to guess through (§12 fail-closed).
36
+ * A subtype of `AdapterCaptureError` so the core degrades to raw passthrough
37
+ * (INV-5) without knowing which adapter raised it.
38
+ */
39
+ export class RecorderError extends AdapterCaptureError {
40
+ constructor(message) {
41
+ super(message);
42
+ this.name = 'RecorderError';
43
+ }
44
+ }
45
+ /**
46
+ * Capability declaration for `playwright-native/1`
47
+ * (docs/compositions/playwright-native-1.md §8, decision 6). Unlike vitest,
48
+ * `source-region-text` is `pass` (tree-reconstructed — provenance below), and
49
+ * `retry-evidence` is `pass` (per-attempt evidence lands in
50
+ * `FailureFinding.annex.attempts`). `resolved-config-coverage` is
51
+ * `unsupported`: playwright's resolved `FullConfig`/`FullProject` never
52
+ * expose `expect.timeout` to the reporter (doc §4 `expect.timeout` row),
53
+ * so `instrumentConfigDigest` below cannot cover it. This capability is
54
+ * intentionally not one of `schema.ts`'s `EVIDENCE_CAPABILITY_NAMES` — it is
55
+ * an instrument-config capability, not an evidence capability, so a report's
56
+ * `failure_evidence.degraded_capabilities` never lists it (decision 6).
57
+ */
58
+ export const PLAYWRIGHT_CAPABILITIES = {
59
+ verdicts: 'pass',
60
+ 'source-location': 'pass',
61
+ suppression: 'pass',
62
+ inventory: 'pass',
63
+ 'failure-evidence': 'pass',
64
+ 'source-region-text': 'pass', // provenance: tree-reconstructed
65
+ // (spec §3.6 option (b) — error.location [channel-provided
66
+ // pointer] + recorded source tree から sourceLineText を
67
+ // 決定的に再構成。raw error.snippet [channel-provided] は
68
+ // line-shift 不安定なため使用しない。0b-core-1/2 実測、
69
+ // probes/playwright-0b-core/observations/stability-report.json)
70
+ 'retry-evidence': 'pass',
71
+ // expect.timeout は resolved FullConfig に公開されない — 同 doc §4
72
+ // expect.timeout 行、決定6
73
+ 'resolved-config-coverage': 'unsupported',
74
+ };
75
+ export function buildRunRecord(capture, ctx) {
76
+ if (capture.capture_version !== CAPTURE_VERSION) {
77
+ throw new RecorderError(`unsupported capture version ${capture.capture_version}`);
78
+ }
79
+ const redProjects = new Set();
80
+ for (const t of capture.tests) {
81
+ const final = finalAttemptOf(t);
82
+ if (final.status === 'failed' || final.status === 'timedOut')
83
+ redProjects.add(t.project);
84
+ }
85
+ const depsClosure = transitiveDependencyClosure(capture.config.projects);
86
+ const seenIds = new Set();
87
+ const observations = [];
88
+ const durations = {};
89
+ const suppressed = [];
90
+ const reportedSorted = [...capture.tests].sort((a, b) => compareId(testId(a, ctx.worktree), testId(b, ctx.worktree)));
91
+ for (const t of reportedSorted) {
92
+ const id = testId(t, ctx.worktree);
93
+ if (seenIds.has(id)) {
94
+ // Fail-closed on ambiguity (§12): duplicate canonical IDs are not guessable.
95
+ throw new RecorderError(`duplicate test id: ${id}`);
96
+ }
97
+ seenIds.add(id);
98
+ const obs = toReportedObservation(t, id, ctx);
99
+ observations.push(obs);
100
+ durations[id] = Math.round(finalAttemptOf(t).duration_ms * 1000);
101
+ if (obs.verdict === 'skip' || obs.verdict === 'xfail')
102
+ suppressed.push(id);
103
+ }
104
+ const unreportedSorted = [...capture.unreported_tests].sort((a, b) => compareId(testId(a, ctx.worktree), testId(b, ctx.worktree)));
105
+ for (const t of unreportedSorted) {
106
+ const id = testId(t, ctx.worktree);
107
+ if (seenIds.has(id)) {
108
+ throw new RecorderError(`duplicate test id: ${id}`);
109
+ }
110
+ seenIds.add(id);
111
+ const obs = toUnreportedObservation(t, id, redProjects, depsClosure, ctx);
112
+ observations.push(obs);
113
+ if (obs.verdict === 'skip')
114
+ suppressed.push(id);
115
+ }
116
+ observations.sort((a, b) => compareId(a.test_id, b.test_id));
117
+ const testSources = {};
118
+ for (const t of [...capture.tests, ...capture.unreported_tests]) {
119
+ const rel = relPath(ctx.worktree, t.file_abs);
120
+ if (rel in testSources)
121
+ continue;
122
+ const digest = fileDigest(t.file_abs);
123
+ if (digest !== null)
124
+ testSources[rel] = digest;
125
+ }
126
+ const configSources = {};
127
+ for (const abs of [...new Set(capture.config_files)].sort()) {
128
+ const digest = fileDigest(abs);
129
+ if (digest !== null)
130
+ configSources[configSourceKey(abs, ctx.worktree)] = digest;
131
+ }
132
+ const notRun = observations.filter((o) => o.verdict === 'not_run').length;
133
+ let status = 'complete';
134
+ if (capture.unhandled_errors > 0)
135
+ status = 'crashed';
136
+ else if (capture.status === 'interrupted' ||
137
+ capture.status === 'timedout' ||
138
+ notRun > 0)
139
+ status = 'partial';
140
+ return {
141
+ schema_version: SCHEMA_VERSION,
142
+ repo: {
143
+ identity: ctx.repoIdentity,
144
+ worktree: ctx.worktree,
145
+ branch: ctx.branch,
146
+ cwd: ctx.cwdRel,
147
+ },
148
+ invocation: { command: ctx.command, selector: [...ctx.selector].sort() },
149
+ instrument: {
150
+ adapter: ADAPTER_NAME,
151
+ adapter_version: ctx.adapterVersion,
152
+ composition_id: COMPOSITION_ID,
153
+ config_digest: instrumentConfigDigest(capture),
154
+ capabilities: { ...PLAYWRIGHT_CAPABILITIES },
155
+ },
156
+ environment: {
157
+ runner: capture.runner,
158
+ runner_version: capture.runner_version,
159
+ runtime: `node ${process.version}`,
160
+ os: process.platform,
161
+ env_fingerprint: canonicalDigest(Object.fromEntries(DECLARED_ENV_VARS.map((k) => [k, process.env[k] ?? null]))),
162
+ },
163
+ provenance: {
164
+ head: ctx.head,
165
+ dirty_diff_digest: ctx.dirtyDiffDigest,
166
+ tree_digest: ctx.treeDigest,
167
+ },
168
+ surface: {
169
+ inventory_digest: canonicalDigest([...seenIds].sort()),
170
+ test_sources: testSources,
171
+ config_sources: configSources,
172
+ suppressed,
173
+ },
174
+ completeness: {
175
+ status,
176
+ child_exit_code: ctx.childExitCode,
177
+ module_errors: [],
178
+ },
179
+ observations,
180
+ recording: {
181
+ recorder: 'vdelta-run',
182
+ recorded_at_ms: ctx.recordedAtMs,
183
+ durations_us: durations,
184
+ raw_stdout: redactText(ctx.rawStdout),
185
+ raw_stderr: redactText(ctx.rawStderr),
186
+ capture_reason: capture.status,
187
+ unhandled_errors: capture.unhandled_errors,
188
+ },
189
+ };
190
+ }
191
+ /**
192
+ * The §4-judged-`yes` covering set (docs/compositions/playwright-native-1.md
193
+ * §4): every field the resolved `FullConfig`/`FullProject` exposes that can
194
+ * change evidence bytes or test-selection verdicts. `testDir`/`rootDir`/
195
+ * `configFile`/`reporter` are `no` in the judgement table and are absent from
196
+ * `Capture['config']`/`CapturedPwProjectConfig` by construction (never
197
+ * captured at all — see `./capture.ts`), so no extra filtering is needed
198
+ * here. `expect.timeout` is `channel-unavailable` (§4) and is likewise absent
199
+ * from the capture; it is disclosed instead via
200
+ * `PLAYWRIGHT_CAPABILITIES['resolved-config-coverage'] === 'unsupported'`.
201
+ */
202
+ export function instrumentConfigDigest(capture) {
203
+ return canonicalDigest({
204
+ fully_parallel: capture.config.fullyParallel,
205
+ workers: capture.config.workers,
206
+ shard: capture.config.shard,
207
+ forbid_only: capture.config.forbidOnly,
208
+ max_failures: capture.config.maxFailures,
209
+ grep: capture.config.grep,
210
+ grep_invert: capture.config.grepInvert,
211
+ global_timeout: capture.config.globalTimeout,
212
+ projects: capture.config.projects.map((p) => ({
213
+ name: p.name,
214
+ test_match: p.testMatch,
215
+ test_ignore: p.testIgnore,
216
+ dependencies: p.dependencies,
217
+ retries: p.retries,
218
+ timeout: p.timeout,
219
+ use: p.use,
220
+ })),
221
+ });
222
+ }
223
+ /**
224
+ * Project-scoped test id: `${rel}::${project}::${titles.join(' > ')}`.
225
+ * `rel` is computed here (not carried in the capture) because the reporter
226
+ * runs in-process without the worktree root; only the recorder — which has
227
+ * `RecordContext.worktree` — can normalize `file_abs` into a worktree-relative
228
+ * path.
229
+ */
230
+ export function testId(t, worktree) {
231
+ return `${relPath(worktree, t.file_abs)}::${t.project}::${t.titles.join(' > ')}`;
232
+ }
233
+ function compareId(a, b) {
234
+ return a < b ? -1 : a > b ? 1 : 0;
235
+ }
236
+ function finalAttemptOf(t) {
237
+ const sorted = [...t.attempts].sort((a, b) => a.retry - b.retry);
238
+ const last = sorted.at(-1);
239
+ if (last === undefined) {
240
+ throw new RecorderError(`test ${t.test_case_id} has no attempts`);
241
+ }
242
+ return last;
243
+ }
244
+ function failingAttemptsOf(t) {
245
+ return [...t.attempts]
246
+ .filter((a) => a.status === 'failed' || a.status === 'timedOut')
247
+ .sort((a, b) => a.retry - b.retry);
248
+ }
249
+ /**
250
+ * `annotations[].type` marker for a `status: 'skipped'` reported test
251
+ * (contract §5.2-equivalent for playwright): `'skip'`/`'fixme'` when present,
252
+ * else `'runtime'`.
253
+ */
254
+ function skipMarkerFromAnnotations(annotations) {
255
+ if (annotations.some((a) => a.type === 'skip'))
256
+ return 'skip';
257
+ if (annotations.some((a) => a.type === 'fixme'))
258
+ return 'fixme';
259
+ return 'runtime';
260
+ }
261
+ /**
262
+ * Verdict channel first (INV-3): the *final* attempt's `status`, refined only
263
+ * by `expected_status`/structured markers — see this file's header for the
264
+ * mapping table (module doc comment references the task's contract).
265
+ */
266
+ function mapVerdict(t, finalAttempt) {
267
+ const status = finalAttempt.status;
268
+ if (status === 'skipped') {
269
+ return {
270
+ verdict: 'skip',
271
+ suppression: { marker: skipMarkerFromAnnotations(t.annotations) },
272
+ };
273
+ }
274
+ if (status === 'interrupted')
275
+ return { verdict: 'not_run' };
276
+ const expected = t.expected_status;
277
+ if (status === 'passed' && expected === 'passed')
278
+ return { verdict: 'pass' };
279
+ if ((status === 'failed' || status === 'timedOut') && expected === 'failed')
280
+ return { verdict: 'xfail', suppression: { marker: 'fail' } };
281
+ if (status === 'passed' && expected === 'failed')
282
+ return { verdict: 'fail' };
283
+ if ((status === 'failed' || status === 'timedOut') && expected === 'passed')
284
+ return { verdict: 'fail' };
285
+ // Fail-closed on ambiguity (§12): no other status/expected combination is
286
+ // guessable from playwright's public semantics.
287
+ throw new RecorderError(`unmapped playwright verdict: status=${status} expected=${expected} (test ${t.test_case_id})`);
288
+ }
289
+ function toReportedObservation(t, id, ctx) {
290
+ const finalAttempt = finalAttemptOf(t);
291
+ const { verdict, suppression } = mapVerdict(t, finalAttempt);
292
+ const obs = { test_id: id, verdict };
293
+ if (suppression)
294
+ obs.suppression = suppression;
295
+ if (t.location_line !== null)
296
+ obs.source_ref = {
297
+ file: relPath(ctx.worktree, t.file_abs),
298
+ line: t.location_line,
299
+ };
300
+ const failing = failingAttemptsOf(t);
301
+ if (verdict === 'fail' &&
302
+ (finalAttempt.status === 'failed' || finalAttempt.status === 'timedOut')) {
303
+ // status failed|timedOut & expected passed: build finding from the final
304
+ // (failing) attempt; earlier failed attempts (if any, from retries) are
305
+ // retry evidence (annex.attempts).
306
+ const priorFailing = failing.filter((a) => a.retry !== finalAttempt.retry);
307
+ obs.finding = buildFinding(t, finalAttempt, priorFailing, ctx);
308
+ }
309
+ else if (verdict === 'pass' && failing.length > 0) {
310
+ // outcome 'flaky' (D2 implementation mechanism 1, design doc §7): final
311
+ // attempt passed but an earlier attempt failed. verdict stays 'pass';
312
+ // the finding is built from the last failing attempt, with any earlier
313
+ // failing attempts recorded as retry evidence.
314
+ const primary = failing.at(-1);
315
+ const priorFailing = failing.filter((a) => a.retry !== primary.retry);
316
+ obs.finding = buildFinding(t, primary, priorFailing, ctx);
317
+ }
318
+ return obs;
319
+ }
320
+ /**
321
+ * Computes each project's transitive dependency set from
322
+ * `Capture['config'].projects[].dependencies` (direct deps only, as declared
323
+ * by `FullProject.dependencies`). Cycle-safe (a project cannot depend on
324
+ * itself through the closure).
325
+ */
326
+ function transitiveDependencyClosure(projects) {
327
+ const direct = new Map();
328
+ for (const p of projects)
329
+ direct.set(p.name, p.dependencies);
330
+ const closure = new Map();
331
+ function resolve(name, seen) {
332
+ const cached = closure.get(name);
333
+ if (cached !== undefined)
334
+ return cached;
335
+ const result = new Set();
336
+ for (const dep of direct.get(name) ?? []) {
337
+ if (seen.has(dep))
338
+ continue;
339
+ result.add(dep);
340
+ const nestedSeen = new Set(seen);
341
+ nestedSeen.add(dep);
342
+ for (const nested of resolve(dep, nestedSeen))
343
+ result.add(nested);
344
+ }
345
+ closure.set(name, result);
346
+ return result;
347
+ }
348
+ for (const p of projects)
349
+ resolve(p.name, new Set([p.name]));
350
+ return closure;
351
+ }
352
+ /**
353
+ * spec §11.1 floor (never drop an unreported test from `observations`).
354
+ * Per architecture decision (setup-cascade.json realtime observation): the
355
+ * authored/dependency distinction is only meaningful for *reported* tests
356
+ * (onTestEnd fired). A block-cascaded project's unreported tests — including
357
+ * authored `test.skip()` ones — arrive with `annotations: []` and are
358
+ * structurally indistinguishable, so they all synthesize into a single
359
+ * `marker: 'dependency'` observation. Unreported tests whose transitive
360
+ * dependency projects contain no red (failed/timedOut) reported test are
361
+ * `not_run` instead (e.g. `interrupted`/`globalTimeout`/`maxFailures`
362
+ * early-abort — no dependency to blame).
363
+ */
364
+ function toUnreportedObservation(t, id, redProjects, depsClosure, ctx) {
365
+ const obs = { test_id: id, verdict: 'not_run' };
366
+ if (t.location_line !== null)
367
+ obs.source_ref = {
368
+ file: relPath(ctx.worktree, t.file_abs),
369
+ line: t.location_line,
370
+ };
371
+ const deps = depsClosure.get(t.project) ?? new Set();
372
+ const redDeps = [...deps].filter((d) => redProjects.has(d)).sort();
373
+ if (redDeps.length > 0) {
374
+ obs.verdict = 'skip';
375
+ obs.suppression = {
376
+ marker: 'dependency',
377
+ note: `blocked by red dependency project ${redDeps[0]}`,
378
+ };
379
+ }
380
+ return obs;
381
+ }
382
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape stripping requires the ESC control char
383
+ const ANSI_PATTERN = /\u001b\[[0-9;]*m/g;
384
+ function stripAnsi(message) {
385
+ return message.replace(ANSI_PATTERN, '');
386
+ }
387
+ const EXCEPTION_TYPE_PATTERN = /^([A-Za-z][A-Za-z0-9]*Error|AssertionError|TimeoutError):/;
388
+ function extractExceptionType(strippedMessage) {
389
+ const m = strippedMessage.match(EXCEPTION_TYPE_PATTERN);
390
+ return m?.[1] ?? 'Error';
391
+ }
392
+ /**
393
+ * CE-1 failing source region text, tree-reconstructed (doc §8): prefer
394
+ * `error.location` (channel-provided pointer), else the innermost parsed
395
+ * stack frame that lands inside the test file itself. Raw `error.snippet` is
396
+ * never read (line-shift unstable, `stability-report.json`). Returns
397
+ * `undefined` — key omitted, never a guessed value — when neither a location
398
+ * nor an in-file frame exists (e.g. fixture teardown failures) or the source
399
+ * file cannot be read.
400
+ */
401
+ function sourceRegion(t, e) {
402
+ let target;
403
+ if (e.location !== undefined) {
404
+ target = { file: e.location.file, line: e.location.line };
405
+ }
406
+ else {
407
+ const inner = e.frames.find((f) => f.file === t.file_abs);
408
+ if (inner !== undefined)
409
+ target = { file: inner.file, line: inner.line };
410
+ }
411
+ if (target === undefined)
412
+ return undefined;
413
+ try {
414
+ const lines = readFileSync(target.file, 'utf8').split('\n');
415
+ const text = lines[target.line - 1];
416
+ return text !== undefined ? text.trim() : undefined;
417
+ }
418
+ catch {
419
+ return undefined;
420
+ }
421
+ }
422
+ /**
423
+ * CE-3 position stability: per-frame line offsets relative to the test's own
424
+ * declaration line, for frames inside the test module only (same rule as
425
+ * `../vitest/recorder.ts`'s `relOffsets`).
426
+ */
427
+ function relOffsets(t, e) {
428
+ if (t.location_line === null)
429
+ return [];
430
+ return e.frames
431
+ .filter((f) => f.file === t.file_abs)
432
+ .map((f) => f.line - t.location_line);
433
+ }
434
+ function buildEvidenceError(e, t) {
435
+ const stripped = stripAnsi(e.message);
436
+ const region = sourceRegion(t, e);
437
+ return {
438
+ exception_type: extractExceptionType(stripped),
439
+ message: redactText(stripped),
440
+ rel_offsets: relOffsets(t, e),
441
+ ...(region !== undefined ? { source_region: region } : {}),
442
+ };
443
+ }
444
+ function buildFinding(t, primary, priorFailing, ctx) {
445
+ const errors = primary.errors.map((e) => buildEvidenceError(e, t));
446
+ const consoleEntries = primary.stdio.map((s) => ({
447
+ type: s.type,
448
+ content: redactText(s.text),
449
+ }));
450
+ const attachments = primary.attachments;
451
+ const priorAttempts = [...priorFailing]
452
+ .sort((a, b) => a.retry - b.retry)
453
+ .map((a) => ({
454
+ retry: a.retry,
455
+ errors: a.errors.map((e) => buildEvidenceError(e, t)),
456
+ frames: a.errors.flatMap((e) => e.frames),
457
+ }));
458
+ return {
459
+ evidence_digest: canonicalDigest({ errors }),
460
+ structural_fingerprint: canonicalDigest({
461
+ module: relPath(ctx.worktree, t.file_abs),
462
+ exception_types: errors.map((e) => e.exception_type),
463
+ rel_offsets: errors.map((e) => e.rel_offsets),
464
+ source_regions: errors.map((e) => e.source_region ?? null),
465
+ }),
466
+ evidence: { errors },
467
+ context_digest: canonicalDigest([...consoleEntries, ...attachments]),
468
+ annex: redactValue({
469
+ frames: primary.errors.flatMap((e) => e.frames),
470
+ console: consoleEntries,
471
+ location_line: t.location_line,
472
+ ...(priorAttempts.length > 0 ? { attempts: priorAttempts } : {}),
473
+ ...(attachments.length > 0 ? { attachments } : {}),
474
+ }),
475
+ };
476
+ }
477
+ /**
478
+ * Normalizes an absolute path into a `surface.config_sources`/test-file key:
479
+ * a worktree-relative POSIX-style path when the file lives inside the
480
+ * worktree, or `external:<abs path>` when it doesn't. Private duplicate of
481
+ * `../vitest/recorder.ts`'s `configSourceKey` (same convention) — the vitest
482
+ * module is not imported from here, and is not modified by this file.
483
+ */
484
+ export function configSourceKey(absPath, worktree) {
485
+ const resolvedPath = realpath(absPath);
486
+ const resolvedWorktree = realpath(worktree);
487
+ const rel = relative(resolvedWorktree, resolvedPath);
488
+ if (rel.startsWith('..') || isAbsolute(rel))
489
+ return `external:${resolvedPath}`;
490
+ return rel.replaceAll('\\', '/');
491
+ }
492
+ function relPath(worktree, fileAbs) {
493
+ return relative(realpath(worktree), realpath(fileAbs)).replaceAll('\\', '/');
494
+ }
495
+ function realpath(path) {
496
+ try {
497
+ return realpathSync(path);
498
+ }
499
+ catch {
500
+ return path;
501
+ }
502
+ }
503
+ function fileDigest(path) {
504
+ try {
505
+ return canonicalDigest(readFileSync(path, 'utf8'));
506
+ }
507
+ catch {
508
+ return null;
509
+ }
510
+ }
511
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../../src/adapters/playwright/recorder.ts"],"names":[],"mappings":"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"}