garden-ferry-acceptance.json
docs/evidence/garden-ferry-acceptance.json
1{
2 "sourceBase": "0d77ac8",
3 "sourceSha256": {
4 "games/darkwind/garden-ferry.ts": "f0b36b35c1fc47a39c101d02ab5fae0ee5acd447a817907a33394e212fa282d6",
5 "packages/net/client.ts": "017096dfcae10ed0aa888d23a00a3598a8076539c90dfb6c5b5160df75b141f2",
6 "packages/net/packets.ts": "259737a0221f89250ae8e75fec585ba72653cc4671417f72a971565393b4f872",
7 "packages/net/protocol.ts": "ca5a2ce4e18641b430645ecc7c511b668a5cc902cc88fcbc3bd2ec95661a372a",
8 "packages/physics/index.ts": "de29145f903246554de9becd44f9b79f34dd9d59e3cab81b9278b493375ece86",
9 "packages/physics/platforms.ts": "7c08b0116ad977e3938bce7e853ad0a0cc73985e35ba1087b5b4688d6616ec23",
10 "packages/simulation/index.ts": "5d29e3f377944b677e3b7ef9562cd1f025fc013a88945b8bacbc0bb9127fddde",
11 "packages/simulation/platforms.ts": "46a1b8171035522733a516721424b791749fc92e04360ad61ed6d3f487089f1e",
12 "apps/player/simulation.worker.ts": "921e9b61edf8ed5a4555dc512502d315093c51003cd33a1613bd4b651df90a18",
13 "services/relay/server.ts": "08be6e76dd19240fa0bced3101678ab3cb3da70d0bb91b8c69ac1a412a315f88"
14 },
15 "headless": {
16 "passed": 349,
17 "failed": 0
18 },
19 "check": {
20 "typescript": "passed",
21 "importBoundaries": 75
22 },
23 "browser": {
24 "startTime": "2026-10-25T04:33:00.874Z",
25 "duration": 48759.713,
26 "expected": 1,
27 "skipped": 0,
28 "unexpected": 0,
29 "flaky": 0
30 },
31 "observed": {
32 "ferry-after-handoff.json": {
33 "engine": "0.1.0",
34 "world": "darkwind-garden-ferry",
35 "release": "garden-ferry.1",
36 "time": "2026-10-25T04:33:41.750Z",
37 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
38 "webgpu": true,
39 "quality": "high",
40 "startupStages": {
41 "started": 61.10000002384186,
42 "admission": 143.40000000596046,
43 "graphics": 1872.2000000178814,
44 "simulation": 719.2000000178814,
45 "presentation": 1873.6000000238419,
46 "room": 741,
47 "ready": 1874.7000000178814,
48 "failed": null
49 },
50 "graphicsLifecycle": [
51 {
52 "stage": "probe",
53 "generation": 0,
54 "at": 61.900000005960464
55 },
56 {
57 "stage": "device",
58 "generation": 1,
59 "at": 417.70009765028954
60 },
61 {
62 "stage": "adapter-request",
63 "generation": 1,
64 "at": 417.80009764432907
65 },
66 {
67 "stage": "device-request",
68 "generation": 1,
69 "at": 576.7000976502895
70 },
71 {
72 "stage": "resources",
73 "generation": 1,
74 "at": 578.10009765625
75 },
76 {
77 "stage": "shader-modules",
78 "generation": 1,
79 "at": 584.4000976383686
80 },
81 {
82 "stage": "shader-validation",
83 "generation": 1,
84 "at": 584.5000976622105
85 },
86 {
87 "stage": "shader-pipelines",
88 "generation": 1,
89 "at": 597.4000976383686
90 },
91 {
92 "stage": "shader-identity",
93 "generation": 1,
94 "at": 978.8000976443291
95 },
96 {
97 "stage": "initial-upload",
98 "generation": 1,
99 "at": 979.3000976443291
100 },
101 {
102 "stage": "catalog",
103 "generation": 1,
104 "at": 980.9000976383686
105 },
106 {
107 "stage": "model-prepare",
108 "generation": 1,
109 "at": 981.9000976383686
110 },
111 {
112 "stage": "model-allocate",
113 "generation": 1,
114 "at": 1424.9000976383686
115 },
116 {
117 "stage": "model-upload",
118 "generation": 1,
119 "at": 1536.7000976502895
120 },
121 {
122 "stage": "model-install",
123 "generation": 1,
124 "at": 1537.7000976502895
125 },
126 {
127 "stage": "actors",
128 "generation": 1,
129 "at": 1538.0000976622105
130 },
131 {
132 "stage": "ready",
133 "generation": 1,
134 "at": 1871.7000976502895
135 }
136 ],
137 "renderPlacement": "worker",
138 "viewport": [
139 960,
140 640,
141 1
142 ],
143 "place": "garden",
144 "tick": "1201",
145 "position": [
146 4.100034236907959,
147 1.1159999370574951,
148 -1.7685577869415283
149 ],
150 "frameInterval": {
151 "p50": 166.59999999999854,
152 "p95": 350
153 },
154 "tickMs": 1.699999988079071,
155 "renderObservedAtMs": 37573,
156 "render": {
157 "instances": 423,
158 "triangles": 51456,
159 "visibleInstances": 89,
160 "shadowInstances": 423,
161 "visibleTriangles": 3516,
162 "shadowTriangles": 51456,
163 "drawCalls": 8,
164 "buffers": 53,
165 "textures": 4,
166 "targetBytes": 24150016,
167 "targetGeneration": 1,
168 "width": 960,
169 "height": 640,
170 "frameMs": 1.5,
171 "submittedFrames": 95,
172 "completedFrames": 94,
173 "failedFrames": 0,
174 "cancelledFrames": 0,
175 "pendingFrames": 1,
176 "skippedFrames": 2128,
177 "completionWaitMs": 393,
178 "maxCompletionWaitMs": 637.0999999940395,
179 "lastSubmittedAtMs": 37453.40009763837,
180 "lastCompletedAtMs": 37439.30009764433
181 },
182 "actors": {
183 "rigged": 0,
184 "walking": 0,
185 "stalled": 0,
186 "samples": 0,
187 "matrices": 0
188 },
189 "presentationTransport": {
190 "route": "direct",
191 "received": 1089,
192 "returned": 1088,
193 "capacity": 4194304
194 },
195 "renderGraph": {
196 "plan": {
197 "textures": [
198 {
199 "name": "depth",
200 "format": "depth24plus",
201 "extent": {
202 "kind": "viewport"
203 },
204 "external": false,
205 "sampled": false,
206 "attachment": true,
207 "firstUse": 1,
208 "lastUse": 1,
209 "writer": "scene"
210 },
211 {
212 "name": "hdr",
213 "format": "rgba16float",
214 "extent": {
215 "kind": "viewport"
216 },
217 "external": false,
218 "sampled": true,
219 "attachment": true,
220 "firstUse": 1,
221 "lastUse": 2,
222 "writer": "scene"
223 },
224 {
225 "name": "output",
226 "format": "bgra8unorm",
227 "extent": {
228 "kind": "viewport"
229 },
230 "external": true,
231 "sampled": false,
232 "attachment": true,
233 "firstUse": 2,
234 "lastUse": 2,
235 "writer": "post"
236 },
237 {
238 "name": "shadow",
239 "format": "depth32float",
240 "extent": {
241 "kind": "fixed",
242 "width": 2048,
243 "height": 2048
244 },
245 "external": false,
246 "sampled": true,
247 "attachment": true,
248 "firstUse": 0,
249 "lastUse": 1,
250 "writer": "shadow"
251 }
252 ],
253 "passes": [
254 {
255 "name": "shadow",
256 "after": [],
257 "reads": [],
258 "colors": [],
259 "depth": {
260 "resource": "shadow",
261 "load": "clear",
262 "store": "store"
263 }
264 },
265 {
266 "name": "scene",
267 "after": [],
268 "reads": [
269 "shadow"
270 ],
271 "colors": [
272 {
273 "resource": "hdr",
274 "load": "clear",
275 "store": "store"
276 }
277 ],
278 "depth": {
279 "resource": "depth",
280 "load": "clear",
281 "store": "discard"
282 }
283 },
284 {
285 "name": "post",
286 "after": [],
287 "reads": [
288 "hdr"
289 ],
290 "colors": [
291 {
292 "resource": "output",
293 "load": "clear",
294 "store": "store"
295 }
296 ]
297 }
298 ]
299 },
300 "census": {
301 "generation": 1,
302 "textures": 3,
303 "estimatedBytes": 24150016,
304 "width": 960,
305 "height": 640
306 }
307 },
308 "shaders": {
309 "requestedRevision": "1",
310 "activeRevision": "1",
311 "hash": "039684b97282110739cbee452249807ac2ff2e2cbcefe32a87cf2da1454a8297",
312 "compilingRevision": null,
313 "pendingRevision": null,
314 "retainedSourceBytes": 0,
315 "disposed": false,
316 "last": {
317 "revision": "1",
318 "status": "applied",
319 "diagnostics": []
320 }
321 },
322 "graphicsRecovery": {
323 "status": "idle",
324 "attempts": 0,
325 "limit": 2,
326 "timeoutMs": 20000,
327 "inFlight": false
328 },
329 "graphicsIncidents": [],
330 "canonicalEntities": 1326,
331 "save": "local",
332 "room": {
333 "status": "connected",
334 "players": 1,
335 "epoch": "2",
336 "revision": "0"
337 },
338 "knownLimits": [
339 "Trusted cooperative beta",
340 "Single relay process",
341 "Original traveler rig; environment uses procedural geometry",
342 "Desktop WebGPU only"
343 ]
344 },
345 "ferry-riders.json": {
346 "platform": "authored:fedf0000-0000-4000-8000-ffffffffffff",
347 "boarded": {
348 "position": [
349 4.100034236907959,
350 1.1159999370574951,
351 3.6949968338012695
352 ],
353 "paused": false,
354 "time": 3.461171586982122,
355 "velocity": [
356 0,
357 0,
358 0
359 ],
360 "room": {
361 "self": "a01c1fd0-3ada-4c29-9772-d092ead42394",
362 "host": "49a87983-2068-49d6-9d3b-c116fbc12bf5",
363 "epoch": "1"
364 }
365 },
366 "paused": {
367 "position": [
368 4.100034236907959,
369 1.1159999370574951,
370 1.549223780632019
371 ],
372 "paused": true,
373 "time": 6.861027549005954,
374 "velocity": [
375 0,
376 0,
377 0
378 ],
379 "room": {
380 "self": "a01c1fd0-3ada-4c29-9772-d092ead42394",
381 "host": "49a87983-2068-49d6-9d3b-c116fbc12bf5",
382 "epoch": "1"
383 }
384 },
385 "handoff": {
386 "position": [
387 4.100034236907959,
388 1.1159999370574951,
389 -1.7685577869415283
390 ],
391 "paused": true,
392 "time": 11.284735544017877,
393 "velocity": [
394 0,
395 0,
396 0
397 ],
398 "room": {
399 "self": "a01c1fd0-3ada-4c29-9772-d092ead42394",
400 "host": "a01c1fd0-3ada-4c29-9772-d092ead42394",
401 "epoch": "2"
402 }
403 },
404 "after": {
405 "position": [
406 6.994901180267334,
407 0.7848723530769348,
408 -3.7857508659362793
409 ],
410 "paused": false,
411 "time": 16.31421784998212,
412 "velocity": [
413 0,
414 0,
415 0
416 ],
417 "room": {
418 "self": "a01c1fd0-3ada-4c29-9772-d092ead42394",
419 "host": "a01c1fd0-3ada-4c29-9772-d092ead42394",
420 "epoch": "4"
421 }
422 }
423 }
424 },
425 "priorAttempt": {
426 "result": "failed",
427 "reason": "Test compared both riders with one boarding offset; pointer-lock clicks also changed observer direction. Test now enters by keyboard and checks each settled rider offset independently at a tighter 5 cm tolerance.",
428 "productionPhysicsChangeAfterFailure": false
429 },
430 "container": "Ferry Compose configuration validates; no ferry container deployment or image smoke test performed.",
431 "limits": [
432 "Cooperative authored-route clock, not general server-owned physics",
433 "Small phase differences under network latency",
434 "Restart progression assumes an accurate server wall clock",
435 "Physical device and shaped-network acceptance remain open"
436 ],
437 "originalBetaRegression": {
438 "startTime": "2026-10-25T04:34:36.641Z",
439 "duration": 14351.527,
440 "expected": 1,
441 "skipped": 0,
442 "unexpected": 0,
443 "flaky": 0
444 },
445 "developmentPreview": {
446 "url": "http://localhost:5180",
447 "relayPort": 8788,
448 "storage": ".data/garden-ferry",
449 "result": "Vite and relay started successfully; existing port 5175 retained."
450 }
451}
452