REPOSITORY SOURCE

parallel-startup-ci-multiplayer.json

docs/evidence/parallel-startup-ci-multiplayer.json

1{
2  "source": "4f85246c982d18a4b43cf525de7374997c61a57b",
3  "run": "https://github.com/jasona/darkwind-web/actions/runs/40159823500",
4  "job": 121068842452,
5  "conclusion": "failure",
6  "stats": {
7    "startTime": "2026-10-25T03:53:26.737Z",
8    "duration": 374980.544,
9    "expected": 0,
10    "skipped": 0,
11    "unexpected": 7,
12    "flaky": 0
13  },
14  "failures": [
15    {
16      "scenario": "two real browsers share doors and chat, then the guest takes over when the host leaves",
17      "status": "failed",
18      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    31 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
19    },
20    {
21      "scenario": "simultaneous real-browser pickups grant one lantern, including across host handoff",
22      "status": "failed",
23      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    32 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
24    },
25    {
26      "scenario": "travelers see each other move in the rendered world",
27      "status": "failed",
28      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    30 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
29    },
30    {
31      "scenario": "rigged travelers walk, settle when pose delivery stalls, and resume without leaking actors",
32      "status": "failed",
33      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    32 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
34    },
35    {
36      "scenario": "travelers keep walking with slow GPU completion and settle when real movement stops",
37      "status": "failed",
38      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    31 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
39    },
40    {
41      "scenario": "graphics recovery keeps the shared room and receives door changes during restoration",
42      "status": "failed",
43      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    32 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
44    },
45    {
46      "scenario": "direct scenes advance during withheld UI receipts and a blocked page task",
47      "status": "failed",
48      "error": "Error: expect(locator).toBeEnabled() failed\n\nLocator:  locator('#enter')\nExpected: enabled\nReceived: disabled\nTimeout:  30000ms\n\nCall log:\n  - Expect \"toBeEnabled\" with timeout 30000ms\n  - waiting for locator('#enter')\n    31 \u00d7 locator resolved to <button disabled id=\"enter\" class=\"primary\">\u2026</button>\n       - unexpected value \"disabled\"\n"
49    }
50  ],
51  "observerReports": {
52    "motion-failed-report.json": {
53      "startupStages": {
54        "started": 163.89999999999418,
55        "admission": 339.8999999999942,
56        "graphics": 3615.4000000000233,
57        "simulation": 2013.4000000000233,
58        "presentation": 3620.5999999999767,
59        "room": 2042,
60        "ready": 3620.7000000000116,
61        "failed": null
62      },
63      "graphicsLifecycle": [
64        {
65          "stage": "probe",
66          "generation": 0,
67          "at": 165
68        },
69        {
70          "stage": "device",
71          "generation": 1,
72          "at": 1370.90004882816
73        },
74        {
75          "stage": "catalog",
76          "generation": 1,
77          "at": 1963.7000488281483
78        },
79        {
80          "stage": "actors",
81          "generation": 1,
82          "at": 3000.90004882816
83        },
84        {
85          "stage": "ready",
86          "generation": 1,
87          "at": 3614.40004882816
88        }
89      ],
90      "renderPlacement": "worker",
91      "graphicsRecovery": {
92        "status": "idle",
93        "attempts": 0,
94        "limit": 2,
95        "timeoutMs": 20000,
96        "inFlight": false
97      },
98      "room": {
99        "status": "connected",
100        "players": 1,
101        "epoch": "7",
102        "revision": "0"
103      }
104    },
105    "slow-render-failed-report.json": {
106      "startupStages": {
107        "started": 156.59999999997672,
108        "admission": 378.3999999999651,
109        "graphics": 3685,
110        "simulation": 2004.6999999999534,
111        "presentation": 3695.5,
112        "room": 2023.5999999999767,
113        "ready": 3695.5,
114        "failed": null
115      },
116      "graphicsLifecycle": [
117        {
118          "stage": "probe",
119          "generation": 0,
120          "at": 157.79999999998836
121        },
122        {
123          "stage": "device",
124          "generation": 1,
125          "at": 1347.1999023437384
126        },
127        {
128          "stage": "catalog",
129          "generation": 1,
130          "at": 1915.299902343715
131        },
132        {
133          "stage": "actors",
134          "generation": 1,
135          "at": 2961.6999023437384
136        },
137        {
138          "stage": "ready",
139          "generation": 1,
140          "at": 3683.9999023437267
141        }
142      ],
143      "renderPlacement": "worker",
144      "graphicsRecovery": {
145        "status": "idle",
146        "attempts": 0,
147        "limit": 2,
148        "timeoutMs": 20000,
149        "inFlight": false
150      },
151      "room": {
152        "status": "connected",
153        "players": 1,
154        "epoch": "9",
155        "revision": "0"
156      }
157    },
158    "recovery-failed-report.json": {
159      "startupStages": {
160        "started": 164.79999999998836,
161        "admission": 392.29999999998836,
162        "graphics": 3630.6999999999534,
163        "simulation": 2005.399999999965,
164        "presentation": 3637.0999999999767,
165        "room": 2020,
166        "ready": 3637.0999999999767,
167        "failed": null
168      },
169      "graphicsLifecycle": [
170        {
171          "stage": "probe",
172          "generation": 0,
173          "at": 166.39999999996508
174        },
175        {
176          "stage": "device",
177          "generation": 1,
178          "at": 1348.5001464843517
179        },
180        {
181          "stage": "catalog",
182          "generation": 1,
183          "at": 1976.900146484375
184        },
185        {
186          "stage": "actors",
187          "generation": 1,
188          "at": 2999.30014648434
189        },
190        {
191          "stage": "ready",
192          "generation": 1,
193          "at": 3630.0001464843517
194        }
195      ],
196      "renderPlacement": "worker",
197      "graphicsRecovery": {
198        "status": "idle",
199        "attempts": 0,
200        "limit": 2,
201        "timeoutMs": 20000,
202        "inFlight": false
203      },
204      "room": {
205        "status": "connected",
206        "players": 1,
207        "epoch": "11",
208        "revision": "0"
209      }
210    }
211  },
212  "interpretation": "All seven cases fail at Enter. Exported reports belong to the already-running observer: they confirm simulation and room precede graphics readiness there. They do not identify the failing second client graphics phase. Do not claim parallel startup closes remote reliability.",
213  "nextEvidence": "Capture the playtest report on the actual failed Enter page, including startupStages and graphicsLifecycle, before context teardown.",
214  "otherJobsAtObservation": {
215    "core": "success",
216    "container": "success",
217    "probe": "in_progress",
218    "player": "in_progress"
219  }
220}
221