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

Condition-switch fusion — the xmodal drift statistic replaces the staleness clock

c-csi-ble-condition-switch · exp-csi-crowd

Archive snapshot, as of 18 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
9ZX4WVKR 2026-07-05T22:56 finished 6 1 Condition-switch fusion: a regime, not the crown. The disagreement-weighted switch trends below the tau=16s clock on the bursty arm at sparse cadence (all 3 seed diffs <=0; bootstrap CI [-0.26,-0.001] persons, fragile at n=3) but LOSES to the clock at dense cadence on both arms (up to +0.34 vs best-tau) because the disagreement statistic is symmetric — it cannot tell a stale anchor from a wrong CSI estimate. Burstiness manipulation verified (0.89 vs 0.53). Design consequence: the deployable architecture is clock-GATED freshness + condition-MODULATED staleness (hybrid), and IP-106 should log both the cross-modal statistic and anchor age. Criteria 3/5 (C3 borderline-fail, C4 fail); critic severity medium, verdict upheld.
DWPRTN1C 2026-07-05T22:41 finished 0 Partial (budget-sealed): both dynamics arms authored + schema-validated; the 6-run RT grid + fusion_condition_switch reduction (criteria 1–4) are handed to a CI follow-on.

Brief

Question

The c-csi-ble-fusion staleness-switch is THE robust fusion architecture (tracks the lower envelope of {BLE-held, CSI} across all cadences) — but its weight is a clock (w = exp(-t/tau), tau hand-tuned to 16 s, flagged as an overfit risk). It distrusts a still-valid anchor during quiet plateaus and trusts a stale one right after a burst. c-ble-drift-trigger just showed the cross-modal CSI/BLE disagreement is an online statistic that tracks prediction-relevant drift (ρ=0.93, quiet on irrelevant change). Close the loop: does weighting the anchor by observed disagreement instead of elapsed time match a tuned clock without tuning — and beat it where occupancy dynamics are bursty, i.e. where elapsed time is a bad proxy for change?

Why now — the thread this closes

This is the designed follow-on from both parents: the fusion campaign ended with "tau hand-tuned (overfit risk)" and the trigger campaign ended with "replace the clock weight with the drift statistic — condition-based, not time-based". The condition switch is also the concrete consumer of the IP-106 recommendation to log the cross-modal statistic per BLE calibration campaign: if it works in-silico, the hardware capture validates a complete sensing policy, not just a metric.

What the supervisor does

  1. Author two occupancy-dynamics scenarios on resplan-12439-floor-0 (device layout csi-link-resplan-12439-multiroom) as walk-notebook from_floor casts using plain wave/legs arrival windows — do NOT use kind: agendas/fsms (the GHCR walk-notebook image may predate the IP-107 engine). smooth: arrivals and departures spread evenly over the window (roughly constant change rate). bursty: 2–3 tight arrival/departure waves with quiet plateaus between (same total agent count and a comparable occupancy range as smooth — the arms must differ in dynamics, not headcount). Validate both via sim_scenario_validate (with the floor bundle) before any launch.
  2. Fan out exp-csi-crowd over {smooth, bursty} × seeds {0,1,2} (6 coupled runs, ble.enabled, Doppler NOT enabled — the CV feature here is the rolling std over coarse frames, matching the parent fusion reductions).
  3. Run fusion_condition_switch.py (runner python) over all 6 runs' links.parquet
    • trajectory.parquet. Operator note: if the notebook container cannot read the run parquet from the Hetzner S3 endpoint (known runner limitation), download the artefacts to the workspace and run the reduction standalone, then upload fusion_condition_switch{.parquet,_sensitivity.parquet,.metrics.json} + fig_fusion_condition_switch.png to the session artefacts/.
  4. Synthesise per the success criteria; run the campaign-critic before closing; report per-seed numbers, no averaging away variance.

Figure render request

fusion_condition_switch — per-arm MAE vs BLE cadence (log-x): BLE-held, CSI-adapted, clock switch (tau=16 s) with error bars, condition switch with error bars, oracle envelope dotted; burstiness of each arm annotated in the panel title.

Out of scope

  • Learned fusion heads / Kalman-style filters — the affine + exponential-weight family is deliberate (interpretable, calibration-window-only parameters); a filter comparison is a follow-on once the condition mechanism is settled.
  • Layout drift during a run — the trigger campaign covered environment drift; here the environment is static and only occupancy dynamics vary. Composing both (drift + bursty occupancy) is the eventual field condition but confounds the first test.
  • Band contrast / Doppler — single band, quasi-static CV, matching the parent reductions for comparability.

Expected interpretation

  1. Condition ≤ clock on bursty, ≈ on smooth, within 0.1 of best-tau everywhere → the switch no longer needs a deployment-tuned time constant; the IP-106 capture validates the complete condition-based policy. Strengthens the Hybrid-Fusion chain.
  2. Condition ≈ clock everywhere → disagreement adds nothing over elapsed time at these dynamics — an honest negative that keeps the simpler clock and downgrades the condition-switch idea to "only needed under environment drift".
  3. Condition < clock only at extreme sparsity → the payoff is confined to low-BLE-availability regimes; report the crossover cadence as the design number.
  4. Burstiness manipulation fails criterion 1 → scenario-authoring finding on wave casts; fix the cast before interpreting fusion numbers.