REPOSITORY SOURCE

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