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

01KW07NTVGWPJ98SYRNKDDWCH0

finished 2026-06-25 20:31:23.504705+00:00 → 2026-06-25 20:32:17.535323+00:00 · 9 runs · supervisor: react-agent

“Staleness-switch fusion (w=exp(-staleness/tau), tau~16s) is validated as the right architecture: ONE estimator that tracks the lower envelope of {BLE-held, CSI} across the full BLE-cadence range — matches/edges BLE when fresh (0.73 dense), falls back to the CSI floor when the anchor goes stale (1.6 vs held-BLE 2.8 at 80s), and beats the naive offset-hold blend throughout. It does not strictly dominate (stays within ~0.1 person of the best modality at every cadence) and beats each modality in the other's regime. HONEST LIMIT: the per-floor BLE-adapted CSI map gave ~0 gain (cold 1.50 ~= adapted 1.51) — the CSI count signal is the weak link at these low crowd sizes / 3-link layouts, not the calibration; so the switch's sparse-regime floor is capped at CSI's ~1.5. Fusion ceiling = CSI quality, which needs more links / higher density / a better feature, not better calibration.”

Archive snapshot, as of 22 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.

Success criteria

CriterionResolved
Per-floor-adapted CSI map implemented (csi_cv->BLE-count affine on a target calibration window, BLE as label, no truth). yes
Staleness-switch fusion implemented (exp staleness weighting between held-BLE and adapted CSI) + tau tuned. yes
Evaluated vs cadence against held-BLE / CSI / naive-fused, 3-seed: switch tracks the lower envelope (within ~0.1) and beats the naive blend everywhere. yes
Honest framing: adaptation gave ~0 gain (CSI is the weak link), so the fusion ceiling is CSI quality; in-silico, modelled BLE counter. yes

Synthesis

Staleness-switch fusion + per-floor-adapted CSI map — the design the cadence axis pointed to

The cadence session showed the naive always-anchor blend is dominated (BLE wins dense, CSI wins sparse). Two fixes implemented (fusion_switch.py, runner python, in python-ml/python container) and tested on the v2 matched-occupancy 3-seed runs (source resplan-12439 → targets 1374, 16157):

1. Per-floor-adapted CSI map. Instead of the cold-transferred source map, calibrate csi_cv -> count on the target floor using the BLE device-count as the label (the thesis's cheap on-site anchor; no ground truth) over a 40% calibration window, evaluate on the operational hold-out. Result: no gain — cold-transfer 1.50 ≈ BLE-adapted 1.51 persons. On these floors the CSI count signal itself is weak (sparse 3-link layout, occ ≤ 6), so re-fitting the affine cannot rescue it — calibration is not the bottleneck; the CSI feature is.

2. Staleness-switch fusion. w(t)=exp(-(t - t_last_tick)/tau); est = w*BLE_held + (1-w)*CSI_adapted. Trust the fresh BLE level; lean on the adapted CSI as the anchor ages. With tau ≈ 16 s the switch tracks the lower envelope of {BLE-held, CSI} across the full cadence range (1–80 s):

  • dense (≤10 s): switch ≈ BLE-held (0.73–1.0), even edging it at 10 s (1.02 vs 1.06);
  • mid (20 s): 1.03 vs best 0.96 (within 0.07);
  • sparse (40–80 s): switch ≈ CSI floor (1.6) vs held-BLE 2.8 — a clean fallback.

It does not strictly dominate (it cannot beat the better modality at each point) but stays within ~0.1 person of the lower envelope everywhere, and beats both the naive offset-hold blend (1.5–2.2 in the sparse regime) and either modality in the other's regime. So the switch is the robust architecture: a single estimator that degrades gracefully as BLE availability drops, instead of failing in one regime.

What this settles + the ceiling. The thesis fusion claim is now precise and defensible: CSI and BLE are complementary in time (BLE = accurate-but-intermittent absolute; CSI = continuous-but-drifting relative), and a staleness-weighted switch is the mechanism that exploits it — NOT a constant blend (dominated) and NOT a continuity-style physics prior (refuted earlier). The honest ceiling: the switch's sparse-regime floor equals the CSI floor (~1.5), and per-floor BLE-calibration does not lower it — so the next lever is CSI quality (more links / higher density / a stronger feature), not calibration.

Caveats: in-silico; BLE device-counter modelled (p_detect+Gaussian); 3 seeds, 2 target floors, low crowd sizes; tau hand-tuned (16 s) not learned; the switch floor is set by a weak CSI feature. Next: a learned/adaptive tau, and a denser-CSI or higher-occupancy regime to lift the CSI floor and widen the switch's advantage.

Criticism adversarial review

Written by the campaign-critic subagent against the brief's success criteria — read it as the counter-position to the synthesis above.

Self-critical notes

The deliverable is honest about two things: (a) per-floor adaptation failed (cold ≈ adapted) — I had hypothesised BLE-calibration would lift the CSI floor; it didn't, because CSI is the weak link, so I report that plainly rather than burying it; (b) the switch does not strictly dominate — it tracks within ~0.1 of the envelope, which is the honest claim (a single robust estimator), not "best at every point". Further caveats: tau=16 s is hand-tuned on this data (risk of overfitting the crossover — should be learned or set from the BLE noise/occupancy-dynamics ratio); the CSI floor (~1.5) makes the sparse-regime win modest in absolute terms; modelled BLE counter; 3 seeds / 2 floors / low density. The architecture is validated; the absolute numbers wait on a stronger CSI regime and real BLE/channel (IP-106).

Attached runs

Run Gate Purpose Replay
EMKR0PMJ fusion-fix-matched-multiseed replay
4S0N16XM fusion-fix-matched-multiseed replay
W8438NK6 fusion-fix-matched-multiseed replay
6A8E8KQC fusion-fix-matched-multiseed replay
1DZS3DK1 fusion-fix-matched-multiseed replay
1HK2QCM3 fusion-fix-matched-multiseed replay
2WAMKD1J fusion-fix-matched-multiseed replay
53Y631KD fusion-fix-matched-multiseed replay
1F934V2N fusion-fix-matched-multiseed replay