@testivai/witness 2.4.0 → 2.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 (106) hide show
  1. package/README.md +9 -2
  2. package/dist/baselines/store.d.ts +31 -0
  3. package/dist/baselines/store.d.ts.map +1 -1
  4. package/dist/baselines/store.js +38 -1
  5. package/dist/baselines/store.js.map +1 -1
  6. package/dist/bin/testivai.js +2 -0
  7. package/dist/bin/testivai.js.map +1 -1
  8. package/dist/capture/element-map.d.ts +23 -2
  9. package/dist/capture/element-map.d.ts.map +1 -1
  10. package/dist/capture/element-map.js +102 -4
  11. package/dist/capture/element-map.js.map +1 -1
  12. package/dist/capture/environment.d.ts +243 -0
  13. package/dist/capture/environment.d.ts.map +1 -0
  14. package/dist/capture/environment.js +403 -0
  15. package/dist/capture/environment.js.map +1 -0
  16. package/dist/capture/health-limits.d.ts +14 -0
  17. package/dist/capture/health-limits.d.ts.map +1 -0
  18. package/dist/capture/health-limits.js +17 -0
  19. package/dist/capture/health-limits.js.map +1 -0
  20. package/dist/capture/health.d.ts +124 -0
  21. package/dist/capture/health.d.ts.map +1 -0
  22. package/dist/capture/health.js +327 -0
  23. package/dist/capture/health.js.map +1 -0
  24. package/dist/capture/native-app.d.ts +77 -0
  25. package/dist/capture/native-app.d.ts.map +1 -0
  26. package/dist/capture/native-app.js +172 -0
  27. package/dist/capture/native-app.js.map +1 -0
  28. package/dist/capture/shard.d.ts +17 -0
  29. package/dist/capture/shard.d.ts.map +1 -1
  30. package/dist/capture/shard.js +8 -1
  31. package/dist/capture/shard.js.map +1 -1
  32. package/dist/commands/approve.d.ts.map +1 -1
  33. package/dist/commands/approve.js +20 -0
  34. package/dist/commands/approve.js.map +1 -1
  35. package/dist/commands/env.d.ts +37 -0
  36. package/dist/commands/env.d.ts.map +1 -0
  37. package/dist/commands/env.js +113 -0
  38. package/dist/commands/env.js.map +1 -0
  39. package/dist/commands/merge-captures.d.ts.map +1 -1
  40. package/dist/commands/merge-captures.js +10 -0
  41. package/dist/commands/merge-captures.js.map +1 -1
  42. package/dist/config/local-config.d.ts +27 -0
  43. package/dist/config/local-config.d.ts.map +1 -1
  44. package/dist/config/local-config.js +1 -0
  45. package/dist/config/local-config.js.map +1 -1
  46. package/dist/config/validate-config.d.ts.map +1 -1
  47. package/dist/config/validate-config.js +22 -0
  48. package/dist/config/validate-config.js.map +1 -1
  49. package/dist/diff/attribution.d.ts +16 -2
  50. package/dist/diff/attribution.d.ts.map +1 -1
  51. package/dist/diff/attribution.js +5 -4
  52. package/dist/diff/attribution.js.map +1 -1
  53. package/dist/diff/dom-diff.d.ts.map +1 -1
  54. package/dist/diff/dom-diff.js +7 -1
  55. package/dist/diff/dom-diff.js.map +1 -1
  56. package/dist/index.d.ts +10 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +42 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/report/anchor.d.ts +18 -0
  61. package/dist/report/anchor.d.ts.map +1 -0
  62. package/dist/report/anchor.js +51 -0
  63. package/dist/report/anchor.js.map +1 -0
  64. package/dist/report/compare.d.ts +18 -1
  65. package/dist/report/compare.d.ts.map +1 -1
  66. package/dist/report/compare.js +107 -16
  67. package/dist/report/compare.js.map +1 -1
  68. package/dist/report/environment.d.ts +101 -0
  69. package/dist/report/environment.d.ts.map +1 -0
  70. package/dist/report/environment.js +354 -0
  71. package/dist/report/environment.js.map +1 -0
  72. package/dist/report/generator.d.ts +20 -2
  73. package/dist/report/generator.d.ts.map +1 -1
  74. package/dist/report/generator.js +46 -6
  75. package/dist/report/generator.js.map +1 -1
  76. package/dist/report/health.d.ts +115 -0
  77. package/dist/report/health.d.ts.map +1 -0
  78. package/dist/report/health.js +279 -0
  79. package/dist/report/health.js.map +1 -0
  80. package/dist/report/index.d.ts +9 -2
  81. package/dist/report/index.d.ts.map +1 -1
  82. package/dist/report/index.js +25 -1
  83. package/dist/report/index.js.map +1 -1
  84. package/dist/report/results.d.ts +73 -1
  85. package/dist/report/results.d.ts.map +1 -1
  86. package/dist/report/shift-check.d.ts +40 -0
  87. package/dist/report/shift-check.d.ts.map +1 -0
  88. package/dist/report/shift-check.js +109 -0
  89. package/dist/report/shift-check.js.map +1 -0
  90. package/dist/report/template.d.ts +28 -1
  91. package/dist/report/template.d.ts.map +1 -1
  92. package/dist/report/template.js +179 -16
  93. package/dist/report/template.js.map +1 -1
  94. package/dist/report/thumbnail.d.ts +76 -0
  95. package/dist/report/thumbnail.d.ts.map +1 -0
  96. package/dist/report/thumbnail.js +166 -0
  97. package/dist/report/thumbnail.js.map +1 -0
  98. package/dist/report/validate.d.ts +53 -0
  99. package/dist/report/validate.d.ts.map +1 -0
  100. package/dist/report/validate.js +383 -0
  101. package/dist/report/validate.js.map +1 -0
  102. package/dist/standalone/run.d.ts +39 -1
  103. package/dist/standalone/run.d.ts.map +1 -1
  104. package/dist/standalone/run.js +142 -3
  105. package/dist/standalone/run.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Shift confirmation: is a claimed shift the same content, moved?
