Question
How fast does an occupancy estimator calibrated on one furnished floor state degrade as the furniture moves? The drift curve $(T^{*}, \epsilon)$ — the operational answer to RQ4 — does not exist even in silico. The real curve needs multi-day capture; the simulator can produce its shape and so design that capture instead of guessing it.
IP-101 Phase 2 adds the scene-evolution sweep: an ordered sequence of furnished floor
states (furniture as static scatterers, IP-092 occupiables), the channel simulator on
each, a pluggable OccupancyEstimator calibrated on state 0 and evaluated on the rest,
emitting drift_curve.parquet.
What we already know
- A model calibrated on one multipath environment drifts when the scatterer geometry changes; furniture rearrangement is the dominant indoor non-occupancy change.
- The magnitude is geometry-dependent (IP-094 flagged a ×3.8 vs ×7.7 band gap on ResPlan), which is exactly why a closed-form bound would mislead and we keep it empirical (IP-101 Alternative 3).
- Two estimators bound the truth (IP-101 Q2=C): the analytic
variance-thresholdfloor (ships now, no thesis-pipeline dependency) and the thesis occupancy model (the realistic curve, joins as a thirdthesis-modelseries once importable). Plotting both separates physical drift (shared) from model brittleness (estimator-specific).
What I want the supervisor to do
- Build the furnished-floor-state schedule over the floor's IP-092 occupiables
(
displacement_schedule, IP-101): state 0 = calibration layout, states 1..k displace the furniture by a growingdelta_layout. Inject each state'sfurniturelist into that run's stagedscene.json. - Fan out
exp-csi-staticonce per state (same scene + link, only the furniture moves), local CPU first (where=local). >=4 states; more if the curve has not plateaued. - Run the notebook-backed reduction (
csi_layout_drift.py, runnerpython): fit each estimator on state 0'slinks.parquet, evaluate on every state, emitdrift_curve.parquet(+ figure +csi_layout_drift.metrics.jsonwith theT*(ε)cadence recommendation). - Synthesise the cadence recommendation as a design input for the real library campaign.
Analysis-writer responsibilities
- Confirm each state's scalar floor +
links.parquetviasim_read_run; confirm thedrift_curve.parquetcarries both estimators. - Report the drift curve(s), the
T*(ε)cadence, and (if the thesis model ran) the physical-drift vs model-brittleness split. Cite per-run artefacts bysim://URI. - State plainly: this is a design input, the sim parameters (furniture schedule,
any impairment profile) are unvalidated, and
recalibration-trigger-from-driftstays plausible until real data lands (IP-101 Q3=A).
Figure render request
csi_layout_drift — occupancy error vs furniture displacement for each estimator, with the
ε budget line and the implied T* marked.
Out of scope
- Answering RQ4 / measuring the real drift curve — that needs real multi-day capture; this is strictly the synthetic design prior.
- Occupancy-pattern (temporal) drift — furniture only here; seasonal/time-of-day drift is a Future Consideration (IP-101).
- Hardware impairments — that is c-csi-impairment-sim-to-real (compose later if needed).
Expected interpretation
- All criteria met → "Occupancy error stays within ε up to a furniture displacement of T*≈X m; beyond that recalibrate. The real capture should sample rearrangement events at that cadence." A design input for the library campaign — RQ4 still pending real data.
- Analytic floor drifts immediately → the calibration is fragile even to small rearrangements; tightens the cadence recommendation (still a design signal, not RQ4).
- Criterion fails (no furnished floor, NaN) → platform/dependency finding (gated on IP-092 furnished floors landing, per IP-101 §Trade-offs).
Operator notes
- Gated on IP-092 furnished floors / occupiables — the
c-fiit-find-a-seatcampaign shows occupiables landing. If the target floor has none yet, the supervisor can stand in a small synthetic furniture set to exercise the pipeline (clearly marked as a plumbing run). - One run per state at fixed occupancy — minutes on the M1 CPU. Furniture are static
scatterers inserted once into the cached scene per run (IP-101 runner
_write_box_ply).