recovery-ci-followup.json
docs/evidence/recovery-ci-followup.json
1{
2 "format": 1,
3 "recordedAt": "2026-10-24T22:52:54.230366+00:00",
4 "source": "e5de328f137febe0343c002f4083b6e5884541db",
5 "url": "https://github.com/jasona/darkwind-web/actions/runs/40138869891",
6 "result": "cancelled at the 15-minute browser job deadline",
7 "core": "success",
8 "container": "success",
9 "browser": {
10 "completedCases": 22,
11 "passed": 20,
12 "failed": 2,
13 "notReached": 4
14 },
15 "traceObservations": [
16 {
17 "case": "graphics recovery preserves the world",
18 "readyObservedMs": 643155.729,
19 "pixelAssertionStartedMs": 643194.309,
20 "screenshotStartedMs": 643211.667,
21 "assertionTimedOutMs": 658199.32,
22 "screenshotCleanupStartedMs": 696135.613,
23 "eventualPixelAssertion": "true at 696970.966 ms; the screenshot outlived the 15-second poll deadline"
24 },
25 {
26 "case": "graphics recovery keeps the shared room",
27 "deviceLossRequestedMs": 222910.605,
28 "injectedReleaseCalledMs": 230768.894,
29 "outcome": "runtime 20-second recovery deadline reached; cause is not established by the trace"
30 }
31 ],
32 "corrections": {
33 "source": "d0afaaa020207db2252964a77aa48e3ae2602c26",
34 "faultInjector": "Release now clears the hold even before requestDevice registers its waiter; a direct early-release regression is included. This fixes a demonstrated code race, without claiming it proves the CI timeout root cause.",
35 "observationBudgets": "CI composited-pixel wait 15s -> 60s; repeated-loss case overall budget 120s -> 180s. Pixel thresholds and runtime recovery deadline unchanged.",
36 "jobScheduling": "Multiplayer, player and probe files run as separate CI jobs with fail-fast disabled, independent temporary servers and distinct artifacts. Each retains the 15-minute job ceiling."
37 },
38 "localFollowup": {
39 "report": "model-render-final-controls.json",
40 "passed": 3,
41 "failed": 0
42 },
43 "followupCi": "https://github.com/jasona/darkwind-web/actions/runs/40140353358",
44 "followupCiStatus": "completed",
45 "followupCiConclusion": "success",
46 "followupCiVerifiedAt": "2026-10-24T23:05:18.542305+00:00",
47 "followupJobs": {
48 "core": "success",
49 "container": "success",
50 "browser (multiplayer)": "success",
51 "browser (player)": "success",
52 "browser (probe)": "success"
53 },
54 "evidenceCi": {
55 "url": "https://github.com/jasona/darkwind-web/actions/runs/40140436877",
56 "source": "1ecd771c7510242b2b2baf4ed9e973656e1b8334",
57 "status": "completed",
58 "conclusion": "success"
59 },
60 "earlierImporterCi": {
61 "url": "https://github.com/jasona/darkwind-web/actions/runs/40139617903",
62 "source": "4facc4770b78578f8d33a8303e9685a350da67b5",
63 "core": "success",
64 "container": "success",
65 "browser": {
66 "passed": 24,
67 "failed": 2
68 },
69 "failures": [
70 "Shared-room recovery observed failed instead of ready before the 120-second overall deadline.",
71 "Solo recovery pixel observation exceeded its 15-second wait."
72 ],
73 "scope": "Observed in failed job logs; these are prior to the fault-injector and CI observation/scheduling corrections. Logs alone do not establish the shared-recovery root cause."
74 }
75}
76