3
+ *
4
+ * Element maps pair baseline and candidate elements by path, and call a pair
5
+ * with the same size and styles at another position a pure move. Content
6
+ * inserted above an element renumbers its `:nth-of-type` path, so the path
7
+ * can pair it with a look-alike neighbour: two order cards of the same size
8
+ * and styles, with different text. That pair read as a shift by a wrong
9
+ * distance (−16 px while the content moved +64 px, measured on a
10
+ * react-native-web page), and a wrong page shift.
11
+ *
12
+ * The pixels tell them apart. The same content, moved, matches at its new
13
+ * position: in real Chrome, true shifts differed on 0.00% of their pixels,
14
+ * fractional moves included, and look-alike neighbours on 4.8–6.7%.
15
+ * A shift is confirmed when at most SHIFT_PIXEL_TOLERANCE of the element's
16
+ * pixels differ, at the best of the pair's offset ±1 px (the rects are
17
+ * rounded independently of where the browser drew the content).
18
+ */
19
+ import type { RgbaImage } from './thumbnail';
20
+ export interface ShiftBox {
21
+ x: number;
22
+ y: number;
23
+ width: number;
24
+ height: number;
25
+ }
26
+ /** Share of an element's compared pixels that may differ for its move to count as a shift. */
27
+ export declare const SHIFT_PIXEL_TOLERANCE = 0.01;
28
+ /**
29
+ * A checker over one compared pair of images: `check(baselineRect,
30
+ * candidateRect)` is true when the candidate rect shows the baseline rect's
31
+ * content. Pixels under a mask, or outside either image, are not compared;
32
+ * with nothing comparable there is no evidence against the map, and the
33
+ * claim stands. Answers are cached per pair of rects.
34
+ *
35
+ * @param threshold per-pixel colour threshold, the same YIQ metric and value
36
+ * as the pixel diff (0–1)
37
+ * @param masks areas excluded from the diff, in image coordinates
38
+ */
39
+ export declare function makeShiftCheck(baseline: RgbaImage, current: RgbaImage, threshold: number, masks?: readonly ShiftBox[]): (baselineRect: ShiftBox, candidateRect: ShiftBox) => boolean;
40
+ //# sourceMappingURL=shift-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shift-check.d.ts","sourceRoot":"","sources":["../../src/report/shift-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAiB1C;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,SAAS,QAAQ,EAAO,GAC9B,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,KAAK,OAAO,CA0D9D"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Shift confirmation: is a claimed shift the same content, moved?
4
+ *
5
+ * Element maps pair baseline and candidate elements by path, and call a pair
6
+ * with the same size and styles at another position a pure move. Content
7
+ * inserted above an element renumbers its `:nth-of-type` path, so the path
8
+ * can pair it with a look-alike neighbour: two order cards of the same size
9
+ * and styles, with different text. That pair read as a shift by a wrong
10
+ * distance (−16 px while the content moved +64 px, measured on a
11
+ * react-native-web page), and a wrong page shift.
12
+ *
13
+ * The pixels tell them apart. The same content, moved, matches at its new
14
+ * position: in real Chrome, true shifts differed on 0.00% of their pixels,
15
+ * fractional moves included, and look-alike neighbours on 4.8–6.7%.
16
+ * A shift is confirmed when at most SHIFT_PIXEL_TOLERANCE of the element's
17
+ * pixels differ, at the best of the pair's offset ±1 px (the rects are
18
+ * rounded independently of where the browser drew the content).
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.SHIFT_PIXEL_TOLERANCE = void 0;
22
+ exports.makeShiftCheck = makeShiftCheck;
23
+ /** Share of an element's compared pixels that may differ for its move to count as a shift. */
24
+ exports.SHIFT_PIXEL_TOLERANCE = 0.01;
25
+ /** Pixels compared per element at most; larger elements are sampled on a grid. */
26
+ const MAX_SAMPLES = 40000;
27
+ const OFFSETS = [
28
+ [0, 0],
29
+ [0, -1],
30
+ [0, 1],
31
+ [-1, 0],
32
+ [1, 0],
33
+ [-1, -1],
34
+ [1, -1],
35
+ [-1, 1],
36
+ [1, 1],
37
+ ];
38
+ /**
39
+ * A checker over one compared pair of images: `check(baselineRect,
40
+ * candidateRect)` is true when the candidate rect shows the baseline rect's
41
+ * content. Pixels under a mask, or outside either image, are not compared;
42
+ * with nothing comparable there is no evidence against the map, and the
43
+ * claim stands. Answers are cached per pair of rects.
44
+ *
45
+ * @param threshold per-pixel colour threshold, the same YIQ metric and value
46
+ * as the pixel diff (0–1)
47
+ * @param masks areas excluded from the diff, in image coordinates
48
+ */
49
+ function makeShiftCheck(baseline, current, threshold, masks = []) {
50
+ const deltaThreshold = threshold * threshold * 35215;
51
+ const cache = new Map();
52
+ const masked = (x, y) => masks.some((m) => x >= m.x && x < m.x + m.width && y >= m.y && y < m.y + m.height);
53
+ const differs = (bi, ci) => {
54
+ const b = baseline.data;
55
+ const c = current.data;
56
+ const dr = c[ci] - b[bi];
57
+ const dg = c[ci + 1] - b[bi + 1];
58
+ const db = c[ci + 2] - b[bi + 2];
59
+ if (dr === 0 && dg === 0 && db === 0)
60
+ return false;
61
+ const y = dr * 0.29889531 + dg * 0.58662247 + db * 0.11448223;
62
+ const i = dr * 0.59597799 - dg * 0.2741761 - db * 0.32180189;
63
+ const q = dr * 0.21147017 - dg * 0.52261711 + db * 0.31114694;
64
+ return y * y * 0.5053 + i * i * 0.299 + q * q * 0.1957 > deltaThreshold;
65
+ };
66
+ return (b, c) => {
67
+ const key = `${b.x},${b.y},${b.width},${b.height}|${c.x},${c.y},${c.width},${c.height}`;
68
+ const known = cache.get(key);
69
+ if (known !== undefined)
70
+ return known;
71
+ const width = Math.min(b.width, c.width);
72
+ const height = Math.min(b.height, c.height);
73
+ const step = Math.max(1, Math.ceil(Math.sqrt((width * height) / MAX_SAMPLES)));
74
+ let comparedAny = false;
75
+ let confirmed = false;
76
+ for (const [ox, oy] of OFFSETS) {
77
+ let compared = 0;
78
+ let different = 0;
79
+ for (let y = 0; y < height; y += step) {
80
+ const by = b.y + y;
81
+ const cy = c.y + y + oy;
82
+ if (by < 0 || by >= baseline.height || cy < 0 || cy >= current.height)
83
+ continue;
84
+ for (let x = 0; x < width; x += step) {
85
+ const bx = b.x + x;
86
+ const cx = c.x + x + ox;
87
+ if (bx < 0 || bx >= baseline.width || cx < 0 || cx >= current.width)
88
+ continue;
89
+ if (masks.length > 0 && (masked(bx, by) || masked(cx, cy)))
90
+ continue;
91
+ compared++;
92
+ if (differs((by * baseline.width + bx) * 4, (cy * current.width + cx) * 4))
93
+ different++;
94
+ }
95
+ }
96
+ if (compared === 0)
97
+ continue;
98
+ comparedAny = true;
99
+ if (different / compared <= exports.SHIFT_PIXEL_TOLERANCE) {
100
+ confirmed = true;
101
+ break;
102
+ }
103
+ }
104
+ const answer = confirmed || !comparedAny;
105
+ cache.set(key, answer);
106
+ return answer;
107
+ };
108
+ }
109
+ //# sourceMappingURL=shift-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shift-check.js","sourceRoot":"","sources":["../../src/report/shift-check.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,35 @@
9
9
  * 3-column diff view, approve command copy button, image zoom overlay.
