asset-work-acceptance.json
docs/evidence/asset-work-acceptance.json
1{
2 "date": "2026-10-25",
3 "baseCommit": "213356380aa6d8b7e75688b588378f5ff4024188",
4 "scope": "Cooperative runtime texture expansion, canonical base64 conversion and mip validation, cancellation-aware shared model hydration, prompt removal of cancelled yield timers, and content-work diagnostics. No artifact/content/checkpoint profile changes.",
5 "environment": {
6 "node": "22.23.4",
7 "browser": "Playwright 1.56.1 / Chromium 141 / SwiftShader Vulkan WebGPU",
8 "isolation": "Short .data/ld-work directories, fresh relay per browser spec, isolated PostgreSQL; interactive editor and beta preserved"
9 },
10 "checks": {
11 "headless": {
12 "tests": 885,
13 "passed": 825,
14 "skipped": 60,
15 "failed": 0,
16 "concurrency": 4,
17 "report": "asset-work-headless.tap"
18 },
19 "focused": {
20 "passed": 42,
21 "report": "asset-work-focused.tap"
22 },
23 "postgres": {
24 "passed": 2,
25 "authority": [
26 "cooperative",
27 "trusted"
28 ],
29 "report": "asset-work-persistent.log"
30 },
31 "build": {
32 "passed": true,
33 "packageFiles": 160,
34 "includesTypecheck": true,
35 "engine": "1a980bd0b75e6268a34e1ca20c8f8e454e033c566544ed9dd4c5c0b804a3e33b",
36 "report": "asset-work-build.log"
37 },
38 "browser": {
39 "passed": 6,
40 "reports": {
41 "probe": {
42 "report": "asset-work-probe.json",
43 "startTime": "2026-10-26T00:21:54.639Z",
44 "duration": 11098.412,
45 "expected": 2,
46 "skipped": 0,
47 "unexpected": 0,
48 "flaky": 0
49 },
50 "textures": {
51 "report": "asset-work-textures.json",
52 "startTime": "2026-10-26T00:22:06.165Z",
53 "duration": 46185.877,
54 "expected": 1,
55 "skipped": 0,
56 "unexpected": 0,
57 "flaky": 0
58 },
59 "published": {
60 "report": "asset-work-published.json",
61 "startTime": "2026-10-26T00:22:52.852Z",
62 "duration": 82873.878,
63 "expected": 2,
64 "skipped": 0,
65 "unexpected": 0,
66 "flaky": 0
67 },
68 "revisions": {
69 "report": "asset-work-revisions.json",
70 "startTime": "2026-10-26T00:24:16.213Z",
71 "duration": 21952.013,
72 "expected": 1,
73 "skipped": 0,
74 "unexpected": 0,
75 "flaky": 0
76 }
77 }
78 }
79 },
80 "verified": [
81 "Four-millisecond cooperative checkpoints yield via ordinary tasks; cancellation clears pending default timers without waiting for a throttled timer callback.",
82 "Scheduled decompression owns bytes before yielding. Bounded input slices retain exact length, Adler, digest and canonical JSON checks. Offline synchronous expansion remains byte-identical.",
83 "Aligned base64 fragments retain canonical binary and byte limits; padding in nonfinal fragments rejects. Mip row filtering retains every pixel for color, opaque color, normal and data usages.",
84 "Fresh texture/model input is owned before suspension; cancelled validation never registers a successful immutable model. Fresh retry succeeds.",
85 "Cancelling one model-hydration consumer preserves siblings. Last release cancels hydration; a stale rejection cannot clear a newer cooled-unit attempt. Closure releases content reservations.",
86 "Real browser main/Worker tasks run timers during large-image validation; cancellation messages reject without publishing a hash, and retry returns the original artifact.",
87 "Shared texture players preserve identity and ownership across corrupt speculation, retry, travel, graphics recovery and both rendering placements. Published graphics/simulation recovery and shared editor revision/save migration still pass.",
88 "Worker arrival screenshot visually inspected; existing diagnostic texture and application frame remain correct. No art redesign is claimed."
89 ],
90 "benchmark": {
91 "command": "npm run bench:asset-work",
92 "baseline": "asset-work-baseline.json",
93 "current": "asset-work-current.json",
94 "comparison": "asset-work-comparison.json",
95 "medians": [
96 {
97 "size": 256,
98 "artifact": "23a78fb114b9128ff3d80a16c656b4b6708d47b4320a31127f9b4bab45bfe247",
99 "durationMs": {
100 "before": 66.43937299999999,
101 "after": 124.16301299999998
102 },
103 "maxGapMs": {
104 "before": 66.26387599999998,
105 "after": 10.068740999999989
106 },
107 "beats": {
108 "before": 1,
109 "after": 23
110 }
111 },
112 {
113 "size": 512,
114 "artifact": "700d8d703d5667205eb798439bda2867b1f6fe72661b49f0b75a8bbe9305f059",
115 "durationMs": {
116 "before": 250.94446500000004,
117 "after": 400.25596199999995
118 },
119 "maxGapMs": {
120 "before": 250.88417300000015,
121 "after": 21.026586999999836
122 },
123 "beats": {
124 "before": 1,
125 "after": 74
126 }
127 }
128 ],
129 "scope": "Same script on baseline/current sources; seeded-noise RGBA images with complete mips; one warmup and three observations. One-millisecond timer heartbeat measured during transport plus semantic texture admission; wall-time/max task gap observations, not FPS or a hard device latency guarantee."
130 },
131 "browserMeasurements": {
132 "asset-work-probe-main.json": {
133 "loaded": {
134 "hash": "700d8d703d5667205eb798439bda2867b1f6fe72661b49f0b75a8bbe9305f059",
135 "beats": 337,
136 "maxGapMs": 26,
137 "durationMs": 1501.800000011921,
138 "yields": 180
139 },
140 "cancelled": {
141 "error": "Asset work cancelled",
142 "beats": 1,
143 "maxGapMs": 14.600000023841858,
144 "durationMs": 14.800000011920929,
145 "yields": 2
146 },
147 "retried": {
148 "hash": "700d8d703d5667205eb798439bda2867b1f6fe72661b49f0b75a8bbe9305f059",
149 "beats": 333,
150 "maxGapMs": 21.600000023841858,
151 "durationMs": 1479.5,
152 "yields": 177
153 }
154 },
155 "asset-work-probe-worker.json": {
156 "loaded": {
157 "hash": "700d8d703d5667205eb798439bda2867b1f6fe72661b49f0b75a8bbe9305f059",
158 "beats": 318,
159 "maxGapMs": 31.899999976158142,
160 "durationMs": 1389.7999999523163,
161 "yields": 167
162 },
163 "cancelled": {
164 "error": "Asset work cancelled",
165 "beats": 1,
166 "maxGapMs": 9.800000011920929,
167 "durationMs": 14.100000023841858,
168 "yields": 3
169 },
170 "retried": {
171 "hash": "700d8d703d5667205eb798439bda2867b1f6fe72661b49f0b75a8bbe9305f059",
172 "beats": 321,
173 "maxGapMs": 23.900000035762787,
174 "durationMs": 1410.1000000238419,
175 "yields": 169
176 }
177 }
178 },
179 "correctionsAndFindings": [
180 {
181 "issue": "The first browser implementation used scheduler.yield continuations; both placements completed with zero ordinary timer callbacks despite multiple yields.",
182 "resolution": "Use ordinary timer tasks. The same timer/cancellation assertions now pass in both placements.",
183 "reports": [
184 "asset-work-browser-priority-failure.json",
185 "asset-work-browser-priority-failure.log"
186 ]
187 },
188 {
189 "issue": "Initial cooperative mip/deflate scheduling still left roughly 90 ms local gaps during whole-mip base64 conversion.",
190 "resolution": "Decode canonical binary in aligned fragments. Final same-source comparison reduces the largest-fixture median longest timer gap to about 21 ms."
191 },
192 {
193 "issue": "A default pending yield timer could retain abandoned work until a throttled task resumed.",
194 "resolution": "Abort listeners clear the timer and reject immediately. A controlled 60-second timer test verifies settlement through microtasks without waiting for that timer; final full suite covers the safeguard."
195 }
196 ],
197 "limitations": [
198 "The four-millisecond value is a cooperative target, not a hard task/frame deadline or aggregate CPU quota. JSON snapshots/parsing, hash preparation, some geometry validation and GPU installation remain synchronous.",
199 "Yielding trades total load time for responsiveness. Largest local fixture median total duration rises from about 251 to 400 ms; browser total duration is roughly 1.4\u20131.5 seconds in the software test environment.",
200 "Three local observations and isolated browser probes are not FPS, p95, production network, physical-GPU/mobile or long-session qualification.",
201 "Byte reservations are not a total JavaScript heap or GPU allocation bound. Custom host-provided yield callbacks own their scheduling behavior.",
202 "Regional process-recovery, Docker and Coolify acceptance were not rerun in this increment.",
203 "Aggregate scheduling, incremental GPU installation, progressive mip/detail streaming and final character/environment/arrival art remain open."
204 ],
205 "progress": {
206 "approximateFullPlanPercent": 79,
207 "numberedMilestonesClosed": [],
208 "goalComplete": false
209 },
210 "sourceSha256": {
211 "apps/player/main.ts": "5d190a8ed9c269252beeeb25f7e0e4539511caa10f91fd5d06cefd71516a1d29",
212 "package.json": "a970c1e3b462d07868c80ef2460b9dbd9982c2762552baa3f01301ad6a7aa892",
213 "packages/assets/compression.ts": "4d4a9142ffab9b2a7b5e9244c79e8f2aa45af49df93056c59ea55262d3479962",
214 "packages/assets/runtime.ts": "d841f1a7cd4491ec932fe8140390ecc00991f03b93875fcaf7b4fff3594dc79b",
215 "packages/assets/texture.ts": "ecfe85161658b7d3ce45dbb8e99ed5f2c24eb48638c00c5f572eae4ab5d44e01",
216 "packages/assets/work.ts": "575ce50210b6a34c72cc58aa6aa221c0d0303915173cefe138ea3a33e16e02b2",
217 "packages/world/content-client.ts": "7f7865722f6f9c36b5dc58e344f90c570539addf28ddda2d69d39996a4718c5a",
218 "packages/world/content.ts": "8df1b7d60e7e0b6cbfa9e511c3e02a222894688a7fd927900273edaa81edc5a8",
219 "tests/asset-work.test.ts": "c225a3de587fa2febc4e30e3b6c893b460404fe14caf017ccad265a599a64455",
220 "tests/browser/asset-work.spec.ts": "4dc8537b69c72657c1e03c4400c5af2746024decbcdc64a910723f071d3a649b",
221 "tests/fixtures/asset-work-browser-entry.ts": "cc1148c3496bd07fd94f711a9e3c9b19de90aff1eb9e0926e6a83818c51276ce",
222 "tests/fixtures/asset-work-browser.worker.ts": "30a6c244f9ed79a35cc9e9602765f503955a41b7dfafc1c367c8fc24de753ceb",
223 "tests/fixtures/asset-work-operation.ts": "6a5d9e452e9d5bd91e5675072305a60f0285530ecf40e680aad986b163bd9a04",
224 "tools/cli/benchmark-asset-work.ts": "523943c162a5ca13ce5f923289e1fa2cbfec4e9e8982e6aadfdf1f188dad0ec6"
225 }
226}
227