hardware-observatory-hardware-browser.json
docs/evidence/hardware-observatory-hardware-browser.json
1{
2 "config": {
3 "configFile": "/home/jason/coding/dw-web/playwright.config.ts",
4 "rootDir": "/home/jason/coding/dw-web/tests/browser",
5 "forbidOnly": false,
6 "fullyParallel": false,
7 "globalSetup": "/home/jason/coding/dw-web/tools/cli/qualify-gpu.ts",
8 "globalTeardown": null,
9 "globalTimeout": 0,
10 "grep": {},
11 "grepInvert": null,
12 "maxFailures": 1,
13 "metadata": {
14 "graphicsProfile": "hardware",
15 "hardware": {
16 "capturedAt": "2026-10-26T04:36:53.655Z",
17 "adapter": {
18 "vendor": "intel",
19 "architecture": "xe-3lpg",
20 "device": "",
21 "description": "",
22 "isFallbackAdapter": false,
23 "features": [
24 "bgra8unorm-storage",
25 "chromium-experimental-multi-draw-indirect",
26 "chromium-experimental-snorm16-texture-formats",
27 "chromium-experimental-subgroup-matrix",
28 "chromium-experimental-timestamp-query-inside-passes",
29 "chromium-experimental-unorm16-texture-formats",
30 "clip-distances",
31 "core-features-and-limits",
32 "depth-clip-control",
33 "depth32float-stencil8",
34 "dual-source-blending",
35 "float32-blendable",
36 "float32-filterable",
37 "indirect-first-instance",
38 "primitive-index",
39 "rg11b10ufloat-renderable",
40 "shader-f16",
41 "subgroups",
42 "texture-component-swizzle",
43 "texture-compression-bc",
44 "texture-compression-bc-sliced-3d",
45 "texture-compression-etc2",
46 "timestamp-query"
47 ],
48 "maxTextureDimension2D": 8192,
49 "maxBufferSize": 268435456,
50 "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36"
51 },
52 "os": {
53 "platform": "linux",
54 "release": "7.2.8-9-omarchy",
55 "arch": "x64"
56 },
57 "cpu": "Intel(R) Core(TM) Ultra X7 358H",
58 "node": "v22.23.4",
59 "browser": "141.0.7390.37",
60 "launchArgs": [
61 "--enable-unsafe-webgpu",
62 "--use-angle=vulkan",
63 "--enable-features=Vulkan"
64 ]
65 },
66 "actualWorkers": 1
67 },
68 "preserveOutput": "always",
69 "reporter": [
70 [
71 "list",
72 null
73 ],
74 [
75 "json",
76 {
77 "outputFile": "test-results/browser-results.json"
78 }
79 ]
80 ],
81 "reportSlowTests": {
82 "max": 5,
83 "threshold": 300000
84 },
85 "quiet": false,
86 "projects": [
87 {
88 "outputDir": "/home/jason/coding/dw-web/test-results",
89 "repeatEach": 1,
90 "retries": 0,
91 "metadata": {
92 "graphicsProfile": "hardware",
93 "hardware": {
94 "capturedAt": "2026-10-26T04:36:53.655Z",
95 "adapter": {
96 "vendor": "intel",
97 "architecture": "xe-3lpg",
98 "device": "",
99 "description": "",
100 "isFallbackAdapter": false,
101 "features": [
102 "bgra8unorm-storage",
103 "chromium-experimental-multi-draw-indirect",
104 "chromium-experimental-snorm16-texture-formats",
105 "chromium-experimental-subgroup-matrix",
106 "chromium-experimental-timestamp-query-inside-passes",
107 "chromium-experimental-unorm16-texture-formats",
108 "clip-distances",
109 "core-features-and-limits",
110 "depth-clip-control",
111 "depth32float-stencil8",
112 "dual-source-blending",
113 "float32-blendable",
114 "float32-filterable",
115 "indirect-first-instance",
116 "primitive-index",
117 "rg11b10ufloat-renderable",
118 "shader-f16",
119 "subgroups",
120 "texture-component-swizzle",
121 "texture-compression-bc",
122 "texture-compression-bc-sliced-3d",
123 "texture-compression-etc2",
124 "timestamp-query"
125 ],
126 "maxTextureDimension2D": 8192,
127 "maxBufferSize": 268435456,
128 "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36"
129 },
130 "os": {
131 "platform": "linux",
132 "release": "7.2.8-9-omarchy",
133 "arch": "x64"
134 },
135 "cpu": "Intel(R) Core(TM) Ultra X7 358H",
136 "node": "v22.23.4",
137 "browser": "141.0.7390.37",
138 "launchArgs": [
139 "--enable-unsafe-webgpu",
140 "--use-angle=vulkan",
141 "--enable-features=Vulkan"
142 ]
143 },
144 "actualWorkers": 1
145 },
146 "id": "",
147 "name": "",
148 "testDir": "/home/jason/coding/dw-web/tests/browser",
149 "testIgnore": [],
150 "testMatch": [
151 "**/*.@(spec|test).?(c|m)[jt]s?(x)"
152 ],
153 "timeout": 60000
154 }
155 ],
156 "shard": null,
157 "updateSnapshots": "missing",
158 "updateSourceMethod": "patch",
159 "version": "1.56.1",
160 "workers": 1,
161 "webServer": {
162 "command": "\"/home/jason/.local/share/mise/installs/node/22.23.4/bin/node\" tools/cli/test-server.mjs",
163 "url": "http://localhost:5174",
164 "reuseExistingServer": false
165 }
166 },
167 "suites": [
168 {
169 "title": "probe.spec.ts",
170 "file": "probe.spec.ts",
171 "column": 0,
172 "line": 0,
173 "specs": [
174 {
175 "title": "owned renderer works on the main thread and survives worker resize, device loss and restart",
176 "ok": true,
177 "tags": [],
178 "tests": [
179 {
180 "timeout": 210000,
181 "annotations": [],
182 "expectedStatus": "passed",
183 "projectId": "",
184 "projectName": "",
185 "results": [
186 {
187 "workerIndex": 0,
188 "parallelIndex": 0,
189 "status": "passed",
190 "duration": 27863,
191 "errors": [],
192 "stdout": [],
193 "stderr": [],
194 "retry": 0,
195 "startTime": "2026-10-26T04:36:54.282Z",
196 "annotations": [],
197 "attachments": []
198 }
199 ],
200 "status": "expected"
201 }
202 ],
203 "id": "9223f0ac28d4fb57516f-670e6ce58e269ad01b10",
204 "file": "probe.spec.ts",
205 "line": 22,
206 "column": 1
207 },
208 {
209 "title": "probe reports unsupported graphics without joining a room",
210 "ok": true,
211 "tags": [],
212 "tests": [
213 {
214 "timeout": 60000,
215 "annotations": [],
216 "expectedStatus": "passed",
217 "projectId": "",
218 "projectName": "",
219 "results": [
220 {
221 "workerIndex": 0,
222 "parallelIndex": 0,
223 "status": "passed",
224 "duration": 245,
225 "errors": [],
226 "stdout": [],
227 "stderr": [],
228 "retry": 0,
229 "startTime": "2026-10-26T04:37:22.196Z",
230 "annotations": [],
231 "attachments": []
232 }
233 ],
234 "status": "expected"
235 }
236 ],
237 "id": "9223f0ac28d4fb57516f-52017e701cd954089e18",
238 "file": "probe.spec.ts",
239 "line": 102,
240 "column": 1
241 },
242 {
243 "title": "cancelling a worker probe releases ownership and permits another run",
244 "ok": true,
245 "tags": [],
246 "tests": [
247 {
248 "timeout": 60000,
249 "annotations": [],
250 "expectedStatus": "passed",
251 "projectId": "",
252 "projectName": "",
253 "results": [
254 {
255 "workerIndex": 0,
256 "parallelIndex": 0,
257 "status": "passed",
258 "duration": 11629,
259 "errors": [],
260 "stdout": [],
261 "stderr": [],
262 "retry": 0,
263 "startTime": "2026-10-26T04:37:22.448Z",
264 "annotations": [],
265 "attachments": []
266 }
267 ],
268 "status": "expected"
269 }
270 ],
271 "id": "9223f0ac28d4fb57516f-ae0dc73a467c994fa365",
272 "file": "probe.spec.ts",
273 "line": 106,
274 "column": 1
275 },
276 {
277 "title": "gesture probe confirms pointer release and closes the silent audio context",
278 "ok": true,
279 "tags": [],
280 "tests": [
281 {
282 "timeout": 60000,
283 "annotations": [],
284 "expectedStatus": "passed",
285 "projectId": "",
286 "projectName": "",
287 "results": [
288 {
289 "workerIndex": 0,
290 "parallelIndex": 0,
291 "status": "passed",
292 "duration": 260,
293 "errors": [],
294 "stdout": [],
295 "stderr": [],
296 "retry": 0,
297 "startTime": "2026-10-26T04:37:34.084Z",
298 "annotations": [],
299 "attachments": []
300 }
301 ],
302 "status": "expected"
303 }
304 ],
305 "id": "9223f0ac28d4fb57516f-31fd3ed2c650a720887a",
306 "file": "probe.spec.ts",
307 "line": 112,
308 "column": 1
309 },
310 {
311 "title": "worker exceptions produce a bounded failure and the next run can recover",
312 "ok": true,
313 "tags": [],
314 "tests": [
315 {
316 "timeout": 60000,
317 "annotations": [],
318 "expectedStatus": "passed",
319 "projectId": "",
320 "projectName": "",
321 "results": [
322 {
323 "workerIndex": 0,
324 "parallelIndex": 0,
325 "status": "passed",
326 "duration": 14150,
327 "errors": [],
328 "stdout": [],
329 "stderr": [],
330 "retry": 0,
331 "startTime": "2026-10-26T04:37:34.355Z",
332 "annotations": [],
333 "attachments": []
334 }
335 ],
336 "status": "expected"
337 }
338 ],
339 "id": "9223f0ac28d4fb57516f-6d55eb8b8c66bdb36365",
340 "file": "probe.spec.ts",
341 "line": 119,
342 "column": 1
343 },
344 {
345 "title": "a silent worker hits its deadline and releases ownership",
346 "ok": true,
347 "tags": [],
348 "tests": [
349 {
350 "timeout": 60000,
351 "annotations": [],
352 "expectedStatus": "passed",
353 "projectId": "",
354 "projectName": "",
355 "results": [
356 {
357 "workerIndex": 0,
358 "parallelIndex": 0,
359 "status": "passed",
360 "duration": 692,
361 "errors": [],
362 "stdout": [],
363 "stderr": [],
364 "retry": 0,
365 "startTime": "2026-10-26T04:37:48.512Z",
366 "annotations": [],
367 "attachments": []
368 }
369 ],
370 "status": "expected"
371 }
372 ],
373 "id": "9223f0ac28d4fb57516f-ef2defa104f7db687fcd",
374 "file": "probe.spec.ts",
375 "line": 127,
376 "column": 1
377 },
378 {
379 "title": "contract worker failures release ownership and can be retried",
380 "ok": true,
381 "tags": [],
382 "tests": [
383 {
384 "timeout": 60000,
385 "annotations": [],
386 "expectedStatus": "passed",
387 "projectId": "",
388 "projectName": "",
389 "results": [
390 {
391 "workerIndex": 0,
392 "parallelIndex": 0,
393 "status": "passed",
394 "duration": 22159,
395 "errors": [],
396 "stdout": [],
397 "stderr": [],
398 "retry": 0,
399 "startTime": "2026-10-26T04:37:49.213Z",
400 "annotations": [],
401 "attachments": []
402 }
403 ],
404 "status": "expected"
405 }
406 ],
407 "id": "9223f0ac28d4fb57516f-b3deda63d68b9612ab06",
408 "file": "probe.spec.ts",
409 "line": 135,
410 "column": 1
411 },
412 {
413 "title": "unavailable workers are reported as unsupported after main-thread rendering",
414 "ok": true,
415 "tags": [],
416 "tests": [
417 {
418 "timeout": 60000,
419 "annotations": [],
420 "expectedStatus": "passed",
421 "projectId": "",
422 "projectName": "",
423 "results": [
424 {
425 "workerIndex": 0,
426 "parallelIndex": 0,
427 "status": "passed",
428 "duration": 596,
429 "errors": [],
430 "stdout": [],
431 "stderr": [],
432 "retry": 0,
433 "startTime": "2026-10-26T04:38:11.379Z",
434 "annotations": [],
435 "attachments": []
436 }
437 ],
438 "status": "expected"
439 }
440 ],
441 "id": "9223f0ac28d4fb57516f-adcfe0c38cb9a6544447",
442 "file": "probe.spec.ts",
443 "line": 145,
444 "column": 1
445 },
446 {
447 "title": "replay worker failure and cancellation release ownership and allow recovery",
448 "ok": true,
449 "tags": [],
450 "tests": [
451 {
452 "timeout": 300000,
453 "annotations": [],
454 "expectedStatus": "passed",
455 "projectId": "",
456 "projectName": "",
457 "results": [
458 {
459 "workerIndex": 0,
460 "parallelIndex": 0,
461 "status": "passed",
462 "duration": 29208,
463 "errors": [],
464 "stdout": [],
465 "stderr": [],
466 "retry": 0,
467 "startTime": "2026-10-26T04:38:11.980Z",
468 "annotations": [],
469 "attachments": []
470 }
471 ],
472 "status": "expected"
473 }
474 ],
475 "id": "9223f0ac28d4fb57516f-9f95bd903a43704cd4ac",
476 "file": "probe.spec.ts",
477 "line": 151,
478 "column": 1
479 },
480 {
481 "title": "a silent simulation replay worker reaches its deadline and releases ownership",
482 "ok": true,
483 "tags": [],
484 "tests": [
485 {
486 "timeout": 60000,
487 "annotations": [],
488 "expectedStatus": "passed",
489 "projectId": "",
490 "projectName": "",
491 "results": [
492 {
493 "workerIndex": 0,
494 "parallelIndex": 0,
495 "status": "passed",
496 "duration": 9278,
497 "errors": [],
498 "stdout": [],
499 "stderr": [],
500 "retry": 0,
501 "startTime": "2026-10-26T04:38:41.194Z",
502 "annotations": [],
503 "attachments": []
504 }
505 ],
506 "status": "expected"
507 }
508 ],
509 "id": "9223f0ac28d4fb57516f-3cae303d423b525eab39",
510 "file": "probe.spec.ts",
511 "line": 163,
512 "column": 1
513 }
514 ]
515 }
516 ],
517 "errors": [],
518 "stats": {
519 "startTime": "2026-10-26T04:36:50.787Z",
520 "duration": 119753.28,
521 "expected": 10,
522 "skipped": 0,
523 "unexpected": 0,
524 "flaky": 0
525 }
526}