10
10
  */
11
11
  import type { ReportData } from './results';
12
+ import { snapshotAnchorId } from './anchor';
13
+ export { snapshotAnchorId };
14
+ /** A line shown at the top of the report. */
15
+ export interface ReportNotice {
16
+ text: string;
17
+ /** Linked after the text, in order; a link to anything but an https URL is left out. */
18
+ links?: Array<{
19
+ href: string;
20
+ label: string;
21
+ }>;
22
+ /** 'warning' for something the reader should weigh (a fork's results). Default 'info'. */
23
+ tone?: 'info' | 'warning';
24
+ }
25
+ export interface RenderOptions {
26
+ notices?: ReportNotice[];
27
+ /** Ask search engines not to index the page (a report published to a site). */
28
+ noindex?: boolean;
29
+ /**
30
+ * Add a Content-Security-Policy that lets the page use only its own inline
31
+ * styles and scripts and its own images: nothing loaded from or sent to
32
+ * another site, no forms, no base URL. For a published report, whose data
33
+ * can come from a fork's CI run: defence in depth behind the escaping.
34
+ */
35
+ csp?: boolean;
36
+ }
37
+ /** All a report needs: its inline styles and scripts, and its images. */
38
+ export declare const REPORT_CSP: string;
12
39
  /**
13
40
  * Render a standalone HTML report from report data.
14
41
  */
15
- export declare function renderHtml(data: ReportData): string;
42
+ export declare function renderHtml(data: ReportData, options?: RenderOptions): string;
16
43
  //# sourceMappingURL=template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/report/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,WAAW,CAAC;AAG/E;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA6XnD"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/report/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,WAAW,CAAC;AAU/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,yEAAyE;AACzE,eAAO,MAAM,UAAU,QAOX,CAAC;AAEb;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAwZhF"}
