REPOSITORY SOURCE

persistent-room-acceptance.json

docs/evidence/persistent-room-acceptance.json

1{
2  "date": "2026-10-25",
3  "scope": "Opt-in PostgreSQL-backed cooperative player, staged durable gateways, recovery and retained production runtime; full engine plan remains active.",
4  "source": {
5    "baseCommit": "5526de5ba086e55243c79145a43abb343dac7246",
6    "branch": "codex/engine-foundations",
7    "changedFiles": [
8      {
9        "path": ".dockerignore",
10        "sha256": "4b3124282cca810291266e2e12e7bb621bb05039a537d2bf570e735cf469febc"
11      },
12      {
13        "path": ".github/workflows/check.yml",
14        "sha256": "43936840493fecfa29b30d7f3e6eedc4ad30d4afb343ae4024ce8cf05a608382"
15      },
16      {
17        "path": ".gitignore",
18        "sha256": "381ae708b2cec2a2668be1eb4e4caadf6fb1b1ec02bd1d51c495ceacbbebf9ea"
19      },
20      {
21        "path": "Dockerfile.persistent",
22        "sha256": "fbd317729b749683196382b65896e3c01ff57c6af9e1bca67700b1a256804bd1"
23      },
24      {
25        "path": "apps/player/graphics-protocol.ts",
26        "sha256": "50827385d603805a914a2ad938f354487357219e6734f140f87c60e78a3c405c"
27      },
28      {
29        "path": "apps/player/main.ts",
30        "sha256": "0e9296c95e4ef6aad64c48166292239a9fccf67644158f9e9020cee863a5a318"
31      },
32      {
33        "path": "apps/player/simulation.worker.ts",
34        "sha256": "09d7a2ec611f08fcf41b855dc44f320679dd9efaa0490a7303a18921a394a9e1"
35      },
36      {
37        "path": "apps/player/travel.ts",
38        "sha256": "ec9124dac91abf133f4f6191f44e07643e5ceb8aa2e8b83b61fd7f902d42de21"
39      },
40      {
41        "path": "compose.control.yaml",
42        "sha256": "c3f5251ce3abf1de931cf621e1c51edfff901b34122a8b9ac42884dc28f2798e"
43      },
44      {
45        "path": "compose.persistent.yaml",
46        "sha256": "fbdc6f53527a0ed27b9baa3f0637c0c94c20cac8411449399e00ae377541aef6"
47      },
48      {
49        "path": "package.json",
50        "sha256": "09540912c7c48b02441185edf910d0f86119658818bfa8e96565d57bc90a1b42"
51      },
52      {
53        "path": "packages/net/durable.ts",
54        "sha256": "3bcab64a7ffdeef9c78db805a6d83491a9d5c898e42fdda866bd0b032fef41ff"
55      },
56      {
57        "path": "packages/net/persistent-client.ts",
58        "sha256": "b722b3e8e1c1cd3fdfcdf42a0d09b157eed63a15b6e03b6b9ab1cbbdc1c8aaa5"
59      },
60      {
61        "path": "packages/net/protocol.ts",
62        "sha256": "d564b507591daf80cf3670ef80330dd1aae77b45033ea3c8b4d880a285514a81"
63      },
64      {
65        "path": "playwright.persistent.config.ts",
66        "sha256": "2ce77490688e029338f338721938a918d6e7ffd6947d433e5a2b7a3d5daa3415"
67      },
68      {
69        "path": "services/control/ledger.ts",
70        "sha256": "3ac61019ce7e6c4fd5cc8df14d2b0b7ac7fb614d3fda4a92d83619774b131443"
71      },
72      {
73        "path": "services/control/migrations.ts",
74        "sha256": "26b23b9eebb336ec96ef0dc2e6cc07a9c341b7ad14e4ffd19eba0f3521c9bf7c"
75      },
76      {
77        "path": "services/engine/registry.ts",
78        "sha256": "73e4d1c7945d16e5e5b00a639b8e675721ecec065ec0cc1ad4a584f66172e88d"
79      },
80      {
81        "path": "services/persistent/bootstrap.ts",
82        "sha256": "edca8816ee48b8a468182f5331a27d3d1a27b64b548fb781b1fbfba64cafb14e"
83      },
84      {
85        "path": "services/persistent/main.ts",
86        "sha256": "ebd407f5d6aaab9e38a9b0ca10da272fa89242ea1d29a35c4b1acf34e273857e"
87      },
88      {
89        "path": "services/persistent/server.ts",
90        "sha256": "95a8e3c435f5da344d007fdde8a4e973232889c4bc908e6243b9d2e1300a6e2d"
91      },
92      {
93        "path": "tests/browser/persistent.spec.ts",
94        "sha256": "485ba9d94c84b24ca606d2afc6950f3976eb606b24b12813a51a0597184b5033"
95      },
96      {
97        "path": "tests/durable.test.ts",
98        "sha256": "905400c8b8aaac23d42413280453c6734d0be6860e9e7a5f8c15b1940d827d7e"
99      },
100      {
101        "path": "tests/fixtures/persistent-room-process.ts",
102        "sha256": "538fab209c07eaa540dc1be040b07688258b826ef719cd67652bca24ecef5e9c"
103      },
104      {
105        "path": "tests/fixtures/persistent-world.ts",
106        "sha256": "dea1c8a0584dba2838e8ca54332f2ea8ef1cea8d9e650b2b021c11811406c238"
107      },
108      {
109        "path": "tests/fixtures/seed-persistent-browser.ts",
110        "sha256": "8f40996f09c2b7e9ee7042f6abe6b17a8262fd3434b17d7d7458ca5247754122"
111      },
112      {
113        "path": "tests/persistent-room.test.ts",
114        "sha256": "12a2dffdf5214de5355364830edbc9f073247a3c01ab1f9180a94ab6c104da16"
115      },
116      {
117        "path": "tests/place-travel.test.ts",
118        "sha256": "ee4bc853f0b95d6ac8c6aba00be869caa2395bb0e2b89efb793bb7bdeb6592e5"
119      },
120      {
121        "path": "tools/cli/build-engine.mjs",
122        "sha256": "464e9c0beff9092dc1bdf2995662abefae0e84ac99b5efdf5f007a2efa9e59db"
123      },
124      {
125        "path": "tools/cli/persistent.mjs",
126        "sha256": "f926d543e65c723b99dd0a0b85a911336e09e900f8b673f0e164c861114253bb"
127      },
128      {
129        "path": "tools/cli/test-control.mjs",
130        "sha256": "1182139ba66693ca28c9c98a550da5c0a7d45ad6f960152386f5dc3e6f49d9cf"
131      },
132      {
133        "path": "tools/cli/test-persistent.mjs",
134        "sha256": "0947cd11884c28aded493450c3549349ca89db24e7beb274de650a8673c8b021"
135      }
136    ]
137  },
138  "runtime": {
139    "node": "22.23.4",
140    "postgresql": "18.6",
141    "browser": "Playwright-matched Headless Chromium 141.0.7390.37",
142    "graphics": "SwiftShader WebGPU, worker placement, 960x640 persistent acceptance; software rendering is not hardware performance qualification"
143  },
144  "checks": {
145    "types": "passed; package boundaries 123 source files",
146    "core": {
147      "tests": 614,
148      "pass": 603,
149      "fail": 0,
150      "skipped": 11
151    },
152    "postgres": {
153      "tests": 11,
154      "pass": 11,
155      "fail": 0,
156      "skipped": 0
157    },
158    "persistentBrowser": [
159      "\u2713 161 modules transformed.",
160      "\u2713 built in 936ms",
161      "\u2713 43 modules transformed.",
162      "\u2713 built in 35ms",
163      "\u2713  1 tests/browser/persistent.spec.ts:18:1 \u203a persistent players share objects and restore committed travel without local position saves (56.0s)",
164      "1 passed (57.5s)"
165    ],
166    "legacyBrowser": [
167      "\u2713  1 tests/browser/multiplayer.spec.ts:37:1 \u203a two real browsers share doors and chat, then the guest takes over when the host leaves (16.5s)",
168      "\u2713  2 tests/browser/player.spec.ts:366:1 \u203a renders, walks, pauses, releases input, and restores the local checkpoint (18.0s)",
169      "2 passed (37.9s)"
170    ],
171    "compose": "docker compose -f compose.persistent.yaml config --quiet passed with placeholder environment values"
172  },
173  "verified": [
174    "Concurrent pickup grants exactly one owner",
175    "Shared door and beacon outcomes visible to another traveler",
176    "Travel and inventory recovered by return credential without local pose saves",
177    "GPU preparation refusal leaves the durable source place unchanged",
178    "Native worker failure restores committed journey without page reload",
179    "Process kill after committed travel and discarded reply recovers destination and deduplicates retry",
180    "Persistent client resends the identical operation after a reconnect baseline that already includes its commit",
181    "Per-connection pending-work budget preserves service for another traveler",
182    "Identical pose with different JSON property order does not append a new transaction",
183    "Compiled bootstrap selects and runs the retained engine bundle",
184    "Original solo restore and multiplayer door/chat/host-handoff browser regressions remain green"
185  ],
186  "commands": [
187    "npm run check",
188    "npm test",
189    "npm run test:control",
190    "PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser:persistent",
191    "PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser -- tests/browser/player.spec.ts tests/browser/multiplayer.spec.ts -g 'renders, walks|two real browsers share doors'"
192  ],
193  "limitations": [
194    "No numbered roadmap milestone is closed; estimate approximately 62% of full milestones 0\u201318.",
195    "Browser-owned cooperative motion; no authoritative physics or account recovery.",
196    "Persistent dynamic behaviors, chests, transfers, recovery containers and release migrations remain open.",
197    "Container startup/deployment not run locally because Docker daemon access is unavailable. Native production bootstrap and Compose syntax were verified.",
198    "Headless system Chromium 155 with the configured SwiftShader flags produced blank composited screenshots despite completed GPU frames. Acceptance uses the matching Playwright Chromium 141; broad browser and physical-GPU qualification remains open.",
199    "Core aggregate preceded the final unchanged-pose optimization; final typecheck, PostgreSQL client regression and rendered browser journey include that optimization.",
200    "Screenshots and garden report were captured in the passing journey before the queue fairness and unchanged-pose hardening; the final built journey was rerun and passed."
201  ]
202}
203