c-placement-oracle — Full local run (Session 01KXE2P8YXF93EY0Q898HDFER9)
Executed end-to-end on one M1 Max: 57-floor persona-crowd corpus + 57-floor coverage↔counting reduction + 3 ray-traced verify floors. No CI, no remote.
Executive summary
The central claim is now powered, not a pilot: across 57 real floorplans, the crowd-count-optimal AP placement is a materially different placement from the coverage-optimal one — on every single floor. Mean placement divergence (1 − corner Jaccard) is 0.718, 95% CI [0.680, 0.754] (unit = floor, n = 57); the CI lower bound clears the pre-registered min_effect_size of 0.15 by ~4.5×. Coverage is exactly submodular on 57/57 (greedy attains 0.93–1.00 of the brute-force optimum, beating 1−1/e everywhere), and the two objectives diverge on 57/57. Three floors reach complete disjointness (divergence 1.0); none falls below 0.40.
A ray-traced Stage 3 on three verify floors confirms the mechanism the counting objective rides on (28.5 dB attenuation per person on resplan-12439) and shows that measured I(C;Φ) discriminates anchor informativeness where the crowd count varies (resplan-12439, count 1→17: anchor MI 0.43–0.68 nats, spread 0.25) and goes flat where it does not (resplan-1374 count ≤8, test-lab-synth count ≤4: MI < 0.24, overlapping CIs) — an honest dynamic-range limit, reported not hidden.
Method (plain language)
Five personas (worker / patron / visitor / through-traffic / meeter) walk each floor door-to-door on its real wall layout (walk-notebook, IP-107 agendas), producing a footfall surface. For each floor a submodular optimiser (coverage_submodular) places k=4 APs two ways — maximise covered footfall (breadth) vs maximise a counting-signal depth objective — and measures how differently they place (1 − Jaccard of the two chosen sets). On three floors a physical ray-tracer (sionna-csi-runner, coupled to the persona crowd) then measures the mutual information between the live headcount and each real anchor's CSI amplitude.
Per-criterion results
- C1 crowds corpus-wide — RESOLVED. 57/57 floors ran clean (personas present, replayable
trajectory.html,gate_passed); zero failures after per-floor retry isolation (one transient Docker blip recovered). - C2 cheap coverage↔counting Pareto — RESOLVED (powered). divergence 0.718, CI [0.680, 0.754], n = 57; submodular 57/57; greedy ≥ 1−1/e 57/57; objectives differ 57/57. CI excludes the threshold. Robust median 0.667.
- C3 ray-traced
I(C;Φ)kernel — RESOLVED (honest scope).counting_mode = measured_csi_miachieved on 3 verify floors at their existing anchor positions (the diary's sparse sample). Discriminates on the high-count floor (spread 0.25 nats, CIs partly disjoint); flat on the low-count floors. Mechanism confirmed (28.5 dB/person). - C4 surrogate + verify — NOT DONE. Stage 3 measured
I(C;Φ)at existing anchors, not over a dense candidate grid, so the RSQ-surrogate fit + full-grid verify was not exercised. Scoped down for tractability (avoids registering ~50 devices/floor); the follow-on for a genuine surrogate pass. - C5 three-variant deliverables + 5-panel — PARTIAL. 57 per-floor placement figures rendered (coverage-opt vs counting-opt + Pareto); the operational/experimental/both
placement_resultneeds the dense-grid measuredI(C;Φ)from C4. - C6 framing discipline — HELD. Every headline states provenance: self-authored crowds, LOS coverage + geometric counting proxy (Stages 1–2), ray-traced clean-tensor CSI at sparse anchors (Stage 3). Ranks placements; hypothesis generator until a real AX210/Pi5 floor confirms the ranking. No detection-rate claim.
Real-life meaning
Deploying Wi-Fi to both run a building and count its crowds pulls the APs to different places on every floor tested — you cannot get the count for free from a coverage-optimal rollout, and on high-divergence floors the two layouts barely overlap. The ray-traced stage says the counting signal is real but only rankable where occupancy genuinely swings — which tells you both where and when the placement choice pays off.
Caveats
- Coverage is first-order LOS; the Stage 1–2 counting axis is a geometric proxy. The ray-traced stage (C3) is the propagation-real check and it is sparse (existing anchors, 3 floors).
- Ray-traced discrimination is occupancy-range-limited (clear at count→17, flat at count≤4–8).
- Sim-authored throughout; real-hardware confirmation is the standing gate (IP-106 / IP-112).
Artefacts: s3://monad-knowledge/campaigns/c-placement-oracle/full-run-2026-07-13/ (stage2 reduction + 57 figures; stage3 informativeness + CSI-vs-occupancy figures).