prefabs-acceptance.json
docs/evidence/prefabs-acceptance.json
1{
2 "format": 1,
3 "recordedAt": "2026-10-24T21:42:33.904573+00:00",
4 "source": {
5 "revision": "ec34043ecb6faeeef895fbe593f8a67201dd12f2",
6 "dirty": false,
7 "builtAt": "2026-10-24T21:38:50.657Z"
8 },
9 "environment": {
10 "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
11 "secureContext": true,
12 "hardwareConcurrency": 16,
13 "devicePixelRatio": 1
14 },
15 "headless": {
16 "command": "npm test",
17 "tests": 144,
18 "pass": 144,
19 "fail": 0,
20 "skipped": 0,
21 "log": "prefabs-initial-headless.tap"
22 },
23 "browser": {
24 "stats": {
25 "startTime": "2026-10-24T21:38:50.116Z",
26 "duration": 166632.71899999998,
27 "expected": 23,
28 "skipped": 0,
29 "unexpected": 0,
30 "flaky": 0
31 },
32 "tests": [
33 {
34 "name": "two real browsers share doors and chat, then the guest takes over when the host leaves",
35 "ok": true,
36 "results": [
37 {
38 "status": "passed",
39 "durationMs": 10430
40 }
41 ]
42 },
43 {
44 "name": "simultaneous real-browser pickups grant one lantern, including across host handoff",
45 "ok": true,
46 "results": [
47 {
48 "status": "passed",
49 "durationMs": 37965
50 }
51 ]
52 },
53 {
54 "name": "travelers see each other move in the rendered world",
55 "ok": true,
56 "results": [
57 {
58 "status": "passed",
59 "durationMs": 7264
60 }
61 ]
62 },
63 {
64 "name": "world pixel checks use completed presentation and reject an invisible canvas despite visible UI",
65 "ok": true,
66 "results": [
67 {
68 "status": "passed",
69 "durationMs": 2416
70 }
71 ]
72 },
73 {
74 "name": "canonical ECS frames stay bounded while acknowledgements stall and then catch up",
75 "ok": true,
76 "results": [
77 {
78 "status": "passed",
79 "durationMs": 3901
80 }
81 ]
82 },
83 {
84 "name": "new checkpoints save without animation frames",
85 "ok": true,
86 "results": [
87 {
88 "status": "passed",
89 "durationMs": 4523
90 }
91 ]
92 },
93 {
94 "name": "restored checkpoints save without animation frames",
95 "ok": true,
96 "results": [
97 {
98 "status": "passed",
99 "durationMs": 3705
100 }
101 ]
102 },
103 {
104 "name": "front lawn supports leaving the porch and walking back up",
105 "ok": true,
106 "results": [
107 {
108 "status": "passed",
109 "durationMs": 8102
110 }
111 ]
112 },
113 {
114 "name": "renders, walks, pauses, releases input, and restores the local checkpoint",
115 "ok": true,
116 "results": [
117 {
118 "status": "passed",
119 "durationMs": 11476
120 }
121 ]
122 },
123 {
124 "name": "keeper dialogue pauses movement and updates the journal",
125 "ok": true,
126 "results": [
127 {
128 "status": "passed",
129 "durationMs": 3476
130 }
131 ]
132 },
133 {
134 "name": "place travel, pickup conditions, beacon state, and render resources remain coherent",
135 "ok": true,
136 "results": [
137 {
138 "status": "passed",
139 "durationMs": 10762
140 }
141 ]
142 },
143 {
144 "name": "unsupported GPU and malformed saves fail safely",
145 "ok": true,
146 "results": [
147 {
148 "status": "passed",
149 "durationMs": 3083
150 }
151 ]
152 },
153 {
154 "name": "legacy saves are preserved while exact uint64 saves advance and reload from the new key",
155 "ok": true,
156 "results": [
157 {
158 "status": "passed",
159 "durationMs": 9651
160 }
161 ]
162 },
163 {
164 "name": "owned renderer works on the main thread and survives worker resize, device loss and restart",
165 "ok": true,
166 "results": [
167 {
168 "status": "passed",
169 "durationMs": 12858
170 }
171 ]
172 },
173 {
174 "name": "probe reports unsupported graphics without joining a room",
175 "ok": true,
176 "results": [
177 {
178 "status": "passed",
179 "durationMs": 204
180 }
181 ]
182 },
183 {
184 "name": "cancelling a worker probe releases ownership and permits another run",
185 "ok": true,
186 "results": [
187 {
188 "status": "passed",
189 "durationMs": 5543
190 }
191 ]
192 },
193 {
194 "name": "gesture probe confirms pointer release and closes the silent audio context",
195 "ok": true,
196 "results": [
197 {
198 "status": "passed",
199 "durationMs": 199
200 }
201 ]
202 },
203 {
204 "name": "worker exceptions produce a bounded failure and the next run can recover",
205 "ok": true,
206 "results": [
207 {
208 "status": "passed",
209 "durationMs": 6021
210 }
211 ]
212 },
213 {
214 "name": "a silent worker hits its deadline and releases ownership",
215 "ok": true,
216 "results": [
217 {
218 "status": "passed",
219 "durationMs": 668
220 }
221 ]
222 },
223 {
224 "name": "contract worker failures release ownership and can be retried",
225 "ok": true,
226 "results": [
227 {
228 "status": "passed",
229 "durationMs": 8034
230 }
231 ]
232 },
233 {
234 "name": "unavailable workers are reported as unsupported after main-thread rendering",
235 "ok": true,
236 "results": [
237 {
238 "status": "passed",
239 "durationMs": 585
240 }
241 ]
242 },
243 {
244 "name": "replay worker failure and cancellation release ownership and allow recovery",
245 "ok": true,
246 "results": [
247 {
248 "status": "passed",
249 "durationMs": 10019
250 }
251 ]
252 },
253 {
254 "name": "a silent simulation replay worker reaches its deadline and releases ownership",
255 "ok": true,
256 "results": [
257 {
258 "status": "passed",
259 "durationMs": 3140
260 }
261 ]
262 }
263 ],
264 "command": "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser"
265 },
266 "capabilities": "prefabs-capabilities.json",
267 "ci": {
268 "url": "https://github.com/jasona/darkwind-web/actions/runs/40135129470",
269 "status": "completed",
270 "conclusion": "success",
271 "jobs": [
272 {
273 "name": "core",
274 "status": "completed",
275 "conclusion": "success"
276 },
277 {
278 "name": "browser",
279 "status": "completed",
280 "conclusion": "success"
281 },
282 {
283 "name": "container",
284 "status": "completed",
285 "conclusion": "success"
286 }
287 ]
288 },
289 "byteLimitFollowup": {
290 "source": {
291 "revision": "42244725f1d50677c0c257dc87d558b129a59d54",
292 "dirty": false,
293 "builtAt": "2026-10-24T21:42:07.944Z"
294 },
295 "headless": {
296 "command": "npm test",
297 "tests": 145,
298 "pass": 145,
299 "fail": 0,
300 "skipped": 0,
301 "log": "prefabs-headless.tap"
302 },
303 "browser": {
304 "stats": {
305 "startTime": "2026-10-24T21:42:07.502Z",
306 "duration": 11741.86,
307 "expected": 1,
308 "skipped": 0,
309 "unexpected": 0,
310 "flaky": 0
311 },
312 "tests": [
313 {
314 "name": "owned renderer works on the main thread and survives worker resize, device loss and restart",
315 "ok": true,
316 "results": [
317 {
318 "status": "passed",
319 "durationMs": 10073
320 }
321 ]
322 }
323 ],
324 "command": "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser -- tests/browser/probe.spec.ts -g 'owned renderer works'"
325 },
326 "capabilities": "prefabs-bounds-capabilities.json",
327 "ci": {
328 "url": "https://github.com/jasona/darkwind-web/actions/runs/40135275298",
329 "status": "in_progress",
330 "conclusion": null,
331 "jobs": [
332 {
333 "name": "core",
334 "status": "completed",
335 "conclusion": "success"
336 },
337 {
338 "name": "browser",
339 "status": "in_progress",
340 "conclusion": null
341 },
342 {
343 "name": "container",
344 "status": "completed",
345 "conclusion": "success"
346 }
347 ]
348 }
349 },
350 "scope": "Primitive prefab inheritance, explicit overrides, stable bindings, standalone builds, dependency hashes and bounded expansion. Real full-Darkwind extraction preserves all compiled objects/assets/identities and restores 1,481 entities. Browser worker matches complete Node fixture and renders/rebuilds/restores the kit while preserving the prior frame on rejection. Software WebGPU; no live-room content migration, asset import, physical-GPU or capacity claim."
351}
352