Question
Living hypothesis: feature-type-not-modality (chosen / supported in-silico — promoted 2026-07-05 from this campaign's sessions).
The 2026-07-04 research synthesis collapsed seven cross-environment contradictions into one axis (Hypothesis 6): it is the fingerprint spatial map — not the RF modality — that breaks when furniture moves, while kinematic features (multipath-change speed, amplitude variance) track body dynamics and transfer. BLE Can See: A Reinforcement Learning Approach for RF-based Indoor Occupancy Detection ↗ says RF schemes don't generalise across rooms; Understanding and Modeling of WiFi Signal Based Human Activity Recognition ↗ says CARM's speed features do; Towards Environment Independent Device Free Human Activity Recognition ↗ claims full cross-domain transfer. If H6 is right, all three are correct — about different feature types. This campaign is the controlled in-silico test that no paper in the vault runs: same floor, same crowd, same channel — only the furniture moves — three feature families in one paired comparison.
Why this design isolates the axis
c-csi-layout-drift measured that a calibrated estimator drifts with furniture displacement (two threshold scalars, static placements). This campaign asks the sharper question the synthesis put on the table: which feature family drifts. The coupled chain (c-csi-ble-fusion validated it end-to-end, ≈44 s/run local CPU) produces, from ONE solved channel per frame, both the CSI tensor and a co-registered BLE-RSSI stream — so fingerprint-vs-kinematic AND CSI-vs-BLE are disentangled within a single run, something no cross-paper comparison can do. Re-using the identical walk seed across states makes the comparison paired: any MAE movement is the furniture, nothing else.
csi-fingerprint— per-link absolute mean-amplitude vector → ridge count map. The spatial-map feature class. H6: breaks.ble-fingerprint— per-link BLE-RSSI vector → ridge count map. billah2021's feature class on the other modality. H6: breaks the same way.csi-kinematic— intra-frame fading CV (Doppler sub-frames) + temporal amplitude variance, link-averaged → affine count map. The CARM feature class. H6: transfers.
Furniture-state schedule (operator convention)
Per-state scene_overrides.furniture comes from displacement_schedule seeded by
furniture_from_occupiables (this floor's 16 occupiables, cm→m converted):
n_states: 4, step_m: 0.35, displacement seed 0 (session 2 swept seeds 0–2). The
SAME walk seed is used in every state — only the furniture moves. Heavy-furnishing
arm (validated in session 1 batch 2): size_m: [1.2, 0.8], height_m: 1.8,
alternating wood/metal.
What the supervisor does
- Build the furnished-floor-state schedule: seed
furniture_from_occupiableswith the floor's 16 seats, evolve viadisplacement_schedule(n_states=4, step_m=0.35, seed=0)→ states at Δlayout = 0, 0.35, 0.70, 1.05 m. Inject each state'sfurniturelist via the run config'sscene_overrides.furniture. - Fan out
exp-csi-crowdonce per state (identical walk seed and device layout — only the furniture moves),where=local, 2.4 GHz single band. 4 coupled runs. - Run the notebook-backed reduction (
csi_feature_type_transfer.py, runnerpython): fit the three families on state 0, evaluate on held-out frames of every state, emittransfer_curve.parquet+ the verdict metrics + the figure. - Synthesise the feature-type split with the in-silico framing; recommend the real-testbed D2xx follow-up parameters (which feature families to instrument).
Analysis-writer responsibilities
- Confirm per-state artefact integrity (
links.parquet+ble_links.parquet+trajectory.parquet, no NaN/Inf) viasim_read_run; citesim://URIs. - Report the three-family transfer curve, the per-family degradation, and the kinematic/fingerprint degradation ratio against the 0.5 criterion.
- State plainly which of the three H6 outcomes obtained (feature-type split / modality split / uniform collapse) and what it does to Hypothesis 6's standing — in-silico support or refutation only; the D2xx real-room protocol remains the field test.
Figure render request
csi_feature_type_transfer — count MAE vs furniture displacement Δlayout, one curve per
feature family (fingerprints warm/dashed, kinematic green/solid).
Out of scope
- Cross-room transfer (different geometry) — that is c-csi-cross-geometry-resplan; here the geometry is fixed and only furniture moves, isolating H6's mechanism.
- Hardware impairments / sim-to-real — c-csi-impairment-sim-to-real / IP-106.
- Domain-adversarial adaptation of the BLE fingerprint (H6 next-step 2) — needs the
python-mlrunner; follow-on once the mechanism is shown. - Answering H1 (LOS-strength crossover N)* — real-testbed AX210/FeitCSI experiment; this campaign only sharpens which features it should instrument.
Expected interpretation
- Feature-type split (both fingerprints climb, kinematic flat, ratio < 0.5) → Hypothesis 6 supported in-silico: the generalisation contradiction axis is feature type. Upgrades H6 toward the real-room D2xx test and tells the testbed to log kinematic features as the drift-robust channel.
- Modality split (CSI families pattern together against BLE) → H6 refuted in-silico; the billah2021 resolution is signal richness, not feature class — reshapes the BLE-augmentation argument chain.
- Uniform collapse (all three degrade together) → the displacement schedule
perturbs the channel beyond any feature's invariance; halve
step_mand re-run before concluding. - Chain fails (missing
ble_links.parquet, NaN) → platform finding on the coupled furniture-injection path (first exp-csi-crowd +scene_overrides.furniturecomposition).
Operator notes
- First composition of
scene_overrides.furniture(IP-101, previously exercised onexp-csi-staticonly) with the coupledexp-csi-crowdchain — the scene builder is shared (_build_static_scenereadsscene['furniture']in both modes), but treat run 1 as the plumbing gate. - Furniture boxes sit at seat positions (0.6 m wood boxes, 0.8 m high) — displaced seats may drift out of their rooms at Δlayout = 1.05 m; that is fine (they are scatterers, not walk targets — the walk leg uses the unmoved occupiables).
- ≈44 s per coupled run on the M1 CPU; 4 runs + reduction well under the budget.