persistent-upgrade-acceptance.json
docs/evidence/persistent-upgrade-acceptance.json
1{
2 "recordedAt": "2026-10-25T13:54:37.312474+00:00",
3 "baseCommit": "5a4484fbd50b9abf0be9712d46fe97bc4b928cf1",
4 "fullPlanApproximatePercent": 64,
5 "numberedMilestonesClosed": [],
6 "capability": "Reviewed, drained persistent content upgrades with atomic recovery of removed chest contents and retained item definitions.",
7 "sourceSha256": {
8 ".github/workflows/check.yml": "7245fd450b5bed9eb07721e282054dac87248ff8108cdcf2ee432039f25adb2b",
9 "apps/player/main.ts": "fad1f5e212969358403f22ebf4bc0cb022eb62204bdd757207937df74537e081",
10 "apps/player/simulation.worker.ts": "cde5182d1dfc9cb596b8315af47b3a7a44c48e5e9a6593b07aeeeb1ac0aad911",
11 "games/darkwind/recovery-world.ts": "451294b9751c781be4aff412012feb9fa39bb775d8ca8259e1e6fc3c09b36bb3",
12 "package.json": "f4786b51a1f77aa5fed7c0bdb0b32b3e58d37399d09591f0655240602997e75c",
13 "packages/authoring/index.ts": "ece241e13f5f01404daf8e1898130f2dc0f8778f3b650a6d3f3ae421c22927cb",
14 "packages/authoring/observations.ts": "19ffa0e2e32c9088374e99dd00c1dcbfb5418bede57da2e7917fb99361d474c5",
15 "packages/authoring/undo.ts": "c73f3d7a5d104f27d40a8fb29290ca0393c42cb77699b58c5da15cd5fc802d44",
16 "packages/compiler/index.ts": "f9466b162ba878dd7fc4627c3c2fd521484988c7a4eadb9c4b4d6f7e3dfb73d7",
17 "packages/net/durable.ts": "70210dd3af96e859e4a07cd134caadd6f8fa428933da11f45aae25d8ea125c89",
18 "packages/net/persistent-client.ts": "7f1cc7cf60209a56111ac0958ad3e0fb90b2bc80d0ceec00b06c37ca25ef597f",
19 "packages/net/protocol.ts": "ea731932d7b2c52f1e58b3a33ab2ffecaf8a8bcaec67e45f87a818bdbcb2911c",
20 "packages/physics/index.ts": "e3b49fd095e3ae668fcbd01a8c41c807b83c108815eed9a318e517123e4d598d",
21 "packages/schema/equipment.ts": "e78a27c82a1fd7ddcf7a072bd945940e5fba5b952880223a50a5c1a928892cf3",
22 "packages/schema/index.ts": "f3684c3b4fc66410582847f6612e8fcae90cc14f62c782026eade0d93303d3db",
23 "packages/schema/inventory.ts": "00f9e2543d91cf54f1241dbae6eb05f69610c3cfa28dc95269116cd76fbaf52f",
24 "packages/simulation/checkpoint.ts": "198b7e1e288725edb2e1a24fe41b077c53cdddda784d1142e5a81b221a7ada43",
25 "playwright.persistent-upgrade.config.ts": "bba360cd68d25241042765140b5cc2dcc7bff42655489abd36369f7035f9ecd4",
26 "services/control/http.ts": "35a5f47f5eb3162e5296b654c3c0d628dde554190b342e19caa2d3f7a15b4fd3",
27 "services/control/ledger.ts": "719416d3e8fea426a07f580b3cae23398b1369f14549ca121fdbb030d9bf3169",
28 "services/control/main.ts": "1e8666c421777f7e6ba39ee390006b41e882978cd5d184e0c467dafea8a1bfa3",
29 "services/control/migrations.ts": "4e5d3ea6e7f72db9c013f43133ffb8075609fd038ea29d4a8f63c7b480f7cece",
30 "services/control/upgrade-plan.ts": "21134b76fd635fbc36a9050ff752e1f3c78b789abc96d9228ddb332dc0ee8b91",
31 "services/engine/registry.ts": "e0ba11112009db4f9a88c8fe75d9264d1d78b15536c201a5c6e74d9e5fc5e41f",
32 "services/engine/runtime.ts": "c3f89cf5ac265eb52f6d70a2975b7cb8525e15e12a12628770e735019d3eb58b",
33 "services/persistent/server.ts": "fe7955303f2610b564c5b3799fcb34f85a13073128c3f73ba5e341c43b70eaf5",
34 "tests/browser/persistent-helpers.ts": "e6ae3e28227bd48331bc0a5b8d301ca7a19df18aaff233139631a9390eee4a61",
35 "tests/browser/persistent-upgrade.spec.ts": "fa55121abb0d1d0c6ff4cd198793fd31faacb336f8b7fe4ab55e259a47882066",
36 "tests/browser/persistent.spec.ts": "dccdfa27b7f3fa31760fa6491627ab5c501183706ad3300862bc68c4a8627f0b",
37 "tests/control-upgrades.test.ts": "a4088da7f813e7d28ea45f8457bc6e0900af7e02872fdcf834e47217fc9b1370",
38 "tests/engine-pinning.test.ts": "3c9beb14a947ceb04d1c6ab1395610d80e24077cdecbd2e25232a09c0faf1a0a",
39 "tests/fixtures/control-crash.ts": "925d812bf686cf7d95a39d67ee9f056705c57cbe6b7dfa2d77d0dbf9f89f8269",
40 "tests/fixtures/persistent-upgrade-host.ts": "853ddded7d377b81ea8e9f987117f9bbfc16af4cde760f9340466530bd800fb7",
41 "tests/upgrade-plan.test.ts": "9958203ff49e7cad1be539ca68243b57e0240d070e7ac2d2818423f0cc8031f8",
42 "tools/cli/build-engine.mjs": "0378211a884f4db9d1fc7b0ca6f578ac4542caacef1d282286623f28847c2c99",
43 "tools/cli/recovery-world.ts": "d3bf8ed9094e99e48183074428eba0c9af6d7d22f347d621fbcc4bcab52d7e67",
44 "tools/cli/test-control.mjs": "39f651daba37b8057ddbf54c27c06cae4cf54861a12084666665bda0b1d1c91e",
45 "tools/cli/test-persistent.mjs": "d84880dc6f0680a3d6dfe09cba843baac78edd1c1e04bddfebf2f097f7e147f8",
46 "tools/cli/upgrade-room.ts": "48ec3051e29479e4a2c364d912af9a1dae72b86631ff3c06bc17d966c1a5f0b4"
47 },
48 "verification": {
49 "typeAndBoundaries": "passed; 124 package source files",
50 "headless": {
51 "tests": 626,
52 "pass": 607,
53 "fail": 0,
54 "skipped": 19
55 },
56 "postgres": {
57 "tests": 19,
58 "pass": 19,
59 "fail": 0,
60 "skipped": 0
61 },
62 "focusedRecovery": {
63 "tests": 3,
64 "pass": 3,
65 "fail": 0,
66 "skipped": 0
67 },
68 "retainedEngineCompatibility": {
69 "tests": 4,
70 "pass": 4,
71 "fail": 0,
72 "skipped": 0
73 },
74 "originalBrowser": {
75 "stats": {
76 "startTime": "2026-10-25T13:51:11.553Z",
77 "duration": 93267.964,
78 "expected": 1,
79 "skipped": 0,
80 "unexpected": 0,
81 "flaky": 0
82 },
83 "journey": {
84 "actor": "1b9076a6-5011-4b7d-b6af-a7c6affc3fdb",
85 "place": "sanctuary",
86 "revision": "23",
87 "inventory": [
88 "keeper-lantern"
89 ],
90 "otherTraveler": "8fcc53ec-f03e-4c12-8982-cb812e70d9f0",
91 "errors": []
92 }
93 },
94 "upgradeBrowser": {
95 "stats": {
96 "startTime": "2026-10-25T13:53:09.762Z",
97 "duration": 55748.229,
98 "expected": 1,
99 "skipped": 0,
100 "unexpected": 0,
101 "flaky": 0
102 },
103 "journey": {
104 "actors": [
105 "9c81689c-d095-401c-8e34-ae5f0d466af7",
106 "8d4d8cc6-c7cf-41df-be42-499fb41e0798"
107 ],
108 "source": "04689de6f675e460344f6ff4172e03d002c422372b602c2009745c25a4ed65aa",
109 "release": "e958fd31a833fcdb775f0ec214c0621cc462a8185b02fd0e96b4d489fbb1e8d0",
110 "operation": "7a0b5bed-9527-4a7d-863f-9e152b3288e2",
111 "retainedItems": [
112 "keeper-lantern"
113 ],
114 "recovered": [
115 {
116 "item": "keeper-lantern",
117 "from": "traveler-chest"
118 }
119 ],
120 "inventory": [
121 {
122 "id": "keeper-lantern",
123 "revision": "4"
124 }
125 ],
126 "errors": []
127 }
128 },
129 "browserVersion": "Playwright-matched Chromium 141.0.7390.37"
130 },
131 "checks": [
132 "Copied snapshot preview is deterministic and leaves committed state unchanged; source release remains retained.",
133 "Deleted chest contents and removed pickup metadata survive the effective format-11 release, native checkpoint, shared panel and traveler reload.",
134 "Inventory-only equipment retains its attachment contract without becoming a free world interaction.",
135 "Reduced capacity relocates deterministic overflow; inadequate recovery capacity rejects the plan.",
136 "Live owner, stale snapshot, edited preview checksum, unsafe entry collision/floor, stale player revision and reused operation ID reject.",
137 "Concurrent upgrade applications commit once; exact retry returns original receipt; prior player receipt retry does not repeat the transfer.",
138 "Six real SIGKILL boundaries: state, receipt, outbox, before-commit, committed and acknowledgement; no lost acknowledged upgrade or duplicate replay.",
139 "Player and upgrade events preserve one ordered sequence and consumer acknowledgement history.",
140 "Packaged upgrade CLI runs from retained production engine bytes; legacy relay without persistent ABI cannot be an upgrade target.",
141 "Two original traveler credentials survive stopped production bootstrap, packaged preview/apply, exact duplicate apply, bootstrap restart and browser reload.",
142 "Browser server and isolated PostgreSQL cluster now shut down automatically at successful completion."
143 ],
144 "art": {
145 "persistent-upgrade-welcome.png": "e163a6a75b3cb53538ba41a181df214b41bd05aecd228295523809a33d424421",
146 "recovered-chest-panel.png": "ab4bb50514435ec858e56b6a4417c60e8a93dddd9a01db9a44a365ced5f0c321",
147 "recovered-item-satchel.png": "c62431496685866df482be5f9737bc32f108f86b4247b3185c95e5bdd92dc7e4"
148 },
149 "observations": [
150 "Initial browser scenario passed, but Playwright force-killed its controller and left a detached test runtime holding output pipes. The identified orphan was stopped; graceful SIGTERM teardown is configured, and the final complete run exited 0 without manual cleanup.",
151 "An earlier restricted equipment test could not operate its local server and was stopped; final full regression ran with required local permissions.",
152 "The full engine suite preceded a final maintenance-screen wording improvement. Final type checks, retained-engine tests and production upgrade browser acceptance cover the final source.",
153 "Original persistent browser acceptance remains a separate passing run with its own isolated database and output."
154 ],
155 "remaining": [
156 "Source and target must share supported database schema 4 and upgrade policy 1. Existing schema-3 rooms are protected, not automatically migrated.",
157 "Live activation, cross-schema/down-migrations, dynamic persisted state, cross-host transfers and account recovery remain open.",
158 "Object-store backups, measured production recovery objectives, physical device/load qualification and Docker/Coolify execution are not established here.",
159 "Remote CI was previously blocked by account billing; these are local verification results.",
160 "The full milestones 0\u201318 plan remains active; final character artwork is still deferred."
161 ]
162}
163