platforms-ci-multiplayer.json
docs/evidence/platforms-ci-multiplayer.json
1{
2 "source": "21110c2bb689e3cff00025aaaa7687e8f5f2ecc7",
3 "run": "https://github.com/jasona/darkwind-web/actions/runs/40154917946",
4 "stats": {
5 "startTime": "2026-10-25T02:34:32.017Z",
6 "duration": 334138.767,
7 "expected": 6,
8 "skipped": 0,
9 "unexpected": 0,
10 "flaky": 0
11 },
12 "cases": [
13 {
14 "name": "two real browsers share doors and chat, then the guest takes over when the host leaves",
15 "status": "passed",
16 "durationMs": 54567,
17 "reports": {}
18 },
19 {
20 "name": "simultaneous real-browser pickups grant one lantern, including across host handoff",
21 "status": "passed",
22 "durationMs": 57209,
23 "reports": {}
24 },
25 {
26 "name": "travelers see each other move in the rendered world",
27 "status": "passed",
28 "durationMs": 39485,
29 "reports": {}
30 },
31 {
32 "name": "rigged travelers walk, settle when pose delivery stalls, and resume without leaking actors",
33 "status": "passed",
34 "durationMs": 69056,
35 "reports": {
36 "motion-before-stall.json": {
37 "render": {
38 "instances": 685,
39 "triangles": 75232,
40 "visibleInstances": 573,
41 "shadowInstances": 389,
42 "visibleTriangles": 68776,
43 "shadowTriangles": 58948,
44 "drawCalls": 31,
45 "buffers": 53,
46 "textures": 4,
47 "targetBytes": 24150016,
48 "targetGeneration": 1,
49 "width": 960,
50 "height": 640,
51 "frameMs": 7.399999999994179,
52 "submittedFrames": 5,
53 "completedFrames": 4,
54 "failedFrames": 0,
55 "cancelledFrames": 0,
56 "pendingFrames": 1,
57 "skippedFrames": 7,
58 "completionWaitMs": 6030.200000000012,
59 "maxCompletionWaitMs": 6030.200000000012,
60 "lastSubmittedAtMs": 19170.5,
61 "lastCompletedAtMs": 17251.400000000023
62 },
63 "actors": {
64 "rigged": 1,
65 "walking": 1,
66 "stalled": 0,
67 "samples": 8,
68 "matrices": 154
69 },
70 "graphicsRecovery": {
71 "status": "idle",
72 "attempts": 0,
73 "limit": 2,
74 "timeoutMs": 20000,
75 "inFlight": false
76 }
77 },
78 "motion-observed-events.json": {
79 "maxFrameGap": 2807,
80 "maxWorkerGap": 1884.7999999999884,
81 "maxTimerGap": 1940.7000000000116
82 },
83 "motion-stalled.json": {
84 "render": {
85 "instances": 685,
86 "triangles": 75232,
87 "visibleInstances": 573,
88 "shadowInstances": 389,
89 "visibleTriangles": 68776,
90 "shadowTriangles": 58948,
91 "drawCalls": 31,
92 "buffers": 53,
93 "textures": 4,
94 "targetBytes": 24150016,
95 "targetGeneration": 1,
96 "width": 960,
97 "height": 640,
98 "frameMs": 25.300000000017462,
99 "submittedFrames": 6,
100 "completedFrames": 5,
101 "failedFrames": 0,
102 "cancelledFrames": 0,
103 "pendingFrames": 1,
104 "skippedFrames": 8,
105 "completionWaitMs": 5318.700000000012,
106 "maxCompletionWaitMs": 6030.200000000012,
107 "lastSubmittedAtMs": 25188.300000000017,
108 "lastCompletedAtMs": 24489.20000000001
109 },
110 "actors": {
111 "rigged": 1,
112 "walking": 0,
113 "stalled": 1,
114 "samples": 8,
115 "matrices": 154
116 },
117 "graphicsRecovery": {
118 "status": "idle",
119 "attempts": 0,
120 "limit": 2,
121 "timeoutMs": 20000,
122 "inFlight": false
123 }
124 },
125 "motion-resumed.json": {
126 "render": {
127 "instances": 685,
128 "triangles": 75232,
129 "visibleInstances": 573,
130 "shadowInstances": 389,
131 "visibleTriangles": 68776,
132 "shadowTriangles": 58948,
133 "drawCalls": 31,
134 "buffers": 53,
135 "textures": 4,
136 "targetBytes": 24150016,
137 "targetGeneration": 1,
138 "width": 960,
139 "height": 640,
140 "frameMs": 12,
141 "submittedFrames": 8,
142 "completedFrames": 7,
143 "failedFrames": 0,
144 "cancelledFrames": 0,
145 "pendingFrames": 1,
146 "skippedFrames": 12,
147 "completionWaitMs": 4959.200000000012,
148 "maxCompletionWaitMs": 6030.200000000012,
149 "lastSubmittedAtMs": 36363.5,
150 "lastCompletedAtMs": 36196.20000000001
151 },
152 "actors": {
153 "rigged": 1,
154 "walking": 1,
155 "stalled": 0,
156 "samples": 8,
157 "matrices": 154
158 },
159 "graphicsRecovery": {
160 "status": "idle",
161 "attempts": 0,
162 "limit": 2,
163 "timeoutMs": 20000,
164 "inFlight": false
165 }
166 }
167 }
168 },
169 {
170 "name": "travelers keep walking with slow GPU completion and settle when real movement stops",
171 "status": "passed",
172 "durationMs": 49348,
173 "reports": {
174 "slow-render-walking.json": {
175 "render": {
176 "instances": 685,
177 "triangles": 75232,
178 "visibleInstances": 573,
179 "shadowInstances": 389,
180 "visibleTriangles": 68776,
181 "shadowTriangles": 58948,
182 "drawCalls": 31,
183 "buffers": 53,
184 "textures": 4,
185 "targetBytes": 24150016,
186 "targetGeneration": 1,
187 "width": 960,
188 "height": 640,
189 "frameMs": 4.099999999976717,
190 "submittedFrames": 5,
191 "completedFrames": 4,
192 "failedFrames": 0,
193 "cancelledFrames": 0,
194 "pendingFrames": 1,
195 "skippedFrames": 8,
196 "completionWaitMs": 5572,
197 "maxCompletionWaitMs": 5572,
198 "lastSubmittedAtMs": 18691.199999999953,
199 "lastCompletedAtMs": 16770.399999999965
200 },
201 "actors": {
202 "rigged": 1,
203 "walking": 1,
204 "stalled": 0,
205 "samples": 8,
206 "matrices": 154
207 },
208 "graphicsRecovery": {
209 "status": "idle",
210 "attempts": 0,
211 "limit": 2,
212 "timeoutMs": 20000,
213 "inFlight": false
214 }
215 },
216 "slow-render-observed-events.json": {
217 "maxFrameGap": 3065.2000000000116,
218 "maxWorkerGap": 2317,
219 "maxTimerGap": 3549.2999999999884
220 },
221 "slow-render-idle.json": {
222 "render": {
223 "instances": 685,
224 "triangles": 75232,
225 "visibleInstances": 573,
226 "shadowInstances": 389,
227 "visibleTriangles": 68776,
228 "shadowTriangles": 58948,
229 "drawCalls": 31,
230 "buffers": 53,
231 "textures": 4,
232 "targetBytes": 24150016,
233 "targetGeneration": 1,
234 "width": 960,
235 "height": 640,
236 "frameMs": 15.700000000011642,
237 "submittedFrames": 7,
238 "completedFrames": 6,
239 "failedFrames": 0,
240 "cancelledFrames": 0,
241 "pendingFrames": 1,
242 "skippedFrames": 18,
243 "completionWaitMs": 3385.2999999999884,
244 "maxCompletionWaitMs": 7453,
245 "lastSubmittedAtMs": 32524.399999999965,
246 "lastCompletedAtMs": 30399.699999999953
247 },
248 "actors": {
249 "rigged": 1,
250 "walking": 0,
251 "stalled": 1,
252 "samples": 8,
253 "matrices": 154
254 },
255 "graphicsRecovery": {
256 "status": "idle",
257 "attempts": 0,
258 "limit": 2,
259 "timeoutMs": 20000,
260 "inFlight": false
261 }
262 }
263 }
264 },
265 {
266 "name": "graphics recovery keeps the shared room and receives door changes during restoration",
267 "status": "passed",
268 "durationMs": 60797,
269 "reports": {
270 "shared-recovery-before-capture.json": {
271 "render": {
272 "instances": 685,
273 "triangles": 75232,
274 "visibleInstances": 104,
275 "shadowInstances": 388,
276 "visibleTriangles": 10776,
277 "shadowTriangles": 58936,
278 "drawCalls": 20,
279 "buffers": 53,
280 "textures": 4,
281 "targetBytes": 24150016,
282 "targetGeneration": 1,
283 "width": 960,
284 "height": 640,
285 "frameMs": 10.399999999965075,
286 "submittedFrames": 3,
287 "completedFrames": 2,
288 "failedFrames": 0,
289 "cancelledFrames": 0,
290 "pendingFrames": 1,
291 "skippedFrames": 6,
292 "completionWaitMs": 4351.299999999988,
293 "maxCompletionWaitMs": 4945.600000000035,
294 "lastSubmittedAtMs": 29758.79999999999,
295 "lastCompletedAtMs": 29716.79999999999
296 },
297 "actors": {
298 "rigged": 1,
299 "walking": 0,
300 "stalled": 0,
301 "samples": 8,
302 "matrices": 154
303 },
304 "graphicsRecovery": {
305 "status": "ready",
306 "attempts": 1,
307 "limit": 2,
308 "timeoutMs": 20000,
309 "inFlight": false
310 }
311 },
312 "shared-recovery-after-capture.json": {
313 "render": {
314 "instances": 685,
315 "triangles": 75232,
316 "visibleInstances": 141,
317 "shadowInstances": 389,
318 "visibleTriangles": 4980,
319 "shadowTriangles": 58948,
320 "drawCalls": 20,
321 "buffers": 53,
322 "textures": 4,
323 "targetBytes": 24150016,
324 "targetGeneration": 1,
325 "width": 960,
326 "height": 640,
327 "frameMs": 14.399999999965075,
328 "submittedFrames": 6,
329 "completedFrames": 5,
330 "failedFrames": 0,
331 "cancelledFrames": 0,
332 "pendingFrames": 1,
333 "skippedFrames": 10,
334 "completionWaitMs": 6243.200000000012,
335 "maxCompletionWaitMs": 7247,
336 "lastSubmittedAtMs": 48379,
337 "lastCompletedAtMs": 48301.100000000035
338 },
339 "actors": {
340 "rigged": 1,
341 "walking": 0,
342 "stalled": 1,
343 "samples": 8,
344 "matrices": 154
345 },
346 "graphicsRecovery": {
347 "status": "ready",
348 "attempts": 1,
349 "limit": 2,
350 "timeoutMs": 20000,
351 "inFlight": false
352 }
353 }
354 }
355 }
356 ]
357}
358