M0-11C2
One-simulation spike part C2: the zoen-sim static lib inside the Unity Web build; golden vectors pass in the browser
Evidence
From logs/evidence/M0-11C2/. Click a thumbnail for the full image.
Images (2)
Logs and data (7)
web-sim-sim-default.txt · 1 kB · open
# http://localhost:4350/ (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36)
ZOEN_BOOT {"product":"Zoen","version":"0.1.0","unity":"6000.3.25f1","platform":"WebGLPlayer","graphicsApi":"OpenGLES3","graphicsVersion":"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))","gpu":"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)","device":"Chrome 155.0.0.0","os":"MacOS 10.15.7","systemMemoryMb":109,"screenWidth":960,"screenHeight":600,"tier":"Mid","tiers":["Low","Mid"],"tierRequest":"","tierRefused":"","tierSource":"PlatformDefault","capKey":"web","cycle":["Low","Mid"],"ultraGate":"none","benchmark":"off","deviceMemoryGb":16.0,"logicalCores":8,"displayHz":60.0,"fpsTarget":30,"targetFrameRate":30,"vSyncCount":0}
ZOEN_SIM {"platform":"WebGLPlayer","abi":1,"loaded":true,"scenario":"walk_eight_directions","finalHash":"bb46012ea5aaaebf","expectedHash":"bb46012ea5aaaebf","match":true,"scenarios":4,"ticks":60,"allMatch":true,"bench":[{"actors":1,"inputsPerTick":1,"medianNsPerTick":100,"samples":11,"ticksPerSample":20000},{"actors":5000,"inputsPerTick":5000,"medianNsPerTick":212500,"samples":11,"ticksPerSample":40}]}
# console errors: 0
web-sim-sim-low-end.txt · 1 kB · open
# http://localhost:4350/ (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36)
ZOEN_BOOT {"product":"Zoen","version":"0.1.0","unity":"6000.3.25f1","platform":"WebGLPlayer","graphicsApi":"OpenGLES3","graphicsVersion":"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))","gpu":"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)","device":"Chrome 155.0.0.0","os":"MacOS 10.15.7","systemMemoryMb":109,"screenWidth":960,"screenHeight":600,"tier":"Low","tiers":["Low","Mid"],"tierRequest":"","tierRefused":"","tierSource":"WebLowEnd","capKey":"web","cycle":["Low","Mid"],"ultraGate":"none","benchmark":"off","deviceMemoryGb":2.0,"logicalCores":8,"displayHz":60.0,"fpsTarget":30,"targetFrameRate":30,"vSyncCount":0}
ZOEN_SIM {"platform":"WebGLPlayer","abi":1,"loaded":true,"scenario":"walk_eight_directions","finalHash":"bb46012ea5aaaebf","expectedHash":"bb46012ea5aaaebf","match":true,"scenarios":4,"ticks":60,"allMatch":true,"bench":[{"actors":1,"inputsPerTick":1,"medianNsPerTick":70,"samples":11,"ticksPerSample":20000},{"actors":5000,"inputsPerTick":5000,"medianNsPerTick":160000,"samples":11,"ticksPerSample":40}]}
# console errors: 0
web-sim-sim-low.txt · 1 kB · open
# http://localhost:4350/?tier=low (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36)
ZOEN_BOOT {"product":"Zoen","version":"0.1.0","unity":"6000.3.25f1","platform":"WebGLPlayer","graphicsApi":"OpenGLES3","graphicsVersion":"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))","gpu":"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)","device":"Chrome 155.0.0.0","os":"MacOS 10.15.7","systemMemoryMb":109,"screenWidth":960,"screenHeight":600,"tier":"Low","tiers":["Low","Mid"],"tierRequest":"low","tierRefused":"","tierSource":"Launch","capKey":"web","cycle":["Low","Mid"],"ultraGate":"none","benchmark":"off","deviceMemoryGb":16.0,"logicalCores":8,"displayHz":60.0,"fpsTarget":30,"targetFrameRate":30,"vSyncCount":0}
ZOEN_SIM {"platform":"WebGLPlayer","abi":1,"loaded":true,"scenario":"walk_eight_directions","finalHash":"bb46012ea5aaaebf","expectedHash":"bb46012ea5aaaebf","match":true,"scenarios":4,"ticks":60,"allMatch":true,"bench":[{"actors":1,"inputsPerTick":1,"medianNsPerTick":100,"samples":11,"ticksPerSample":20000},{"actors":5000,"inputsPerTick":5000,"medianNsPerTick":214997.5,"samples":11,"ticksPerSample":40}]}
# console errors: 0
web-sim-sim-ultra-refused.txt · 1 kB · open
# http://localhost:4350/?tier=ultra (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36)
ZOEN_BOOT {"product":"Zoen","version":"0.1.0","unity":"6000.3.25f1","platform":"WebGLPlayer","graphicsApi":"OpenGLES3","graphicsVersion":"OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))","gpu":"ANGLE (Apple, ANGLE Metal Renderer: Apple M3, Unspecified Version)","device":"Chrome 155.0.0.0","os":"MacOS 10.15.7","systemMemoryMb":109,"screenWidth":960,"screenHeight":600,"tier":"Mid","tiers":["Low","Mid"],"tierRequest":"ultra","tierRefused":"ultra","tierSource":"PlatformDefault","capKey":"web","cycle":["Low","Mid"],"ultraGate":"none","benchmark":"off","deviceMemoryGb":16.0,"logicalCores":8,"displayHz":60.0,"fpsTarget":30,"targetFrameRate":30,"vSyncCount":0}
ZOEN_SIM {"platform":"WebGLPlayer","abi":1,"loaded":true,"scenario":"walk_eight_directions","finalHash":"bb46012ea5aaaebf","expectedHash":"bb46012ea5aaaebf","match":true,"scenarios":4,"ticks":60,"allMatch":true,"bench":[{"actors":1,"inputsPerTick":1,"medianNsPerTick":100,"samples":11,"ticksPerSample":20000},{"actors":5000,"inputsPerTick":5000,"medianNsPerTick":212500,"samples":11,"ticksPerSample":40}]}
# console errors: 0
plugin-web.json · 3 kB · open
{
"what": "zoen-sim C ABI static library for the Unity Web player (wasm32-unknown-emscripten, M0-11C)",
"finished": "2026-10-10T20:20:01.474Z",
"rustc": "rustc 1.99.0 (b940084d7 2026-09-28); LLVM version: 23.1.1",
"target": "wasm32-unknown-emscripten",
"emscripten": {
"path": "~/Unity/Hub/Editor/6000.3.25f1/PlaybackEngines/WebGLSupport/BuildTools/Emscripten",
"version": "3.1.39-git",
"clang": "clang version 17.0.0 (https://github-com-cache.bf.unity3d.com/Unity-Technologies/llvm-project 7c3f21cd3094c188678906d0459cda3b715e1963)",
"bundledWith": "Unity 6000.3.25f1"
},
"rustflags": "-C panic=abort",
"profile": "plugin (release, lto, codegen-units 1) as staticlib only",
"route": "stable rustc object files (LLVM 23) link with the bundled wasm-ld (LLVM 17); target_features names the bundled tools do not know are dropped (implied by the listed ones)",
"droppedFeatureNames": [
"bulk-memory-opt",
"call-indirect-overlong"
],
"features": [
"bulk-memory",
"exception-handling",
"multivalue",
"mutable-globals",
"nontrapping-fptoint",
"reference-types",
"sign-ext"
],
"members": 270,
"exports": [
"zoen_sim_abi_version",
"zoen_sim_create",
"zoen_sim_destroy",
"zoen_sim_push_inputs",
"zoen_sim_read_actors",
"zoen_sim_read_events",
"zoen_sim_spawn",
"zoen_sim_state",
"zoen_sim_step"
],
"cSmokeLinkFlags": [
…web-build-size.json · 897 B · open
{
"task": "M0-11C2",
"reference": {
"summary": "logs/test-output/unity/20261008-154205-build-web.json",
"sizeBytes": 11762776,
"defines": [
"ZOEN_GM"
]
},
"current": {
"summary": "logs/test-output/unity/20261011-042721-build-web.json",
"sizeBytes": 11800723,
"defines": [
"ZOEN_GM",
"ZOEN_SIM_STATIC"
],
"files": {
"Web.data.br": 3899665,
"Web.framework.js.br": 76419,
"Web.loader.js": 26983,
"Web.wasm.br": 7778203
}
},
"deltaBytes": 37947,
"deltaPercent": 0.32,
"staticLibBytes": 3662566,
"note": "Delta of the whole Web build (Brotli files on disk) against the 2026-10-08 build; it also holds every client change since then (SimBootCheck, sky, GM panel). The 3.66 MB archive is not shipped as such: the linker keeps only the reachable zoen-sim code, so the wasm grows by tens of KB, not MB."
}
web-smoke-sim.json · 49 kB · open
{
"label": "sim",
"finished": "2026-10-10T20:36:49.966Z",
"gmSend": null,
"gmOff": false,
"simExpect": true,
"sim": {
"platform": "WebGLPlayer",
"abi": 1,
"loaded": true,
"scenario": "walk_eight_directions",
"finalHash": "bb46012ea5aaaebf",
"expectedHash": "bb46012ea5aaaebf",
"match": true,
"scenarios": 4,
"ticks": 60,
"allMatch": true,
"bench": [
{
"actors": 1,
"inputsPerTick": 1,
"medianNsPerTick": 100,
"samples": 11,
"ticksPerSample": 20000
},
{
"actors": 5000,
"inputsPerTick": 5000,
"medianNsPerTick": 212500,
"samples": 11,
"ticksPerSample": 40
}
]
},
"graphicsApi": "OpenGLES3",
"graphicsVersion": "OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))",
"consoleErrors": 0,
"consoleWarnings": 105,
"checkFailures": 0,
"pass": true,
…Tests
$ node tools/sim/build-plugin.mjs web --out logs/evidence/M0-11C2/plugin-web.json$ node tools/unity-run.mjs editmode$ node tools/unity-run.mjs setup$ node tools/unity-run.mjs editmode$ node tools/unity/web-smoke.mjs --sim --label sim --out logs/evidence/M0-11C2$ node tools/unity-run.mjs build web$ node tools/unity/web-smoke.mjs --sim --label sim --out logs/evidence/M0-11C2$ pnpm --filter @zoen/wiki exec playwright test --only-changedNotes
2026-10-10 20:38 UTC · Done. SimPluginImport.cs: WebPlugin Assets/Zoen/Plugins/WebGL/libzoen_sim_ffi.a + ApplyWeb (OnlyPlayer WebGL, editor off; Android and all other players off) in OnPreprocessAsset and Ensure; the first import wrote a default .meta (asset imported before the postprocessor compiled), so unity-run setup (Ensure) wrote the WebGL-only .meta (scene regen churn reverted). Build.cs: PlayerDefines(target, cmd, webSimLibrary) adds ZOEN_SIM_STATIC to WebGL only when the .a exists; ZoenSimNative.cs header updated. EditMode 79/79 (+WebPluginImportsForTheWebPlayerOnly, +OnlyTheWebBuildGetsTheStaticSimDefine: Android/macOS never get the define, the .a is not Android-compatible). Web build defines ZOEN_GM,ZOEN_SIM_STATIC, 11,800,723 B (+37,947 B, +0.32% vs 20261008-154205; includes all client changes since then). First web-smoke --sim failed: 1-mover bench 0 ns/tick (Chrome clamps performance.now ~100 us without cross-origin isolation; 200 ticks too short). Fix: SimBootCheck times 20,000 ticks (1 mover) / 40 ticks (5,000) per sample on UNITY_WEBGL player only. Rebuild + web-smoke --sim pass, 4 cases, headless Chrome 155: finalHash bb46012ea5aaaebf, allMatch 4 scenarios, 0 console errors (105 warnings: Unity AudioContext/persistentDataPath/getInternalformatParameter baseline), median 70-100 ns/tick 1 mover, 160-215 us/tick 5,000 movers (timer-quantized). web-smoke.mjs serves the build itself on :4350 and closed it (port free after). tools/unity/web-smoke.mjs --sim (sim-expect.mjs), UNITY_TOOLKIT.md updated. Evidence logs/evidence/M0-11C2/: plugin-web.json, web-smoke-sim.json, web-sim-sim-<case>.txt, web-sim-default.png, web-sim-low.png, web-build-size.json. Next M0-11D.


