Why
Split from #457 (several pull requests). The engine has one HTTP loader, cluster/pages.ts:12 checked (one retry on a network error or 5xx, an EngineError naming the URL), yet five places fetch on their own with other policies (architect, 2026-09-25): no retry, plain Errors, no abort signal.
To do
- One loader, one policy:
checked gains optional (a 404 answers null) and credentials; gpu/page/pages.ts:183 httpPageSource, host/prepared/images.ts:29, lighting/importedLights.ts:36, physics/tiles.ts:52 and physics/tilePlace.ts:49 call it; the physics tiles take the model's abort signal.
- The changed error codes documented: docs/SDK.md, the API reference and every translation.
Code context
cluster/pages.ts:12 and the five call sites above.
Proof
Tests per call site: 404, 503 then 200, abort. Fast gates green.
Links
Split from #457.
Why
Split from #457 (several pull requests). The engine has one HTTP loader,
cluster/pages.ts:12checked(one retry on a network error or 5xx, an EngineError naming the URL), yet five places fetch on their own with other policies (architect, 2026-09-25): no retry, plain Errors, no abort signal.To do
checkedgainsoptional(a 404 answers null) andcredentials;gpu/page/pages.ts:183httpPageSource,host/prepared/images.ts:29,lighting/importedLights.ts:36,physics/tiles.ts:52andphysics/tilePlace.ts:49call it; the physics tiles take the model's abort signal.Code context
cluster/pages.ts:12and the five call sites above.Proof
Tests per call site: 404, 503 then 200, abort. Fast gates green.
Links
Split from #457.