model-detail-acceptance.json
docs/evidence/model-detail-acceptance.json
1{
2 "date": "2026-10-25",
3 "baseCommit": "68969ea92fb8903d9c05924509bb2fa2bb931f77",
4 "scope": "GLB model format 7: portable precomputed static detail, checked original artifact identity, isolated compiler/editor Worker generation, standalone author bundle and runtime consumption. Retained model formats remain supported.",
5 "environment": {
6 "node": "22.23.4",
7 "browser": "Playwright 1.56.1 / Chromium 141 / SwiftShader Vulkan WebGPU",
8 "temporaryDirectories": "Isolated short .data/ld-* paths; interactive editor and beta preserved"
9 },
10 "checks": {
11 "focused": {
12 "passed": 65,
13 "report": "model-detail-focused.tap"
14 },
15 "headless": {
16 "tests": 863,
17 "passed": 803,
18 "skipped": 60,
19 "failed": 0,
20 "report": "model-detail-headless.tap"
21 },
22 "build": {
23 "passed": true,
24 "packageFiles": 158,
25 "engine": "67d9f3ce9cccf87b62b24b12535c623ab91e67b0b5fe71368b993fadc8b80e38",
26 "report": "model-detail-build.log"
27 },
28 "finalTypecheck": {
29 "passed": true,
30 "report": "model-detail-check.log"
31 },
32 "browser": {
33 "passed": 6,
34 "reports": {
35 "native": {
36 "report": "model-detail-native.json",
37 "startTime": "2026-10-25T23:38:41.801Z",
38 "duration": 7086.345,
39 "expected": 2,
40 "skipped": 0,
41 "unexpected": 0,
42 "flaky": 0
43 },
44 "editor": {
45 "report": "model-detail-editor.json",
46 "startTime": "2026-10-25T23:40:56.008Z",
47 "duration": 102976.08899999999,
48 "expected": 3,
49 "skipped": 0,
50 "unexpected": 0,
51 "flaky": 0
52 },
53 "player": {
54 "report": "model-detail-player.json",
55 "startTime": "2026-10-25T23:42:39.723Z",
56 "duration": 47414.966,
57 "expected": 1,
58 "skipped": 0,
59 "unexpected": 0,
60 "flaky": 0
61 }
62 }
63 }
64 },
65 "verified": [
66 "Direct imports, isolated process jobs and the packaged CLI outside the checkout produce identical format-7 artifacts. Standalone output includes meshoptimizer and its MIT notice.",
67 "The original format/importer/hash binds source geometry, materials, skin/animation and collision. A versioned detail envelope binds sorted bounded variants; transport/compiler envelopes also hash complete wire bytes.",
68 "Malformed/rehashed profile, base, reference, duplicate, count, index, encoding, error and byte-census cases reject. Caller mutation during asynchronous validation cannot alter admitted data.",
69 "New artifact preparation invokes the simplifier zero times; retained legacy preparation invokes its existing derivation. Mirrored variants reverse winding once without changing stored data.",
70 "Independent model/image transport reconstructs the new artifact and yields the same full/streamed native simulation checkpoint.",
71 "Actual browser import retains texture/material rendering, saves/reloads/undoes/redoes, cancels an import, and applies/undoes a precomputed model while both shared players remain connected.",
72 "Native main/worker image fixtures preserve identical near pixels and the previous distant measurements: 2220 to 1404 visible triangles, 125 changed pixels, 3 large differences and RGB RMSE 0.24145824345698644.",
73 "Shared worker/main players recover graphics with the same room identity, approach original detail and remain grounded. Native close releases all model-pool bytes."
74 ],
75 "preparationBenchmark": {
76 "report": "model-detail-preparation.json",
77 "command": "npm run bench:model-detail -- test-results/model-detail-preparation.json",
78 "largestFixture": {
79 "vertices": 66049,
80 "indices": 391680,
81 "baseArtifactJsonBytes": 11418206,
82 "artifactJsonBytes": 12985283,
83 "detailIndexBytes": 1175040,
84 "storedMedianMs": 639.184495,
85 "legacyMedianMs": 566.6563919999994
86 },
87 "interpretation": "Portable precomputation removes runtime simplifier calls but increases encoded size and total validation/preparation cost in these observations. No loading-speed improvement is claimed. Three samples in fixed order with one warmup are not a performance qualification."
88 },
89 "correctionsAndObservations": [
90 {
91 "issue": "Initial artifact identity hashed the entire model twice.",
92 "resolution": "Format 7 now verifies the original base hash and hashes only the detail envelope for its new identity; base semantic validation is retained."
93 },
94 {
95 "issue": "Typecheck caught an optional detail value across async base validation.",
96 "resolution": "Capture the validated owned detail in a local constant before await. Production build and final check pass.",
97 "report": "model-detail-initial-typecheck.log"
98 },
99 {
100 "issue": "Initial shared editor journey exceeded its 60-second overall limit during cleanup after both players passed the final revision/resume/connected/error assertions.",
101 "resolution": "Overall allowance is 120 seconds for three live software-rendered views; individual assertion and runtime deadlines are unchanged. The full editor suite then passed.",
102 "report": "model-detail-initial-editor-failure.json",
103 "traceSummary": "model-detail-initial-editor-trace-summary.json"
104 }
105 ],
106 "limitations": [
107 "Stored variants currently travel with model geometry; independently streamed or authored detail variants remain open.",
108 "Simplifier error is an appearance estimate. The reader validates bounded geometry/identity, not arbitrary authored visual fidelity.",
109 "Serialized variants add admission and transfer cost; preparation optimization remains open.",
110 "No physical GPU, long-session or Docker/Coolify qualification performed.",
111 "The final character/environment/arrival art pass remains open."
112 ],
113 "progress": {
114 "approximateFullPlanPercent": 79,
115 "numberedMilestonesClosed": [],
116 "goalComplete": false
117 },
118 "sourceSha256": {
119 "apps/editor/model-import.worker.ts": "87df8a997667d7b4685287c8ef13cc389de2d82986962bfec94cf4750daf83c9",
120 "package.json": "a611da3714251ed041f2a180fc689ff22c98d77484f2a05cf365d55731573212",
121 "packages/assets/glb.ts": "92598a69b0111ef85c4313a19ecd7f72e9d93edf3b629b4f7e06a7b110e9d7ea",
122 "packages/assets/model-detail.ts": "39be992959a4f40244d0d4e761b0e7c99d45fe9aa47d90b9a7200af64ef772b5",
123 "packages/assets/runtime.ts": "7a5802c14e953f0ccf535b23a3741dad2b87b34d88daaa78d00117a9d96c23a0",
124 "packages/render/model.ts": "610280032f8f5f54ae75a6c9dd497199d630787582fd248e9b2cf32046705e0d",
125 "services/build-worker/asset-protocol.ts": "9b01471950c9755105d34c1bbff3d498390487ccbbc622f78be147dfe95fc70a",
126 "tests/browser/editor-model-import.spec.ts": "f6d456f2ccbc6c821a3deed87c52c3f9e7a5f1d42e2b0e11be24f1f7b7733bc5",
127 "tests/model-detail.test.ts": "cb355b41a55e6514c9c5629fcaca0361907d8067e6a69ea26a86c500ba7aab3f",
128 "tools/cli/benchmark-model-detail.ts": "24187ab6c13b10eba45467228dc70b232c961979a61a2103cb1835c1eb0783d8",
129 "tools/cli/build-author.mjs": "bbbcdaea68829bb3960d1d0ba89a183da78e2103975e30a8291927f71b9ddf39"
130 }
131}
132