# Zone soak summary from logs/evidence/M1-04C/metrics.json (generated by tools/zone-soak-report.py) run: 1000 bots over WebSocket on loopback against the in-process zone server: stepped ramp 100 -> 250 -> 500 -> 1000 (30 s a step: connects over the first half, holds the second), then a 600 s hold (bandwidth per bot and memory drift are measured over the hold), then a 1000 close each harness: 1000 bots, steps [100, 250, 500, 1000] x 30 s, hold 600 s, run 720.917 s, 4 bot workers, 4 snapshot workers, fieldSpawnPermille 500 machine: macos aarch64, 8 cores; load average (1/5/15 min) t=0s 358.28 410.79 340.55; t=60s 374.48 405.76 343.44; t=120s 377.78 401.32 346.04; t=180s 334.99 385.52 343.94; t=240s 276.61 359.46 337.02; t=300s 252.82 337.54 330.35; t=360s 211.67 310.52 320.74; t=420s 200.89 289.79 312.31; t=480s 246.58 283.21 308.11; t=540s 318.26 295.28 310.82; t=600s 312.69 300.47 311.86; t=660s 228.61 279.46 303.29; t=720s 251.60 273.62 299.28; t=721s 251.60 273.62 299.28 Card criteria (M1-04 / M1-04C): PASS 1,000 bots connected through the hold: joined 1000/1000, fewest connected in a hold second 1000 PASS no disconnects: 0 disconnects, 0 connect errors, 1000 clean closes at the end FAIL server loop p99 <= 15.0 ms (whole run, ramp + hold, 12497 loops): p50 17.8 p99 1685.838 max 1685.838 ms; over target 7577 loops, dropped ticks 1754 hold 1 s windows: p99 median 82.22, p95 398.81, max 1685.84 ms; 601 of 601 windows had a loop over target on-CPU: tick thread per loop mean 4.509 p99 20.04 ms; snapshot workers summed mean 7.858 p99 11.13 ms PASS avg downstream <= 12 KB/s/client (hold): mean 2.42 p95 8.26 max 8.44 KB/s PASS every client <= 32 KB/s hard cap (crowded town incl.): max 8.44 KB/s PASS memory flat within ±5% over the hold: drift -4.274% (slope -1274.26 KiB/min, mean 291 MiB, first minute 298.2 -> last minute 292.5 MiB, -1.911%) info RTT ping->pong: p50 42.408 p99 682.987 max 3732.963 ms over 633547 pongs All harness checks: allJoined PASS, noDisconnects PASS, avgDownstreamWithinTarget PASS, everyClientWithinHardCap PASS, missedTicksUnder1Percent PASS, memoryFlatWithinDrift PASS, loopP99WithinTarget FAIL, noStaleOrDroppedInputs PASS, framesSkippedUnder1Percent PASS, ticksDroppedUnder1Percent FAIL, noSnapshotErrors PASS, noThreadsLeft PASS Overall: FAIL Reading (M1-04C worker): the loop p99 miss and the dropped ticks are machine load, not the zone. The 1-minute load average was 201-378 on 8 cores for the whole run (25-47 runnable threads per core: other projects' clang builds, ffmpeg, Chrome, Claude), so the tick thread often waited for a core: loop p50 17.8 ms wall against tick-thread CPU 4.51 ms mean per loop and snapshot workers 7.86 ms summed (on-CPU work ~12 ms spread over 4 threads); the same build held p99 12.1 ms at load 14-100 in M1-04B. Budgets are unchanged. Bots, bandwidth and memory pass: 1,000/1,000 connected through the 10-minute hold, 0 disconnects, 2.42 KB/s mean down, RSS drift -4.27 % (shrinking; macOS memory pressure from the same load), within the ±5 % limit. Re-run `pnpm zone:bots -- --steps 100,250,500,1000 --step-s 30 --hold-s 600` when the load average is near or below the core count.