platform-save-acceptance.json
docs/evidence/platform-save-acceptance.json
1{
2 "sourceBase": "4f85246c982d18a4b43cf525de7374997c61a57b",
3 "sourceFilesSha256": {
4 "apps/player/main.ts": "cbcc7385cda4f6f03a97a3ff7a55b8b3bb9ed78000825e37ac846ca013effbee",
5 "apps/player/simulation.worker.ts": "e5592c398ed5cea250046ad68390ee3e34050f2dc6e817cb33c20bde30e5d369",
6 "apps/probe/platforms.ts": "fca9a321a9efe59f2a4fc7aedc49c2f0d5346e678431ebc34c383e8094952cb0",
7 "packages/physics/index.ts": "256f7a2e121090961fafd35cab440aa71745dd9f762e5a79af4098a8cfc4e2aa",
8 "packages/schema/index.ts": "6a160db8ff4cbc9cd2480f687e0b02d72282f3061079b91123454779282d4240",
9 "packages/simulation/index.ts": "35266e31c7fcbe93765b9b95f83f8197d611d72e9a4184782cf86d37d7d7cc2e",
10 "tests/platform-saves.test.ts": "d7b47a957130663ca1208306fa5bf6662e5f34e3f0a3368d4d47a84ad0fe93c5",
11 "tests/browser/player.spec.ts": "eb1797dabbd654566eb731b54673904bc0792096809f7aa096e39e06a1d37d8d",
12 "tests/browser/probe.spec.ts": "4d854f1cf1c70ab6247bc351ca431828d645129412cb4edf7f30c6a3a308e6c8"
13 },
14 "scope": "Version-3 lightweight authored-route saves, pre-query collision reconstruction, accepted worker/UI save boundaries and preserved native checkpoint compatibility.",
15 "headless": {
16 "passed": 339,
17 "failed": 0,
18 "skipped": 0,
19 "focusedCases": 19
20 },
21 "checks": {
22 "typecheck": true,
23 "sourceBoundaries": 74,
24 "worlds": [
25 {
26 "world": "darkwind",
27 "release": "lantern-house.1",
28 "places": 3,
29 "objects": 1480,
30 "sha256": "e900a87c1854ad85a8bdc79953bd3e4d4b64f7b15a1451da8209609c2b504888"
31 },
32 {
33 "world": "engine-zoo",
34 "release": "motor.1",
35 "places": 1,
36 "objects": 6,
37 "sha256": "9facac25f35d9a16926052dbcc41fa12d5164ae891528e3a5ff62010c9f5a9cb"
38 }
39 ]
40 },
41 "browser": {
42 "command": "npm run test:browser -- tests/browser/player.spec.ts tests/browser/probe.spec.ts tests/browser/multiplayer.spec.ts --grep \"production simulation workers|owned renderer works|checkpoints save without animation frames|legacy saves are preserved|place travel, pickup|graphics recovery keeps the shared room\"",
43 "stats": {
44 "startTime": "2026-10-25T03:58:27.915Z",
45 "duration": 113841.234,
46 "expected": 7,
47 "skipped": 0,
48 "unexpected": 0,
49 "flaky": 0
50 },
51 "scenarios": [
52 {
53 "name": "graphics recovery keeps the shared room and receives door changes during restoration",
54 "status": "passed",
55 "durationMs": 16353
56 },
57 {
58 "name": "production simulation workers deliver and restore route saves at accepted state boundaries",
59 "status": "passed",
60 "durationMs": 7237
61 },
62 {
63 "name": "new checkpoints save without animation frames",
64 "status": "passed",
65 "durationMs": 6560
66 },
67 {
68 "name": "restored checkpoints save without animation frames",
69 "status": "passed",
70 "durationMs": 4253
71 },
72 {
73 "name": "place travel, pickup conditions, beacon state, and render resources remain coherent",
74 "status": "passed",
75 "durationMs": 12022
76 },
77 {
78 "name": "legacy saves are preserved while exact uint64 saves advance and reload from the new key",
79 "status": "passed",
80 "durationMs": 10698
81 },
82 {
83 "name": "owned renderer works on the main thread and survives worker resize, device loss and restart",
84 "status": "passed",
85 "durationMs": 53220
86 }
87 ]
88 },
89 "environment": {
90 "node": "22.23.4",
91 "playwright": "1.56.1",
92 "gpu": "SwiftShader Vulkan",
93 "playerViewport": [
94 960,
95 640
96 ],
97 "fixtureViewport": [
98 480,
99 300
100 ],
101 "quality": "high"
102 },
103 "nativeExperiment": {
104 "beforeFix": "Rebuilding a saved platform after the initial native update allowed the blocked route to advance from 1.2333333333333338 to 1.2666666666666673 on resume.",
105 "correction": "Install saved support geometry before the initial native query update; do not change the historical checkpoint constructor path.",
106 "verified": "The blocked route now retains its accepted phase across five resumed ticks; existing 420-boundary/seven-restore route replay remains unchanged."
107 },
108 "protocol": {
109 "format": 3,
110 "maxRoutes": 1024,
111 "contentIdentity": "compiled world SHA-256",
112 "entries": "complete sorted authored IDs and accepted route times across all places",
113 "legacy": "Formats 1/2 explicitly initialize authored routes at time zero; route-free worlds still emit format 2.",
114 "checkpointProfileUnchanged": "darkwind.simulation.7",
115 "storage": "v3 key preferred; v1/v2 preserved until explicit reset"
116 },
117 "limitations": [
118 "Lightweight saves reset transient velocity and recompute support/blocked status; they are not exact native checkpoints.",
119 "Runtime-created platform persistence, shared platform authority, live route revision migration and a shared playable platform journey remain open.",
120 "The shipped Darkwind world has no routes; this is engine functionality verified with Engine Zoo content.",
121 "Local software-GPU acceptance does not close physical-device performance or remote CI reliability.",
122 "Full-plan estimate remains approximately 35%; no entire numbered roadmap milestone is closed."
123 ]
124}
125