REPOSITORY SOURCE

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