@@ -10,24 +10,41 @@
10
10
  * 3-column diff view, approve command copy button, image zoom overlay.
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.REPORT_CSP = exports.snapshotAnchorId = void 0;
13
14
  exports.renderHtml = renderHtml;
14
15
  const diff_shape_1 = require("./diff-shape");
15
16
  const size_mismatch_1 = require("./size-mismatch");
17
+ const environment_1 = require("./environment");
18
+ const anchor_1 = require("./anchor");
19
+ Object.defineProperty(exports, "snapshotAnchorId", { enumerable: true, get: function () { return anchor_1.snapshotAnchorId; } });
20
+ const health_1 = require("./health");
21
+ /** All a report needs: its inline styles and scripts, and its images. */
22
+ exports.REPORT_CSP = [
23
+ "default-src 'none'",
24
+ "img-src 'self'",
25
+ "style-src 'unsafe-inline'",
26
+ "script-src 'unsafe-inline'",
27
+ "base-uri 'none'",
28
+ "form-action 'none'",
29
+ ].join('; ');
16
30
  /**
17
31
  * Render a standalone HTML report from report data.
18
32
  */
19
- function renderHtml(data) {
33
+ function renderHtml(data, options = {}) {
20
34
  const { summary, snapshots, version, timestamp } = data;
21
35
  const changed = snapshots.filter((s) => s.status === 'changed');
22
36
  const newSnapshots = snapshots.filter((s) => s.status === 'new');
23
37
  const passed = snapshots.filter((s) => s.status === 'passed');
24
38
  const missing = data.missingBaselines ?? [];
39
+ // One line per environment change shared by two or more snapshots; a
40
+ // single snapshot's own verdict already says it.
41
+ const envGroups = (0, environment_1.environmentChangeGroups)(snapshots).filter((g) => g.snapshots.length >= 2);
25
42
  return `<!DOCTYPE html>
26
43
  <html lang="en">
27
44
  <head>
28
45
  <meta charset="UTF-8">
29
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
30
- <title>TestivAI Visual Report</title>
46
+ ${options.csp ? `<meta http-equiv="Content-Security-Policy" content="${exports.REPORT_CSP}">\n ` : ''}<meta name="viewport" content="width=device-width, initial-scale=1.0">
47
+ ${options.noindex ? '<meta name="robots" content="noindex, nofollow">\n ' : ''}<title>TestivAI Visual Report</title>
31
48
  <style>
32
49
  /* ── Theme tokens ─────────────────────────────────────────────────────
33
50
  Light is the default (no attribute); html[data-theme="dark"] overrides.
@@ -126,10 +143,17 @@ function renderHtml(data) {
126
143
  .section-title.new { color: var(--new); } .section-title.new::before { background: var(--new); }
127
144
  .section-title.passed { color: var(--passed); } .section-title.passed::before { background: var(--passed); }
128
145
 
146
+ /* Notices at the top of a published report (run, pull request, fork) */
147
+ .report-notice { background: var(--info-bg); border: 1px solid var(--border-soft); border-left: 4px solid var(--info); border-radius: 10px; padding: 10px 14px; margin-bottom: 12px; font-size: 13px; }
148
+ .report-notice.warning { background: var(--new-bg); border-left-color: var(--new); }
149
+ .report-notice a { color: var(--link); }
150
+
129
151
  /* Snapshot card */
130
152
  .snapshot { background: var(--surface); border: 1px solid var(--border-soft); border-radius: 14px; padding: 20px; margin-bottom: 16px; box-shadow: var(--shadow); }
131
153
  .snapshot-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
132
- .snapshot-name { font-size: 15px; font-weight: 650; }
154
+ .snapshot-name { font-size: 15px; font-weight: 650; color: inherit; text-decoration: none; }
155
+ .snapshot-name:hover { text-decoration: underline; }
156
+ .snapshot:target { outline: 2px solid var(--accent); outline-offset: 2px; }
133
157
  .snapshot-badge { padding: 3px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; text-transform: capitalize; }
134
158
  .badge-changed { background: var(--changed-bg); color: var(--changed); }
135
159
  .badge-new { background: var(--new-bg); color: var(--new); }
@@ -149,11 +173,18 @@ function renderHtml(data) {
149
173
  /* Identical DOM and styles, but a diff concentrated in one area or large: not noise, a warning look */
150
174
  .verdict.v-unexplained { background: var(--new-bg); color: var(--new); border: 1px solid color-mix(in srgb, var(--new) 30%, transparent); }
151
175
  .verdict.v-style { background: var(--new-bg); color: var(--new); border: 1px solid color-mix(in srgb, var(--new) 30%, transparent); }
176
+ .verdict.v-drift { background: var(--info-bg); color: var(--info); border: 1px solid color-mix(in srgb, var(--info) 30%, transparent); }
177
+ .env-notice { background: var(--info-bg); border: 1px solid color-mix(in srgb, var(--info) 30%, transparent); border-radius: 10px; padding: 14px 16px; margin-bottom: 24px; font-size: 13px; color: var(--info); }
178
+ .env-notice code { background: var(--code-bg); border-radius: 3px; padding: 1px 5px; font-size: 12px; }
179
+ .env-hint { font-size: 12px; color: var(--muted); margin-top: 6px; }
152
180
  .verdict.v-size { background: var(--changed-bg); color: var(--changed); border: 1px solid color-mix(in srgb, var(--changed) 30%, transparent); }
153
181
  .verdict.v-structural { background: var(--changed-bg); color: var(--changed); border: 1px solid color-mix(in srgb, var(--changed) 30%, transparent); }
154
182
  .verdict.v-shift { background: var(--info-bg); color: var(--info); border: 1px solid color-mix(in srgb, var(--info) 30%, transparent); }
155
183
  .verdict.v-new { background: var(--new-bg); color: var(--new); border: 1px solid color-mix(in srgb, var(--new) 30%, transparent); }
156
184
  .verdict.v-pass { background: var(--passed-bg); color: var(--passed); border: 1px solid color-mix(in srgb, var(--passed) 30%, transparent); }
185
+ /* Unhealthy capture: a font, stylesheet or other asset failed to load; never the noise style */
186
+ .verdict.v-unhealthy { background: var(--changed-bg); color: var(--changed); border: 1px dashed color-mix(in srgb, var(--changed) 55%, transparent); }
187
+ .health-hint { font-size: 12px; color: var(--new); margin-top: 6px; }
157
188
  .verdict code { background: var(--code-bg); border-radius: 3px; padding: 1px 4px; font-size: 12px; }
158
189
 
159
190
  /* DOM / style signal */
@@ -230,7 +261,7 @@ function renderHtml(data) {
230
261
  .sidebar.open { transform: translateX(0); }
231
262
  .sidebar-backdrop.active { display: block; }
232
263
  .main { margin-left: 0; padding: 16px; max-width: 100%; }
233
- .section { scroll-margin-top: 64px; }
264
+ .section, .snapshot { scroll-margin-top: 64px; }
234
265
  .snapshot { padding: 14px; }
235
266
  .snapshot-header { flex-wrap: wrap; gap: 6px; }
236
267
  .diff-view, .diff-view.two-col { grid-template-columns: 1fr; }
@@ -278,7 +309,7 @@ function renderHtml(data) {
278
309
  <div class="oss-notice">
279
310
  <h4>Pixel-exact mode</h4>
280
311
  <p>Playwright, WebdriverIO, Selenium and <code>testivai witness</code> captures are stabilized by default (animations, transitions, caret, web fonts). Other dynamic content (timestamps, ads, rotating images) still shows up as a diff until you configure it.</p>
281
- <p>Noise is labeled, not removed: <strong>DOM unchanged</strong> with matching computed styles means likely render noise only when the diff is also small and scattered; a diff concentrated in one area, or over ${diff_shape_1.NOISE_MAX_DIFF_PERCENT}% of pixels, gets its own verdict. When styles were not compared, a stylesheet-only change is not ruled out.</p>
312
+ <p>Noise is labeled, not removed: <strong>DOM unchanged</strong> with matching computed styles means likely render noise only when the diff is also small and scattered; a diff concentrated in one area, or over ${diff_shape_1.NOISE_MAX_DIFF_PERCENT}% of pixels, gets its own verdict. When styles were not compared, a stylesheet-only change is not ruled out. A capture whose web fonts or stylesheets failed to load reads <strong>Unhealthy capture</strong>, never noise.</p>
282
313
  <p>To reduce noise:<br>
283
314
  • Add <code>ignoreSelectors</code> or <code>mask</code> for dynamic elements<br>
284
315
  • For variable-height regions, ignore them with <code>mode: "collapse"</code> (<code>@testivai/witness-playwright</code> only)<br>
@@ -288,6 +319,14 @@ function renderHtml(data) {
288
319
  </aside>
289
320
 
290
321
  <main class="main">
322
+ ${renderNotices(options.notices ?? [])}
323
+ ${envGroups
324
+ .map((g) => `
325
+ <div class="env-notice">
326
+ <div>${escapeHtml((0, environment_1.environmentChangeLine)(g))}</div>
327
+ ${g.snapshots.slice(0, 20).map((n) => `<code>${escapeHtml(n)}</code>`).join(' ')}${g.snapshots.length > 20 ? ' …' : ''}
328
+ </div>`)
329
+ .join('')}
291
330
  ${missing.length > 0 ? `
292
331
  <div class="missing-notice">
293
332
  <div class="m-title">${missing.length} baseline${missing.length === 1 ? '' : 's'} received no capture this run</div>
@@ -396,6 +435,28 @@ function renderHtml(data) {
396
435
  </body>
397
436
  </html>`;
398
437
  }
438
+ /** The notices at the top of the report; a link only to an https page. */
439
+ function renderNotices(notices) {
440
+ return notices
441
+ .map((n) => {
442
+ const links = (n.links ?? [])
443
+ .filter((l) => isHttpsUrl(l.href))
444
+ .map((l) => ` · <a href="${escapeHtml(l.href)}">${escapeHtml(l.label)}</a>`)
445
+ .join('');
446
+ return `<div class="report-notice ${n.tone === 'warning' ? 'warning' : 'info'}">${escapeHtml(n.text)}${links}</div>`;
447
+ })
448
+ .join('\n ');
449
+ }
450
+ function isHttpsUrl(value) {
451
+ if (/[\s"'<>`\\]/.test(value))
452
+ return false;
453
+ try {
454
+ return new URL(value).protocol === 'https:';
455
+ }
456
+ catch {
457
+ return false;
458
+ }
459
+ }
399
460
  function renderSnapshot(snapshot) {
400
461
  const badgeClass = snapshot.status === 'changed' ? 'badge-changed' : snapshot.status === 'new' ? 'badge-new' : 'badge-passed';
401
462
  const hasBaseline = !!snapshot.baselinePath;
@@ -408,18 +469,19 @@ function renderSnapshot(snapshot) {
408
469
  gridClass += ' one-col';
409
470
  else
410
471
  gridClass += ' two-col';
472
+ const anchor = (0, anchor_1.snapshotAnchorId)(snapshot.name);
411
473
  return `
412
- <div class="snapshot">
474
+ <div class="snapshot" id="${anchor}">
413
475
  <div class="snapshot-header">
414
- <span class="snapshot-name">${escapeHtml(snapshot.name)}</span>
476
+ <a class="snapshot-name" href="#${anchor}" title="Link to this snapshot">${escapeHtml(snapshot.name)}</a>
415
477
  <span class="snapshot-badge ${badgeClass}">${snapshot.status}</span>
416
478
  </div>
417
479
  ${renderStats(snapshot)}
418
480
  ${renderAnalysis(snapshot)}
419
481
  <div class="${gridClass}">
420
- ${hasBaseline ? `<div class="diff-col"><label>Baseline</label><img src="${snapshot.baselinePath}" alt="Baseline"></div>` : ''}
421
- ${hasDiff ? `<div class="diff-col"><label>Diff <span class="heat-legend" title="Heatmap: color = difference magnitude">subtle <span class="heat-bar"></span> strong</span></label><img src="${snapshot.diffPath}" alt="Diff heatmap"></div>` : ''}
422
- ${hasCurrent ? `<div class="diff-col"><label>Current</label><img src="${snapshot.currentPath}" alt="Current"></div>` : ''}
482
+ ${hasBaseline ? `<div class="diff-col"><label>Baseline</label><img src="${escapeHtml(snapshot.baselinePath ?? '')}" alt="Baseline"></div>` : ''}
483
+ ${hasDiff ? `<div class="diff-col"><label>Diff <span class="heat-legend" title="Heatmap: color = difference magnitude">subtle <span class="heat-bar"></span> strong</span></label><img src="${escapeHtml(snapshot.diffPath ?? '')}" alt="Diff heatmap"></div>` : ''}
484
+ ${hasCurrent ? `<div class="diff-col"><label>Current</label><img src="${escapeHtml(snapshot.currentPath ?? '')}" alt="Current"></div>` : ''}
423
485
  </div>
424
486
  ${snapshot.status === 'changed' || snapshot.status === 'new' ? `
425
487
  <div class="approve-cmd">
@@ -475,7 +537,9 @@ function autoPassNote(snapshot) {
475
537
  */
476
538
  function renderAnalysis(snapshot) {
477
539
  const verdict = renderVerdict(snapshot);
478
- const layers = [renderDomHint(snapshot), renderRegions(snapshot), renderMasks(snapshot)].filter(Boolean).join('');
540
+ const layers = [renderDomHint(snapshot), renderHealthWarnings(snapshot), renderEnvironment(snapshot), renderRegions(snapshot), renderMasks(snapshot)]
541
+ .filter(Boolean)
542
+ .join('');
479
543
  if (!verdict && !layers)
480
544
  return '';
481
545
  return `
@@ -503,6 +567,80 @@ function renderAnalysis(snapshot) {
503
567
  * warning too: a bad capture, or a change the style check does not cover.
504
568
  */
505
569
  function renderVerdict(snapshot) {
570
+ // An unhealthy capture outranks every other reading: what it shows is not
571
+ // the page as built, so the layers below describe a broken capture.
572
+ const unhealthy = unhealthyVerdict(snapshot);
573
+ if (unhealthy)
574
+ return unhealthy;
575
+ if (snapshot.status === 'new')
576
+ return baseVerdict(snapshot);
577
+ const change = (0, environment_1.snapshotEnvironmentChange)(snapshot);
578
+ if (change && snapshot.environment?.policy === 'strict') {
579
+ return `<div class="verdict v-size"><span>Environment changed (strict policy) — ${escapeHtml(change)} since the baseline. environmentPolicy is "strict", so this snapshot is changed whatever its pixels say (${snapshot.diffPercent.toFixed(2)}% differ). Approve it to re-baseline in this environment, or capture it in the baseline's.</span></div>`;
580
+ }
581
+ const env = snapshot.environment;
582
+ if (change && env?.baseline && env.candidate && snapshot.sizeMismatch && env.renderingDelta.includes('adapter.captureMethod')) {
583
+ const from = (0, environment_1.describeCaptureMethod)(env.baseline.adapter.captureMethod);
584
+ const to = (0, environment_1.describeCaptureMethod)(env.candidate.adapter.captureMethod);
585
+ const dom = snapshot.dom?.changed && snapshot.dom.summary ? ` The DOM also changed (${escapeHtml(summarizeDom(snapshot.dom.summary))}): review that on its own.` : '';
586
+ return `<div class="verdict v-drift"><span>Capture method changed — ${escapeHtml(from)} → ${escapeHtml(to)} since the baseline (${escapeHtml((0, size_mismatch_1.formatSizes)(snapshot.sizeMismatch))}): the size change comes from how the screenshot was taken, not from the page. Re-baseline with this capture method, or capture the way the baseline was.${dom}</span></div>`;
587
+ }
588
+ if (change && (0, environment_1.isRenderingDrift)(snapshot)) {
589
+ const size = snapshot.sizeMismatch ? `; that also explains the size change (${escapeHtml((0, size_mismatch_1.formatSizeMismatch)(snapshot.sizeMismatch))})` : '';
590
+ const next = snapshot.status === 'changed'
591
+ ? 'Re-baseline once the images are confirmed to match apart from rendering.'
592
+ : `Auto-passed by the '${escapeHtml(snapshot.autoPassed ?? '')}' criterion; re-baseline in this environment so the tolerance keeps measuring the page, not the machine.`;
593
+ return `<div class="verdict v-drift"><span>Rendering drift — the environment changed since the baseline (${escapeHtml(change)}), and the DOM and computed styles are identical: the machine changed, not the page${size}. ${next}</span></div>`;
594
+ }
595
+ const base = baseVerdict(snapshot);
596
+ if (change && base && (snapshot.status === 'changed' || snapshot.autoPassed)) {
597
+ const note = ` The environment also changed since the baseline (${escapeHtml(change)}), which can add rendering differences of its own.`;
598
+ return base.replace(/<\/span><\/div>$/, `${note}</span></div>`);
599
+ }
600
+ return base;
601
+ }
602
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
603
+ /**
604
+ * "Unhealthy capture" when either side is unhealthy (report/health.ts), with
605
+ * an environment change after it: unhealthy first, rendering drift too when
606
+ * both are true. Empty otherwise.
607
+ */
608
+ function unhealthyVerdict(snapshot) {
609
+ const reading = (0, health_1.captureHealthReading)(snapshot.captureHealth);
610
+ if (!reading)
611
+ return '';
612
+ let then;
613
+ if (snapshot.status === 'new')
614
+ then = `This is a first capture: ${reading.next}.`;
615
+ else if (snapshot.status === 'passed') {
616
+ const who = reading.side === 'both' ? 'neither image shows' : reading.side === 'baseline' ? 'the baseline does not show' : 'the current capture does not show';
617
+ const passed = snapshot.autoPassed ? `It auto-passed by the '${snapshot.autoPassed}' criterion` : 'It passed';
618
+ then = `${passed}, but ${who} the page as built: ${reading.next}.`;
619
+ }
620
+ else
621
+ then = `${capitalize(reading.next)}.`;
622
+ let env = '';
623
+ const change = (0, environment_1.snapshotEnvironmentChange)(snapshot);
624
+ if (change && snapshot.status === 'changed') {
625
+ if (snapshot.environment?.policy === 'strict')
626
+ env = ` Environment changed too (strict policy) — ${change} since the baseline.`;
627
+ else if ((0, environment_1.isRenderingDrift)(snapshot))
628
+ env = ` Rendering drift too — the environment changed since the baseline (${change}), with the DOM and computed styles identical; judge it once the capture is healthy.`;
629
+ else
630
+ env = ` The environment also changed since the baseline (${change}), which can add rendering differences of its own.`;
631
+ }
632
+ return `<div class="verdict v-unhealthy"><span>Unhealthy capture — ${escapeHtml(reading.detail)}. ${escapeHtml(then)}${escapeHtml(env)}</span></div>`;
633
+ }
634
+ /** What else failed to load (broken images, failed scripts): a layer, never a verdict. */
635
+ function renderHealthWarnings(snapshot) {
636
+ const warnings = snapshot.captureHealth?.warnings ?? [];
637
+ if (warnings.length === 0)
638
+ return '';
639
+ return `
640
+ <div class="health-hint">Capture warnings — ${escapeHtml(warnings.join('; '))}</div>`;
641
+ }
642
+ /** The verdict without the environment: what the page-side layers say. */
643
+ function baseVerdict(snapshot) {
506
644
  // A DOM change never decides the status: the pixels do. A pass whose DOM
507
645
  // differs is reported as information, with nothing to approve.
508
646
  if (snapshot.status === 'passed' && !snapshot.autoPassed) {
@@ -536,7 +674,7 @@ function renderVerdict(snapshot) {
536
674
  // Auto-passed within a tolerance although the DOM changed: say so, and
537
675
  // never ask for an approval there is nothing to give.
538
676
  if (snapshot.autoPassed && snapshot.dom?.changed && snapshot.dom.summary) {
539
- return `<div class="verdict v-pass"><span>Auto-passed via the <code>${snapshot.autoPassed}</code> criterion — within the configured tolerance, but the DOM differs (${escapeHtml(summarizeDom(snapshot.dom.summary))}). Nothing to approve; check the tolerance is meant to cover a markup change.</span></div>`;
677
+ return `<div class="verdict v-pass"><span>Auto-passed via the <code>${escapeHtml(snapshot.autoPassed)}</code> criterion — within the configured tolerance, but the DOM differs (${escapeHtml(summarizeDom(snapshot.dom.summary))}). Nothing to approve; check the tolerance is meant to cover a markup change.</span></div>`;
540
678
  }
541
679
  // Style-only only when the DOM is unchanged: a class or style attribute
542
680
  // change restyles elements too, and that is a structural change below.
@@ -569,7 +707,7 @@ function renderVerdict(snapshot) {
569
707
  return `<div class="verdict v-unverified"><span>Styles not compared — could be render noise or a stylesheet-only change: pixels differ and the DOM is identical, but computed styles were not compared (no comparable style digests on both sides), so a stylesheet-only change is not ruled out. Compare the images before approving.</span></div>`;
570
708
  }
571
709
  if (snapshot.autoPassed) {
572
- return `<div class="verdict v-pass"><span>Auto-passed via the <code>${snapshot.autoPassed}</code> criterion — reported for transparency, no action needed.</span></div>`;
710
+ return `<div class="verdict v-pass"><span>Auto-passed via the <code>${escapeHtml(snapshot.autoPassed)}</code> criterion — reported for transparency, no action needed.</span></div>`;
573
711
  }
574
712
  return '';
575
713
  }
@@ -631,6 +769,13 @@ function renderDomHint(snapshot) {
631
769
  }
632
770
  if (snapshot.dom.noiseHint) {
633
771
  if (snapshot.dom.styleCheck === 'match') {
772
+ if ((0, environment_1.isRenderingDrift)(snapshot)) {
773
+ return `
774
+ <div class="dom-hint noise" title="DOM tree and computed styles are identical, and the environment the page was captured in changed since the baseline.">
775
+ <span class="label">DOM unchanged</span>
776
+ <span class="summary">— styles verified unchanged; the environment changed since the baseline, so the pixel diff is rendering drift.</span>
777
+ </div>`;
778
+ }
634
779
  const shape = (0, diff_shape_1.diffShape)(snapshot);
635
780
  if (shape.kind === 'concentrated') {
636
781
  return `
@@ -683,6 +828,24 @@ function renderDomHint(snapshot) {
683
828
  <span class="summary">— ${escapeHtml(parts.join(', ') || 'structural difference')}.${alsoRestyled}</span>
684
829
  </div>`;
685
830
  }
831
+ /**
832
+ * The environment layer: every field that changed since the baseline,
833
+ * rendering changes first and context after. Absent when nothing changed or
834
+ * a side recorded no environment.
835
+ */
836
+ function renderEnvironment(snapshot) {
837
+ const env = snapshot.environment;
838
+ if (!env || env.delta.length === 0 || !env.baseline || !env.candidate)
839
+ return '';
840
+ const context = env.delta.filter((f) => !env.renderingDelta.includes(f));
841
+ const parts = [];
842
+ if (env.renderingDelta.length > 0)
843
+ parts.push((0, environment_1.describeEnvironmentChange)(env.baseline, env.candidate, env.renderingDelta));
844
+ if (context.length > 0)
845
+ parts.push(`context: ${(0, environment_1.describeEnvironmentChange)(env.baseline, env.candidate, context)}`);
846
+ return `
847
+ <div class="env-hint">Environment changed since the baseline — ${escapeHtml(parts.join(' · '))}</div>`;
848
+ }
686
849
  /**
687
850
  * Region chip list: "N changed regions" with coordinates. Clicking a chip
688
851
  * zooms the diff image so the reviewer can inspect that area.
@@ -707,7 +870,7 @@ function renderRegions(snapshot) {
707
870
  return `${selector} changed (${r.width}×${r.height} @ ${r.x}, ${r.y})`;
708
871
  };
709
872
  const chips = regions
710
- .map((r, i) => `<li><a href="#" class="region-chip${r.classification === 'shift' ? ' region-shift' : ''}" data-diff="${snapshot.diffPath ?? ''}" title="${r.diffPixels} changed pixels${r.elements?.[0] ? ' — ' + escapeHtml(r.elements[0].selector) : ''}">#${i + 1} · ${describe(r)}</a></li>`)
873
+ .map((r, i) => `<li><a href="#" class="region-chip${r.classification === 'shift' ? ' region-shift' : ''}" data-diff="${escapeHtml(snapshot.diffPath ?? '')}" title="${r.diffPixels} changed pixels${r.elements?.[0] ? ' — ' + escapeHtml(r.elements[0].selector) : ''}">#${i + 1} · ${describe(r)}</a></li>`)
711
874
  .join('');
712
875
  const shifted = regions.filter((r) => r.classification === 'shift').length;
713
876
  const title = shifted > 0
@@ -739,7 +902,7 @@ function renderMasks(snapshot) {
739
902
  : m.source.type === 'edge'
740
903
  ? `edge <code>${escapeHtml(JSON.stringify(m.source.spec))}</code>`
741
904
  : `region <code>${escapeHtml(JSON.stringify(m.source.spec))}</code>`;
742
- return `${src} → ${m.width}×${m.height} @ (${m.x}, ${m.y}) <em>(${m.source.origin})</em>`;
905
+ return `${src} → ${m.width}×${m.height} @ (${m.x}, ${m.y}) <em>(${escapeHtml(m.source.origin)})</em>`;
743
906
  };
744
907
  const maskBlock = masks.length > 0
745
908
  ? `
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/report/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/report/template.ts"],"names":[],"mappings":"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"}