REPOSITORY SOURCE

surface-catalog-acceptance.json

docs/evidence/surface-catalog-acceptance.json

1{
2  "recordedAt": "2026-10-25T19:24:45.041473+00:00",
3  "baseCommit": "3a99676f6e233f470c088c270e0a858ecb1c2331",
4  "scope": "Saved per-object surface catalogs, bounded staged GPU activation, editor authoring, shared revisions, device recovery and portable arrangements. Full material/effect graphs and full engine plan remain incomplete.",
5  "fullPlanEstimatePercent": 76,
6  "contracts": {
7    "world": 16,
8    "compiler": "surface-world.16",
9    "presentation": 10,
10    "prefab": 3,
11    "prefabCompiler": "prefab-world.3"
12  },
13  "limits": {
14    "recipesPerPlace": 8,
15    "totalNodesPerPlace": 128,
16    "totalCostPerPlace": 384,
17    "nativeCompilationMs": 15000,
18    "graphicsPreparationMs": 20000
19  },
20  "sourceSha256": {
21    "apps/editor/main.ts": "acc19dda00731f15f7c0e57ab4d93ee27d6c28617d9c57927f818cee956037d1",
22    "apps/editor/materials.ts": "1914ab86b239bbe12cfecc702e6eb36798c175f924447d59ba02c79454e18c6e",
23    "apps/editor/prefabs.ts": "b771cc5e6130286ab58b5b1dee8ade620dd59d007e6a261fd33a24af723d022b",
24    "apps/editor/scene.ts": "3e2b7c672c55ec2731e648c221bc34a90c41e42cbd0c8b0c87976de55eaa8ed2",
25    "apps/editor/style.css": "2ff53ee4877bfe911e3a7fcb1f6c29e204e3af7bbafba03700a50334e6990e0f",
26    "apps/editor/templates.ts": "77ba2bf5a6ed3db27a717a3ccfe12522c068912969673b5dca9ce65019eeb855",
27    "apps/player/development.ts": "5b83780d2c59a4960d7202b48cdfa9157295dfe4469703d6809b387d9111a7b3",
28    "apps/player/graphics-protocol.ts": "1580d1110a1ff614d9141101be7b54cc4cbc263170c047809f53bf00a30a285c",
29    "apps/player/graphics.ts": "88a11cffdb7f1f8ca202fdefbd68652281fc263090283c09648a7a54f237a100",
30    "apps/player/graphics.worker.ts": "51f7910c92c3e980bc2bdf3e90b09ebfc856fc1828c4ae03f6321fee8daa4973",
31    "apps/player/main.ts": "52173df5b4a62ba2886866c167d56a44e84dabbdfffb9af8bbf0c837f274dc0d",
32    "apps/probe/protocol.ts": "0655704b5395c0b2469bea27d7fbc34d8be7de61866da80d4badeb488993d603",
33    "apps/probe/render.worker.ts": "92b25bbde878d0f8137273ceb3e88804d58b984b209c06d5ba0f418ea5ea0b18",
34    "apps/probe/run.ts": "4d7896f233f48100cbe0148fc47acb19851d2bdfe01ab63b9fb2d81a2fa853ee",
35    "apps/probe/surface-graphs.ts": "d08bc8253496f887f80d19c01cbfdfd0417d096739f95be2eef2c5106cf77086",
36    "apps/shared/presentation.ts": "994c5eca946f9b0aef90154291035ab0527653ef0156fbb9fb140ccf40c89209",
37    "packages/authoring/index.ts": "ea6d3e3417b5da1f99e4475d8ac0693d4c922b5028c2145e1c31fbe1a801c25b",
38    "packages/authoring/materials.ts": "5511ca906fbe46fef3bbad342242e257292ac1db85ca4a8189e4788153967f5d",
39    "packages/authoring/merge.ts": "dbdf5adb2dc0edc08375aa242fde1a5379941a46ff13a9e43924fa1e5ae31027",
40    "packages/authoring/observations.ts": "c174d599d95c5f6a7cec8d86646f81506f4f182197fc09791e1ce842216add4b",
41    "packages/authoring/prefab-links.ts": "fa5d5dc0f01cc61ae9072dc8241356f0c938d006d8e236264abf57f8722d05e5",
42    "packages/authoring/prefab-placement.ts": "98811383e316075578a46de0c6207d35a5d0d82e8768f3c4681210010f0a2823",
43    "packages/authoring/prefabs.ts": "10953bfaba2c1ae84870faa376e413690760a7fa244ac9c33d3f2536d80c0bb6",
44    "packages/authoring/undo.ts": "508c69b667684fabb1051e1cd0f3edef4c0f7112e2c44d73038ccaca32559326",
45    "packages/compiler/index.ts": "cedd460bc2789b991bcd15fb0b7efecd40528c78d4d0e9624b28dcb5c7e57f8b",
46    "packages/presentation/index.ts": "14e15a804fee8a1bdb63ddc42454d82b40057196b38ddb141c0523cc30088265",
47    "packages/render-webgpu/index.ts": "cc22940af110a3e15e36c9caad9073a68d048e4d074c21b16ce19757fc6adfea",
48    "packages/render-webgpu/material-graph.ts": "fb2a3292d7cd5b83e5a75e6b17f4c8258a21b91cae48edd4cfcb562aad385881",
49    "packages/render/index.ts": "6ac189ff4bf1576e2ea4bb581bcf85031fddb3a9d0e2fe47215a6a200abc9aa2",
50    "packages/render/presentation.ts": "fbca78dded2798bcd74f1a44d12d8073e2af7de13ce9182b5d257603969737a9",
51    "packages/render/shader-updates.ts": "29f4a059736e2356684f24b96f76aba7e1ed97ef4f85944f292d3ca0db484336",
52    "packages/schema/index.ts": "1ea36cda03678da01fdd522ecea6b0cedb57e75498a8aba99427351200c1c8c0",
53    "packages/schema/surface-graphs.ts": "94519c19041120e6a7807b237bf7d12fb309e1033c0b1694dd9c079be7ea14bf",
54    "packages/simulation/checkpoint.ts": "f96d030a78791ef80699ec5dcc87ab9aed6db98899731cf48eb01062ae648101",
55    "packages/world/prefabs.ts": "8c75129adf21902a51cda6cb5c4f939d4759989e4ed0c899fc0ca32fdd467f7a",
56    "services/build-worker/protocol.ts": "04aae0292f7c506a9ad57c0772fb2946dd0f255a5eb0dc0f37bdfed409190a33",
57    "tests/authoring-proposals.test.ts": "7d13756fed0bfe19600693884f9701dbe3985c67fa711a827a0ba8e04979ec7f",
58    "tests/browser/editor-surfaces.spec.ts": "a7e8042967d28f3c4cae6aae0789eb5569fba93a6521a99bbeb15e1931e2963a",
59    "tests/browser/probe.spec.ts": "fa7374fc1734281fe61468c0427740df7ff1f0dc6637aa346161affa7c6f82db",
60    "tests/shader-updates.test.ts": "aaae86c6ac01606278251c259f35bb92e77f862298bcf6576441d387c6eaf39b",
61    "tests/surface-graphs.test.ts": "a02aff02f1a03ce9b26d0694d537c14f74fbf466749d540a4cd0ed9d24dc4b71"
62  },
63  "environment": {
64    "node": "22.23.4",
65    "browser": "Chromium 141 headless shell",
66    "playwright": "1.56.1",
67    "graphics": "SwiftShader WebGPU/Vulkan on Linux",
68    "temporaryStorage": "Isolated workspace-disk directory, removed after each run"
69  },
70  "checks": {
71    "headless": {
72      "total": 746,
73      "pass": 690,
74      "skip": 56,
75      "fail": 0,
76      "log": "surface-catalog-headless.tap"
77    },
78    "typesAndImports": {
79      "passed": true,
80      "packageFiles": 143,
81      "log": "surface-catalog-check.log"
82    },
83    "finalEditor": {
84      "passed": 3,
85      "failed": 0,
86      "report": "surface-catalog-editor-report.json"
87    },
88    "native": {
89      "passedCases": [
90        "owned renderer works on the main thread and survives worker resize, device loss and restart",
91        "worker exceptions produce a bounded failure and the next run can recover"
92      ],
93      "report": "surface-catalog-native/browser-results.json",
94      "measurement": "surface-catalog-measured.json",
95      "sourceManifest": "surface-catalog-native/source-sha256.json",
96      "changedSinceNativeRun": [
97        "packages/authoring/materials.ts",
98        "tests/surface-graphs.test.ts"
99      ],
100      "note": "The native renderer and its probes did not change after this run. The material-command no-op comparison and its regression test changed subsequently; the final editor journeys and full headless suite verify that fix."
101    }
102  },
103  "verified": [
104    "Catalog budgets, canonical ownership, missing references, old-format rejection and node diagnostic mapping.",
105    "Recipe-only edits preserve simulation entities and player state through checkpoint reconstruction.",
106    "Atomic saved undo/redo after restart with disjoint atmosphere preservation and conflict fencing.",
107    "Imported-model graph assignment, unaffected slots, discarded/failed candidate preservation, held native cancellation, later activation and actual device-loss reconstruction.",
108    "Editor draft refinement, malformed source rejection, reload, narrow layout and durable undo.",
109    "Two travelers on worker and main-thread graphics retain identities through publication; worker device recovery restores one recipe, 54 buffers and four textures.",
110    "Portable arrangement capture, collision remapping, build-worker identity, preview, placement, reload and subsequent shared recipe edits without spurious material overrides."
111  ],
112  "findings": [
113    {
114      "issue": "Combined material/compiler and catalog native study exceeded the existing 20-second worker request budget in one broader recovery case.",
115      "resolution": "Separate independent worker requests retain the original deadline; the failed recovery case passed subsequently.",
116      "evidence": "surface-catalog-initial/browser-results.json"
117    },
118    {
119      "issue": "A later /tmp-based run reported native external-Instance and screenshot failures, plus an arrangement preview shadow reference failure. A subsequent engine bundle copy failed with EIO under /tmp.",
120      "resolution": "Tests moved to isolated workspace-disk temporary storage. Fresh runs passed the GPU cases; this does not establish the root cause of the native error. Arrangement previews now clear obsolete shadow-light indices when clearing local lights.",
121      "evidence": [
122        "surface-catalog-second/browser-results.json",
123        "surface-catalog-storage-failure.log"
124      ]
125    },
126    {
127      "issue": "A recipe-only dialog edit emitted a no-op material command due to JSON key order, creating a linked arrangement override.",
128      "resolution": "Compare material values canonically; regression and final arrangement browser journey pass.",
129      "evidence": [
130        "surface-catalog-native/browser-results.json",
131        "surface-catalog-editor-report.json"
132      ]
133    }
134  ],
135  "remaining": [
136    "Visual node-canvas authoring and broader material/effect/texture operations.",
137    "Physical GPU/vendor performance and long-running driver cache qualification.",
138    "Visible portals and other remaining numbered roadmap requirements.",
139    "Deferred final character-model and arrival/camera art pass."
140  ],
141  "milestonesClosed": []
142}
143