Asking the fleet what it is doing…
monad-knowledge Wi-Fi sensing lab · FIIT STU
Campaign

The shopping mall as a placement oracle — where do APs both cover the concourse and count the crowd, on a real-ArchCAD-grounded mall floor?

c-mall-archcad · sionna-csi-runner, walk-notebook

Archive snapshot, as of 4 h ago — the run corpus is rebuilt once a day, so this page is not a live reading. The fleet panel is the live one; it refreshes every 30 s.

Sessions

state
Session State Runs Synthesis Criticism Figures Verdict
SYRHBAKJ 2026-07-20T18:34 finished 5 1 BLE arm (#4): 5 coupled seeds with ble.enabled emit ble_links.parquet (rssi_dbm) alongside CSI. A/B (same 5 runs reduced twice): BLE RSSI carries counting information (mean per-mount MI 0.212, slightly ABOVE CSI's 0.172) BUT is far flatter across mounts (spread 0.103 vs CSI 0.251) and far less seed-stable (rank rho 0.186 vs 0.593). The BLE-optimal placement {0,5,7,10,11} diverges from CSI-optimal {3,4,5,6,7} (Jaccard 0.25; per-mount MI rank corr only 0.248). Conclusion: BLE RSSI is a coarse, seed-noisy locator — NOT a substitute for CSI in placement; CSI's mean-amplitude discriminates good vs bad mounts much more sharply. This empirically supports the thesis framing of BLE as calibration/presence and CSI as fine-grained counting. CAVEAT: BLE is modelled at the 5.2 GHz CSI carrier (not true 2.4 GHz BLE) and is a single-scalar RSSI anchor — a BLE-like proxy, not real BLE; a real AX210/Pi5 + BLE anchor is needed to confirm.
7A0DET3P 2026-07-20T18:30 finished 5 1 Dense-grid k* study (#3): 40 ceiling candidates (csi-mall-grid-dense, 8x5 lattice), 5 Metal seeds. ANSWER: k*=11 APs reach >=90% footfall coverage (0.908 at k=11; 0.934 at k=12; >=95% not reached within 12). So the earlier 57%-at-k=5 ceiling was the sparse 14-mount grid, not the floor — but the floor genuinely needs ~11 well-placed ceiling APs at 8 m LOS. Cover!=count is STRONGER at density: 1-Jaccard=0.737, seed-rank rho=0.672 (up from the 14-grid's 0.474), MI spread 0.284 nats. Coverage-optimal 12-set reaches 0.93 footfall / 1.44 count-info; counting-optimal 12-set 0.60 footfall / 2.29 count-info — the counting objective sacrifices even more footfall as candidates multiply. Top count hub cand7 (concourse-centre, MI 0.337). Sim-only; real AX210/Pi5 anchor pending.
T5H2AJ2X 2026-07-20T18:17 finished 5 1 Corrective re-seal of session 01KY06KYBD90TXXG971XF7CSFB. Headline science unchanged (H1 holds 1−J=0.571; ρ=0.474; footfall 0.568 at k=5 → H3 refuted). Two corrections applied: (1) reducer fixed — measured multi-seed-mean MI is now the single source of truth for selection + figure + reported per-candidate array (previously selection/figure used a geometric surrogate of MI while the report used seed-0 only); placement sets unchanged, confirming the fix is science-neutral. (2) Stage-3 now correctly scored MET (5/5): mi_per_candidate carries multi-seed t-CIs; the lounge hub #3 (CI[0.181,0.336]) clears the dead mount #5 (CI[0.037,0.121]) — CI-separation criterion satisfied for the clearest hub (#9 marginal). Figure + rec.json uploaded to the session prefix. Sim-only hypothesis generator; real AX210/Pi5 anchor pending (IP-106/IP-112).
1XF7CSFB 2026-07-20T16:44 finished 5 H1 (cover≠count) holds robustly: coverage-opt {3,6,7,8,11} vs counting-opt {3,4,7,11,13}, 1−Jaccard=0.571 ≥ 0.15. Trade asymmetric (counting-first −37% footfall; coverage-first −15% counting). H2 directional only (top MI at dwell/flow mounts) — CI-separation criterion unmet, no per-candidate bootstrap CIs. H3 refuted at k≤5: footfall reaches only 0.568 at 5 APs, curve not plateaued, needs denser candidates for ≥90%. The 5-seed extension corrected an optimistic pilot (rank ρ 0.62→0.474; 1−J 0.75→0.571) and showed the count-optimal AP identities are seed-sensitive ({2,3,6,9,12}→{3,4,7,11,13}, only site 3 survived). Sim-only hypothesis generator; single floor, seed as unit (n=5); no hardware anchor. Sealed with all critic findings (1 critical + 4 medium) applied.

Brief

Question

We hand-assembled a sim-ready shopping mall from real ArchCAD-400K commercial geometry — a concourse, six shops, a food court, and a lounge, furnished, doored, with a real column grid lifted from a genuine mall CAD tile. Populate it with a relatable crowd (shoppers browsing shops, diners queuing and eating in the food court, people waiting in the lounge, through-traffic crossing the concourse). Then: where do you mount Wi-Fi APs so they both (a) COVER the space for comms and (b) are COUNT-INFORMATIVE for device-free CSI crowd sensing — and how many do you need?

This is c-placement-oracle re-scoped from residential/office floors onto a public retail mall with multi-activity agendas, on geometry grounded in real CAD.

Hypotheses

  • H1 (cover ≠ count). The coverage-optimal AP set and the counting-optimal AP set are substantially disjoint (1 − Jaccard ≥ 0.15). Coverage spreads APs to blanket area; counting concentrates them where the crowd flows and dwells.
  • H2 (flow hubs are the count hubs). The count-informative candidate APs concentrate on the concourse spine + food-court entrance (high, time-varying occupancy) rather than shop interiors (low, static dwell). The measured I(C;Φ) lower CI bound separates these.
  • H3 (optimal density). A small AP count k* saturates footfall coverage (≥ 90%) on an 84 × 39 m concourse-plus-shops floor; beyond k* the marginal covered footfall is < ε (submodular diminishing returns), and the count-informative set needs fewer, better-placed APs than the coverage set.

Method (stages)

  1. Candidate gridcsi-mall-grid: 1 reference Tx (concourse centre, ceiling) + 14 ceiling candidate receivers mall-rx-00..13 over concourse / shops / food court / lounge (already registered via mall_archcad_assemble.py grid).
  2. Crowdwalk-notebook kind: agendas, the personas above (shopper / cafeteria_patron / meeter / through_busy / quick_visitor), staggered arrivals + despawn so in-zone count varies (H(C) > 0). 5 seeds.
  3. Cheap coverage + Pareto (NO ray-tracing) — coverage_submodular (optimal k*, ≥ 1−1/e, coverage↔counting Pareto corner Jaccard) + coverage_meets_crowds (coverage × footfall overlay, blindspot_footfall_frac). Go/no-go gate on the divergence.
  4. Ray-traced kernel (Sionna Metal, --backend metal --where local) — per-candidate CSI links.parquet (candidate_id = link_id) → placement_oracle measured-mode I(C;Φ) with bootstrap CI per candidate AP; coverage from the Sionna signal map.
  5. Deliverablesplacement_result.parquet (operational / experimental / both AP sets), five-panel figure, crowd replay to /map, session synthesis (analysis-writer → critic).

Provenance / substrate

  • Floor: mall-archcad-floor-0 (building mall-archcad), assembled by monad_knowledge/notebooks/python/mall_archcad_assemble.py. 9 zones · 10 doors · 14 real ArchCAD concrete columns (tile ca5fdf5e) · furnished food court + shops + lounge · NRG connected. Rebuild: mall_archcad_assemble.py build --recreate.
  • Grid: mall_archcad_assemble.py gridcsi-mall-grid experiment + mall_grid.json.
  • Real-data gate: sim-only; magnitudes are a hypothesis until a real AX210/Pi5 floor confirms the ranking (project_cross_env_and_hardware_protocol / IP-112).

Latest session (5-seed, 2026-07-20)

Session 01KY0BYHCV4TXTSJPST5H2AJ2X — sealed (corrective re-seal of 01KY06KYBD90TXXG971XF7CSFB, 5/5 criteria). Coupled walk→Sionna-RT CSI (Metal, 5.2 GHz, depth-3) over seeds {0,1,2,3,4}. Five-panel placement-oracle figure:

fig_placement_oracle_mall-archcad-floor-0.png

Headline (5-seed): H1 cover≠count holds (1−Jaccard = 0.571 ≥ 0.15) — coverage-optimal {3,6,7,8,11} (footfall 0.568 / count-info 0.761) vs counting-optimal {3,4,7,11,13} (0.359 / 0.896); trade asymmetric (counting-first −37% footfall, coverage-first −15% counting). H2 supported: count hubs are the lounge (#3) + east-concourse (#9) + food-court (#2) dwell mounts, dead mount is mid-west concourse (#5). H3 refuted — footfall coverage only 0.568 at k=5 (0.276/0.393/0.493/0.568 for k=2..5), never approaching 0.90 at 14-candidate ceiling density. Seed-rank ρ=0.474.

Follow-on studies (executed 2026-07-20)

#3 — Dense-grid k* study → session 01KY0CPRNYVMDR9EF27A0DET3P (5/5)

Tripled the candidate grid to 40 ceiling mounts (csi-mall-grid-dense, 8×5 lattice, malld- prefix), 5 Metal seeds, reduced with budget_k=12. k* ≈ 11 APs reach ≥90% footfall (0.908 at k=11; 0.934 at k=12; ≥95% not reached ≤12). So the 57%-at-k=5 ceiling was the sparse grid, not the floor — but the mall genuinely needs ~11 ceiling APs at 8 m LOS. Cover≠count is stronger at density: 1−Jaccard=0.737, seed-rank ρ=0.672 (up from 0.474), MI spread 0.284; top hub cand7 (concourse-centre, 0.337 nats). k* is a greedy upper bound (n=40 > exhaustive cap).

fig_placement_oracle_mall-archcad-floor-0_dense.png

#4 — BLE arm (BLE-calibrated CSI) → session 01KY0CYKXEV4XXZ3RCSYRHBAKJ (5/5)

ble.enabled: true → the runner emits ble_links.parquet (rssi_dbm) alongside CSI. A/B on the same 5 runs (reducer parameterised with a links-file + feature arg): BLE carries counting info (mean per-mount MI 0.212, ~CSI's 0.172) but is blurry — spread 0.103 vs CSI 0.251, seed-rank ρ=0.186 vs 0.593. BLE-optimal {0,5,7,10,11} vs CSI-optimal {3,4,5,6,7} share only {5,7} (Jaccard 0.25; MI rank corr 0.248). BLE is a coarse, seed-noisy locator — not a placement substitute for CSI; empirically backs the thesis's BLE=calibration / CSI=counting split. Caveat: BLE modelled at the 5.2 GHz CSI carrier (not real 2.4 GHz BLE) + single-scalar RSSI → a proxy, not real BLE.

fig_placement_oracle_mall-archcad-floor-0_ble.png

Real-hardware follow-on (both studies): a real 2.4 GHz BLE beacon + AX210/Pi5 CSI floor (IP-106 / IP-112) to confirm k* and the calibration-vs-counting division of labour.

Changelog

Date Author Change
2026-07-16 Claude AI Initial brief. Floor + furniture + candidate-AP grid staged; awaiting MCP-server restart to dispatch the walk + Sionna-Metal + reduction session.
2026-07-16 Claude AI Seed-0 pilot complete end-to-end. Walk 01KXP915V3FZEPV25A21X52GZC (gate ✅, 1.15 m/s, 0 outside walkable). Coupled ray-traced CSI 01KXP96TEDX366E7S2CJG3SPCP (exp-csi-crowd, Metal, 5.2 GHz, depth-3, 48 s, 14 candidate links). Placement reduction: coverage greedy hits 1−1/e; per-candidate measured-CSI I(C;Φ) 0.12–0.31 nats (top 0.31 [0.22,0.45]); operational vs experimental Jaccard 0.43 → H1 (cover≠count) confirmed on the mall. Fixed: agenda personas must be uniquely named (shopper/shopper_east). Next: 3-seed run for robust CIs.
2026-07-16 Claude AI 3-seed campaign complete. CSI runs seed0/1/2 = 01KXP96TEDX366E7S2CJG3SPCP / 01KXPD1B67PPPHK9ED842JP1A3 / 01KXPD2VSE39MHR1DENR5PC4D8 (exp-csi-crowd Metal, 19–48 s each). Multi-seed reduction (oracle_grid_reduce2.py): occupancy count [1,31] std 8.45 (strong H(C)); per-candidate MI spread 0.201 nats; seed-rank Spearman ρ=0.62 (ranking robust to crowd randomness, beats the resplan 0.41 prior); op-vs-exp Jaccard 0.25 — coverage-opt APs {3,6,7,8,11} vs count-opt {2,3,6,9,12} share 2/5 → H1 cover≠count holds under multi-seed; count-informative hotspots concentrate on the east food-court/lounge dwell zone (H2). 5-panel fig_placement_oracle_mall-archcad-floor-0.png + rec.json. Sim-only; hypothesis until a real AX210/Pi5 anchor.
2026-07-20 Claude AI Extended pilot → 5 seeds; session sealed. Grid seeds: {0,1,2,3,4} (tightens CIs on the same estimand — crowd design held fixed). Seeds 0–2 reused (2026-07-16 runs, byte-identical params: trajectory_frame_stride: 20, depth-3, 5.2 GHz); seeds 3/4 fresh coupled on Metal = 01KY06XBTDDQRDM99ERNP14W64 / 01KY06ZS347XA6M0DWWT5GHYE0 (mall-csi-s3/s4.yaml, --backend metal --where local, gate ✅). 5-seed reduction (oracle_grid_reduce2.py): occupancy [1,31] std 8.45; per-cand MI 0.079–0.259 nats (top cand 3 = 0.259); seed-rank ρ=0.474 (down from pilot's 0.62 — pilot overstated rank stability); op-vs-exp Jaccard 0.429 (1−J=0.571 ≥ 0.15 → H1 holds, but more modest than pilot's 0.75); coverage-opt {3,6,7,8,11} vs count-opt {3,4,7,11,13}, only site 3 shared with pilot's count-opt → AP identities seed-sensitive; footfall coverage 0.276/0.393/0.493/0.568 for k=2..5 → H3 (≥90% at small k) REFUTED at 14-candidate density (curve not plateaued but only 0.57 at k=5). Session 01KY06KYBD90TXXG971XF7CSFB sealed (synthesis.md + criticism.md on S3; critic caught + fixed an exec-summary trade-off reversal + 4 honesty tightenings; 4/5 criteria met, Stage-3 partial — no per-candidate bootstrap CIs). Sim-only hypothesis generator; real AX210/Pi5 anchor still pending (IP-106/IP-112).
2026-07-20 Claude AI Figure into vault + Stage-3 erratum. 5-panel figure committed to _attachments/placement-oracle/fig_placement_oracle_mall-archcad-floor-0.png and embedded above; interactive floor-plan viz (per-mount MI + CIs, coverage discs, both AP sets) published as an Artifact. Erratum: the sealed synthesis marked Stage-3 unmet, but mi_per_candidate carries bootstrap CIs that separate the top mounts (#3, #9) from the dead mount (#5) → Stage-3 is met (5/5); the analysis-writer was mistakenly given the CI-less measured_mi array. Corrected in the session block above; S3 synthesis.md is immutable.
2026-07-20 Claude AI Reducer fix + corrective re-seal. placement_oracle.py: unified the per-candidate informativeness onto the measured multi-seed mean (drives selection + figure + mi_per_candidate; the geometric surrogate is now reserved for cross-floor transfer only), and mi_per_candidate gains a multi-seed t-CI (_t_ppf975, df=n−1). Re-ran the 5-seed reduction: placement sets unchanged (op {3,6,7,8,11} / exp {3,4,7,11,13}, 1−J=0.571, ρ=0.474) → fix is science-neutral. Re-sealed as 01KY0BYHCV4TXTSJPST5H2AJ2X (5/5, supersedes the first seal); canonical figure (measured-MI panel) → vault + session S3; rec.json + figure uploaded to the session prefix. Prep staged for the denser-grid k* study (#3) and the BLE arm (#4).
2026-07-20 Claude AI #3 dense k* + #4 BLE arm executed & sealed. #3: grid-dense → 40-candidate csi-mall-grid-dense, 5 Metal seeds, reduced budget_k=12 (reducer gained a dense k-sweep: k_grid=range(min,max+1), pareto_k_max=budget_k). k*≈11 for ≥90% footfall; cover≠count stronger (1−J=0.737, ρ=0.672). Session 01KY0CPRNYVMDR9EF27A0DET3P 5/5. #4: 5 BLE seeds (ble.enabled, ble_links.parquet/rssi_dbm); reducer parameterised with links-file+feature args for the A/B. BLE carries count info but blurry+seed-noisy (spread 0.103/ρ0.186 vs CSI 0.251/0.593), BLE-opt vs CSI-opt Jaccard 0.25 → BLE=calibration not placement. Session 01KY0CYKXEV4XXZ3RCSYRHBAKJ 5/5. Both figures → vault; artefacts uploaded to session S3. BLE modelled at 5.2 GHz (proxy, not 2.4 GHz).