REPOSITORY SOURCE

two-cpu-multiplayer-investigation.json

docs/evidence/two-cpu-multiplayer-investigation.json

1{
2  "baseSource": "21110c2bb689e3cff00025aaaa7687e8f5f2ecc7",
3  "testSource": "Original runtime probe and multiplayer cases loaded at collection; resource-count correction only. Later instrumentation changes were not loaded into this running test worker.",
4  "command": "CI=1 PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell taskset -c 0,1 npm run test:browser -- tests/browser/multiplayer.spec.ts --grep \"rigged travelers walk|travelers keep walking|graphics recovery\"",
5  "environment": "Local workstation, process affinity CPUs 0 and 1 inherited by the test runner, fresh relay and Chromium software WebGPU; not equivalent to GitHub runner hardware.",
6  "stats": {
7    "startTime": "2026-10-25T02:36:15.105Z",
8    "duration": 141205.745,
9    "expected": 2,
10    "skipped": 0,
11    "unexpected": 1,
12    "flaky": 0
13  },
14  "cases": [
15    {
16      "name": "rigged travelers walk, settle when pose delivery stalls, and resume without leaking actors",
17      "status": "passed",
18      "durationMs": 48075,
19      "error": ""
20    },
21    {
22      "name": "travelers keep walking with slow GPU completion and settle when real movement stops",
23      "status": "passed",
24      "durationMs": 36211,
25      "error": ""
26    },
27    {
28      "name": "graphics recovery keeps the shared room and receives door changes during restoration",
29      "status": "failed",
30      "durationMs": 52160,
31      "error": "Error: expect(locator).toContainText(expected) failed\n\nLocator: locator('#save-status')\nExpected substring: \"2 travelers\"\nReceived string:    \"3 travelers \u00b7 Connected\"\nTimeout: 15000ms\n\nCall log:\n  - Expect \"toContainText\" with timeout 15000ms\n  - waiting for locator('#save-status')\n    16 \u00d7 locator resolved to <span id=\"save-status\">3 travelers \u00b7 Connected</span>\n       - unexpected value \"3 travelers \u00b7 Connected\"\n"
32    }
33  ],
34  "finding": {
35    "boundary": "Recovery scenario fails its initial two-player roster assertion, before device loss.",
36    "previousObserverId": "5f33068f-485b-4cb7-8feb-b6cf851a7d8a",
37    "priorSample": {
38      "stream": "355bf758-d846-4e9a-a409-3d6c93c78f75",
39      "sequence": "138",
40      "time": 68341.767102
41    },
42    "retainedFirst": {
43      "arrival": 23789.5,
44      "sample": {
45        "stream": "355bf758-d846-4e9a-a409-3d6c93c78f75",
46        "sequence": "456",
47        "time": 109461.051178
48      },
49      "position": [
50        -8.592294875597872e-08,
51        0.744188666343689,
52        4.800001621246338
53      ]
54    },
55    "retainedLast": {
56      "arrival": 36104.20000001788,
57      "sample": {
58        "stream": "355bf758-d846-4e9a-a409-3d6c93c78f75",
59        "sequence": "552",
60        "time": 121835.773721
61      },
62      "position": [
63        8.078491475771443e-08,
64        0.7443048357963562,
65        4.800001621246338
66      ]
67    },
68    "roster": [
69      {
70        "id": "5f33068f-485b-4cb7-8feb-b6cf851a7d8a",
71        "place": "lantern-house",
72        "position": [
73          8.078491475771443e-08,
74          0.7443048357963562,
75          4.800001621246338
76        ],
77        "yaw": -0.08000000000000002,
78        "sample": {
79          "stream": "355bf758-d846-4e9a-a409-3d6c93c78f75",
80          "sequence": "552",
81          "time": 121835.773721
82        }
83      },
84      {
85        "id": "3cceefac-f65f-41f9-8cc6-75fa946c08e0",
86        "place": "lantern-house",
87        "position": [
88          1.017440581563278e-06,
89          0.7448275685310364,
90          -4.649999618530273
91        ],
92        "yaw": -0.08000000000000002,
93        "sample": {
94          "stream": "68d8c6ac-5763-433b-8a3e-ca3dba80ead4",
95          "sequence": "244",
96          "time": 121842.647196
97        }
98      },
99      {
100        "id": "a0da7637-1dfc-490d-b13f-c91968899889",
101        "place": "lantern-house",
102        "position": [
103          0.599997878074646,
104          0.745048463344574,
105          -4.65000057220459
106        ],
107        "yaw": -0.08000000000000002,
108        "sample": {
109          "stream": "788ef4e0-f676-4eb0-beb5-2d15f61648ab",
110          "sequence": "119",
111          "time": 121794.676571
112        }
113      }
114    ],
115    "meaning": "Previous slow-render observer continues sending new pose sequence numbers after its browser context close. This is not merely an expired presence snapshot.",
116    "cause": "Unresolved; collect browser teardown and page scheduling evidence. Do not claim the original CI recovery timeout reproduced."
117  },
118  "movement": {
119    "motion-before-stall": {
120      "frameMs": 14.199999988079071,
121      "completionWaitMs": 3037.300000011921,
122      "maxCompletionWaitMs": 3037.300000011921,
123      "submittedFrames": 9,
124      "completedFrames": 8
125    },
126    "slow-render-walking": {
127      "frameMs": 13.400000005960464,
128      "completionWaitMs": 3626.2000000178814,
129      "maxCompletionWaitMs": 3626.2000000178814,
130      "submittedFrames": 8,
131      "completedFrames": 7
132    }
133  }
134}
135