REPOSITORY SOURCE

checkpoint-cadence-acceptance.json

docs/evidence/checkpoint-cadence-acceptance.json

1{
2  "format": 1,
3  "source": {
4    "revision": "706f8a462deb250fac71ac535eaa3245efdb2ac2",
5    "dirty": false,
6    "builtAt": "2026-10-24T20:43:31.973Z"
7  },
8  "engine": "0.1.0",
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  "browser": {
16    "command": "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser",
17    "stats": {
18      "startTime": "2026-10-24T20:43:31.543Z",
19      "duration": 134772.61299999998,
20      "expected": 21,
21      "skipped": 0,
22      "unexpected": 0,
23      "flaky": 0
24    },
25    "tests": [
26      {
27        "name": "two real browsers share doors and chat, then the guest takes over when the host leaves",
28        "ok": true,
29        "results": [
30          {
31            "status": "passed",
32            "durationMs": 7076
33          }
34        ]
35      },
36      {
37        "name": "simultaneous real-browser pickups grant one lantern, including across host handoff",
38        "ok": true,
39        "results": [
40          {
41            "status": "passed",
42            "durationMs": 36077
43          }
44        ]
45      },
46      {
47        "name": "travelers see each other move in the rendered world",
48        "ok": true,
49        "results": [
50          {
51            "status": "passed",
52            "durationMs": 6485
53          }
54        ]
55      },
56      {
57        "name": "new checkpoints save without animation frames",
58        "ok": true,
59        "results": [
60          {
61            "status": "passed",
62            "durationMs": 3762
63          }
64        ]
65      },
66      {
67        "name": "restored checkpoints save without animation frames",
68        "ok": true,
69        "results": [
70          {
71            "status": "passed",
72            "durationMs": 3113
73          }
74        ]
75      },
76      {
77        "name": "front lawn supports leaving the porch and walking back up",
78        "ok": true,
79        "results": [
80          {
81            "status": "passed",
82            "durationMs": 7717
83          }
84        ]
85      },
86      {
87        "name": "renders, walks, pauses, releases input, and restores the local checkpoint",
88        "ok": true,
89        "results": [
90          {
91            "status": "passed",
92            "durationMs": 10212
93          }
94        ]
95      },
96      {
97        "name": "keeper dialogue pauses movement and updates the journal",
98        "ok": true,
99        "results": [
100          {
101            "status": "passed",
102            "durationMs": 4068
103          }
104        ]
105      },
106      {
107        "name": "place travel, pickup conditions, beacon state, and render resources remain coherent",
108        "ok": true,
109        "results": [
110          {
111            "status": "passed",
112            "durationMs": 10061
113          }
114        ]
115      },
116      {
117        "name": "unsupported GPU and malformed saves fail safely",
118        "ok": true,
119        "results": [
120          {
121            "status": "passed",
122            "durationMs": 2100
123          }
124        ]
125      },
126      {
127        "name": "legacy saves are preserved while exact uint64 saves advance and reload from the new key",
128        "ok": true,
129        "results": [
130          {
131            "status": "passed",
132            "durationMs": 7657
133          }
134        ]
135      },
136      {
137        "name": "owned renderer works on the main thread and survives worker resize, device loss and restart",
138        "ok": true,
139        "results": [
140          {
141            "status": "passed",
142            "durationMs": 9017
143          }
144        ]
145      },
146      {
147        "name": "probe reports unsupported graphics without joining a room",
148        "ok": true,
149        "results": [
150          {
151            "status": "passed",
152            "durationMs": 200
153          }
154        ]
155      },
156      {
157        "name": "cancelling a worker probe releases ownership and permits another run",
158        "ok": true,
159        "results": [
160          {
161            "status": "passed",
162            "durationMs": 3582
163          }
164        ]
165      },
166      {
167        "name": "gesture probe confirms pointer release and closes the silent audio context",
168        "ok": true,
169        "results": [
170          {
171            "status": "passed",
172            "durationMs": 209
173          }
174        ]
175      },
176      {
177        "name": "worker exceptions produce a bounded failure and the next run can recover",
178        "ok": true,
179        "results": [
180          {
181            "status": "passed",
182            "durationMs": 5078
183          }
184        ]
185      },
186      {
187        "name": "a silent worker hits its deadline and releases ownership",
188        "ok": true,
189        "results": [
190          {
191            "status": "passed",
192            "durationMs": 636
193          }
194        ]
195      },
196      {
197        "name": "contract worker failures release ownership and can be retried",
198        "ok": true,
199        "results": [
200          {
201            "status": "passed",
202            "durationMs": 6026
203          }
204        ]
205      },
206      {
207        "name": "unavailable workers are reported as unsupported after main-thread rendering",
208        "ok": true,
209        "results": [
210          {
211            "status": "passed",
212            "durationMs": 595
213          }
214        ]
215      },
216      {
217        "name": "replay worker failure and cancellation release ownership and allow recovery",
218        "ok": true,
219        "results": [
220          {
221            "status": "passed",
222            "durationMs": 6992
223          }
224        ]
225      },
226      {
227        "name": "a silent simulation replay worker reaches its deadline and releases ownership",
228        "ok": true,
229        "results": [
230          {
231            "status": "passed",
232            "durationMs": 2128
233          }
234        ]
235      }
236    ]
237  },
238  "headless": {
239    "command": "npm test",
240    "tests": 114,
241    "passed": 114,
242    "failed": 0
243  },
244  "regression": {
245    "runtimeBeforeFix": "d32ec557acee48c57b3dd726544de54b5117c4b6",
246    "testSource": "New uncommitted frame-withholding regressions; test names and subsequent periodic-cadence assertions were refined before the final commit.",
247    "before": {
248      "startTime": "2026-10-24T20:41:42.117Z",
249      "duration": 32752.628999999997,
250      "expected": 0,
251      "skipped": 0,
252      "unexpected": 2,
253      "flaky": 0
254    },
255    "observation": "Both tests failed at the first format-2 checkpoint expectation while animation callbacks were withheld.",
256    "after": "New and restored checkpoints persist before a frame executes; repeated worker states do not bypass the two-second cadence; new ticks advance; v1 bytes survive; animation resumes. The restored-position comparison allows Rapier float32 rounding."
257  },
258  "ciTrigger": {
259    "run": "https://github.com/jasona/darkwind-web/actions/runs/40130013927",
260    "failedAssertion": "First format-2 local save within 15 seconds",
261    "trace": "The save evaluation started at 12417.358 ms in the runner, the expectation timed out at 23311.620 ms, and that evaluation returned a non-null save at 23782.577 ms. The browser-side evaluation ended at 17741.486 ms. This proves eventual save completion and delayed observation, not a particular GPU-driver root cause."
262  },
263  "scope": "Player autosave scheduling and complete existing browser journey on software WebGPU. No save format, physics, world content, relay persistence or deployment change. Does not prove recovery or hardware performance milestones."
264}
265