c-csi-ble-condition-switch — completion session (runs + reduction over the sealed session's casts)
Verdict
The condition switch earns a regime, not the crown — and the loss is architectural. Weighting the held BLE anchor by observed cross-modal disagreement (w = exp(-max(0, d−d0)/κ), d0/κ from the calibration window, no time constant) trends below the τ=16 s clock switch exactly where c-ble-drift-trigger predicted — bursty occupancy dynamics at sparse anchor cadence (≥25 s: 1.21 vs 1.32 persons mean; per-seed diffs −0.26 / −0.00 / −0.08, all ≤ 0; seed-bootstrap CI [−0.26, −0.001]) — but loses to the clock at dense cadence on both arms (vs the best-τ clock from the sensitivity sweep: +0.17 to +0.34 persons at cadences ≤ 6 s; it beats the best-τ clock only at ≥51 s on the bursty arm, −0.13/−0.08). Honesty on the win: n=3 seeds with per-cadence SDs (0.32–0.43) larger than the 0.11 mean gap — the direction is consistent across seeds but the magnitude is not established; this is expected-interpretation #3 (payoff confined to low-BLE-availability regimes, crossover ≈ 25–50 s cadence), not a general win.
The mechanism reading (interpretation, not measured)
The disagreement statistic is symmetric: d = |csi_adapted − ble_held| rises when the anchor goes stale and when the CSI estimate is wrong. At dense cadence the anchor is nearly always fresh, yet CSI noise keeps d above d0, so the condition switch blends in the worse modality — while the clock gets freshness for free (anchor age is directly observable in deployment; the dense-cadence clock is numerically ≡ BLE-held, confirming it holds w≈1 there). The κ sensitivity is consistent, and is itself mild evidence against aggressive switching: wider tolerance monotonically wins (κ×2 → 1.236, κ×1 → 1.276, κ×0.5 → 1.338 mean MAE). We did not emit per-frame d/d0/switch-fraction traces, so this reading is inference from the aggregate tables, flagged as such.
Design consequence for the Hybrid-Fusion chapter: the deployable architecture is a hybrid — clock-gated freshness (trust a fresh anchor unconditionally) with condition-modulated staleness (let disagreement steer only once the anchor is old enough that staleness dominates the statistic). That composition is a designed follow-on, not this session's claim. The IP-106 capture recommendation is refined accordingly: log the cross-modal statistic AND the anchor-age clock — the hybrid needs both.
Criteria
- C1 ✓ (one clause partial, disclosed). All 6 coupled runs gate-passed with
links+ble_links+ carriedtrajectory; burstiness verified: 0.893 (bursty) vs 0.526 (smooth), separation 0.367 ≥ 0.15. The occupancy-range comparability clause is partial: means match (4.2–4.6 persons both arms) but peaks differ (smooth 7–9 vs bursty 5–6 — smooth's overlapping windows stack arrivals). - C2 ✓. Both parquets with all five estimators per (arm, seed, cadence).
- C3 ✗ (borderline). Bursty half passes. Smooth sparse parity misses the ≤0.1 clause by 0.0007 (Δ=0.1007) and the miss is driven entirely by the 103 s extreme (Δ=0.27, where BLE-held itself degrades to 2.9); at 26/51 s smooth is at parity (Δ=0.03/−0.00). Booked false per the letter of the criterion, read as parity-except-the-extreme.
- C4 ✗. The condition switch is not within 0.1 of the best-τ clock at every cadence — the dense-cadence architectural loss (verified directly from
fusion_condition_switch_sensitivity.parquetin this session: max Δ 0.34 at smooth 1.3 s). - C5 ✓. In-silico, modelled BLE device-counter (p_detect 0.9, σ 0.8), self-authored crowd; no strength changes to ble-periodic-calibration / recalibration-trigger-from-drift.
Corpus + provenance (and one disclosed deviation)
Two-session campaign: 01KWT73W0A0B0FVC40DWPRTN1C (CI, budget-sealed) authored and schema-validated the casts; this completion session ran them. Deviation from the sealed design, deliberate and load-bearing: the sealed casts put all arrival windows in the first 300 of 3600 units, which would have confined the arms' dynamics to the calibration window and left the evaluation window flat on both arms. Windows were respread across the full duration (identical 3×5-agent group structure, dwell 900, headcount 15 ≤ 16 seats on both arms; only window width differs: smooth [0,1000]/[800,1800]/[1600,2600] vs bursty [0,30]/[1200,1230]/[2400,2430]). This is a post-hoc design choice made before any fusion numbers were computed. Empirical timing: 133 RT frames over 170 s (1.29 s/frame); cadence axis 1.3–103 s. Additional scope caveats from the critic: the 6 cells were run with --where local rebuilds and carry non-identical simulator digests (a frozen-image rerun would remove that confound); both spot-checked runs carry a walkable_qc_warning (0.5 m² of sub-40 cm channels) whose jam risk loads most on bursty egress. Oracle envelope sits at 0.91 (bursty sparse) / 1.12 (smooth sparse) — both switches leave ~0.3–0.4 persons on the table.
Artefacts
fusion_condition_switch.parquet, fusion_condition_switch_sensitivity.parquet, fusion_condition_switch.metrics.json, fig_fusion_condition_switch.png under this session's artefacts/; 6 runs attached; casts recorded in the sealed session's synthesis and this session's run configs.