M0-05E
Chunked probe lines on Android, APK probe record
Evidence
From logs/evidence/M0-05E/. Click a thumbnail for the full image.
Logs and data (1)
apk-logcat-probe-parts.txt · 3 kB · open
M0-05E android-apk probe (rebuilt APK, 2026-10-08, nubia NX709S): adb logcat -d -v brief -s Unity:I, ZOEN_ lines only.
The probe arrives as ZOEN_PROBE_PART i/n lines of at most 800 bytes of message each (no stack trace); probe-contract.mjs
joins them by number into logs/evidence/M0-05C/probe-android-apk.json (the device-probes data test re-joins these lines).
I/Unity (22392): ZOEN_BOOT {"product":"Zoen","version":"0.1.0","unity":"6000.3.25f1","platform":"Android","graphicsApi":"Vulkan","graphicsVersion":"Vulkan 1.1.0 [512.615.0 (0x80267000)]","gpu":"Adreno (TM) 730","device":"nubia NX709S","os":"Android OS 13 / API-33 (TKQ1.221013.002/eng.nubia.20241207.182340)","systemMemoryMb":17028,"screenWidth":2400,"screenHeight":1080,"tier":"Mid","tiers":["Low","Mid","High","Ultra"],"tierRequest":"","tierRefused":"","tierSource":"BenchmarkCached","capKey":"android","cycle":["Low","Mid","High"],"ultraGate":"closed","benchmark":"cached","deviceMemoryGb":0.0,"logicalCores":0,"displayHz":60.0,"fpsTarget":30,"targetFrameRate":30,"vSyncCount":0}
I/Unity (22392): ZOEN_PROBE_PART 1/2 {"schema":1,"platform":"Android","unity":"6000.3.25f1","device":{"model":"nubia NX709S","type":"Handheld","mobile":true,"os":"Android OS 13 / API-33 (TKQ1.221013.002/eng.nubia.20241207.182340)","osFamily":"Other","cpu":"ARM64 FP ASIMD AES","cores":8,"cpuMhz":6374,"memoryMb":17028,"soc":"SM8475"},"gpu":{"name":"Adreno (TM) 730","vendor":"Qualcomm","vendorId":20803,"deviceId":117637122,"api":"Vulkan","version":"Vulkan 1.1.0 [512.615.0 (0x80267000)]","memoryMb":17284,"shaderLevel":50,"multiThreaded":true,"maxTextureSize":16384,"maxCubemapSize":16384,"renderTargets":8,"compute":true,"instancing":true,"asyncCompute":false,"asyncReadback":true,"rayTracing":false,"msaaMax":4,"msaaTextures":1,"reversedZ":true,"hiddenSurfaceRemoval":true,"pipeline":"UniversalRenderPipelineAsset"
I/Unity (22392): ZOEN_PROBE_PART 2/2 ,"srpBatcher":false},"textures":{"astc":true,"astcHdr":true,"etc2":true,"etc":true,"dxt":true,"bc45":true,"bc6h":true,"bc7":true},"renderTargets":{"hdr":true,"argbHalf":true,"argbFloat":true,"rgb111110":true,"argb2101010":true,"rHalf":true,"rgHalf":true,"r8":true,"depth":true,"shadowmap":true},"display":{"width":2400,"height":1080,"screenWidth":2400,"screenHeight":1080,"dpi":480,"hz":60,"maxHz":120,"hdrOutput":false},"thermal":{"source":"android","status":0,"headroom":0.571},"web":null,"class":{"formFactor":"native-phone","gpuFamily":"adreno","gpuName":"Adreno (TM) 730","apiFamily":"vulkan","apiVersion":"1.1","textureFamily":"astc","textureFamilies":["astc","bc","etc2"],"memoryGb":18,"memorySource":"system-rounded"}}
I/Unity (22392): ZOEN_GM panel=on buttons=15
I/Unity (22392): ZOEN_SKY phase=day clock=13:24 weather=clear (auto) speed=x1 tier=Mid particles=0 none fog=0.0098
Tests
$ node --test packages/game-data/tests/device-probes.test.mjs$ node --test packages/game-data/tests/device-probes.test.mjs$ node tools/unity/probe-contract.mjs logs/evidence/M0-05C/probe-macos-app.json logs/evidence/M0-05C/probe-mac-chrome.json logs/evidence/M0-05C/probe-phone-chrome.json logs/evidence/M0-05C/probe-android-apk.json$ node --test packages/game-data/tests/device-probes.test.mjs$ pnpm --filter @zoen/wiki exec playwright test --only-changedNotes
2026-10-08 09:00 UTC · Done. Core: ProbeReport.PartTag ZOEN_PROBE_PART + AndroidLineBytes 800; ProbeJson.Lines(json,maxLineBytes) (single ZOEN_PROBE line when it fits, else ZOEN_PROBE_PART i/n chunks within the UTF-8 budget; never splits a surrogate pair, never cuts next to whitespace unless a longer whitespace run forces it) and ProbeJson.Join (first single line or first part set by number; FormatException 'missing ZOEN_PROBE_PART i/n' on a gap; a second set never fills a gap). 5 xunit tests (round trip with logcat prefix/CRLF/reverse order, exact boundary, budgets 32..1100 incl. two-digit part counts, multibyte + long whitespace run, missing part): core 135/135 (M0-05E-01). CapabilityProbe.LogOnce: Android logs the parts with LogOption.NoStacktrace; macOS/Web keep the one line (decision). EditMode 65/65 (02). probe-contract.mjs: probeJsonFromLines/probeFromLines join parts + hasProbe; probe.mjs runApk waits on hasProbe. reference-devices.json probe: partLine, androidLineBytes 800, partNote. Android rebuilt PASS 135 s (03). probe.mjs android-apk PASS (06): 2 parts (800 + 746 B message), native-phone Adreno 730 Vulkan 1.1, 18 GB system-rounded, astc/bc/etc2, maxHz 120, thermal 0 headroom 0.571, Mid BenchmarkCached; recorded in ownerTestDevices[owner_android].probes (33 facts, measured 2026-10-08, task M0-05E, evidence logs/evidence/M0-05C/probe-android-apk.json, validatesLowReference false); ownerResults all four measured; summary logs/evidence/M0-05C/probe-summary.txt has four columns. probe-contract re-check 4/4 PASS (07). device-probes test: new parts fixture test (missing-part error, M0-05D cut line is never a probe) and test 7 requires all four targets and re-joins logs/evidence/M0-05E/apk-logcat-probe-parts.txt to the recorded probe (08). verify --changed green (09-15), data 177/177; docs lint + data re-run after docs (16, 17). Docs: UNITY_TOOLKIT.md log lines, PERFORMANCE.md probe paragraph, CHANGELOG, CONTINUE_HERE (next M0-07).
