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

Does furniture change where the crowd goes — the movement-side of the furnished floor?

c-furniture-walkability · walk-notebook

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.

Sessions

No sessions yet — this campaign has a brief but no execution.

Brief

Question

Every walk campaign in this project so far — c-coverage-meets-crowds, c-placement-oracle, c-crowd-motion-mix — routed its crowd through empty geometry: JuPedSim saw walls and doors, never a desk or a shelf. The footfall demand surface those campaigns produced, and that the placement oracle then used to rank counting-optimal APs, is furniture-blind. IP-113 and the theme-aware placer now put a real furniture catalogue into resplan-2605 as obstacle cell_spaces. So ask the foundational movement question directly, on the one floor that can answer it: does furniture change where the crowd goes — does forcing agents to route around desks, tables and shelves reshape the footfall surface, and by how much?

Framing discipline. Self-authored through-traffic crowd on ONE procedurally furnished ResPlan floor (the only floor currently carrying obstacle furniture). RANKS how much furniture matters to the footfall demand surface; a demand-side design diagnostic, not a measured occupancy trace, and not yet cross-floor. The radio-side companion (does furniture reshape the CSI the crowd generates) is the already-run scene-diversity arm of c-operanet-sim2real-fingerprint and Arc-A1 c-furniture-csi-sensitivity. No hardware claim.

Why now — the furniture unlock, and the blind spot it exposes

Furniture is finally in a floor as obstacles: live PostGIS carries 35 obstacle cell_spaces on resplan-2605 (procedural theme-aware placer, arrangement layer computed-resplan-2605-floor-0). And the downstream campaigns already assume a footfall surface computed without it — c-placement-oracle ranks counting-optimal APs against a persona footfall surface; if furniture moves that surface, the oracle's placements move with it. c-coverage-estimator-factorial declared a {furniture: on/off} axis but never isolated it. This campaign is that isolation, at the demand-surface level, on the floor that has the obstacles.

Substrate reality (from the 2026-07-14 scoping pass). Only resplan-2605 carries obstacle furniture. The other "furnished" floors (resplan-12439/12419/16157/7421) carry occupiable seats only — and seats are goals, not obstacles, so their furnished and empty walkable areas are identical by construction (verified: resplan-12439 -> 0.00% walkable change). They are excluded: running them would manufacture a guaranteed TV distance of 0, not a finding. Generalising beyond one floor requires the placer run to emit obstacle furniture on more geometry — the natural follow-on.

The formal object

Two staged geometries of resplan-2605 that differ ONLY in furniture — include_furniture ∈ {true, false} — and the same east→west through-traffic crowd (14 agents, paired by seed). The estimand: TV(F_furnished, F_empty), the total-variation distance between the two seed-paired, area-normalised footfall heatmaps. Zero ⇒ the 6.9% walkable pinch is decorative to room-scale flow; large ⇒ the demand surface every downstream campaign uses is materially wrong when computed empty.

What the supervisor does — walk-notebook only (cheap)

  1. Furnished-bundle gate — already verified (execution log below). The include_furniture: false arm re-stages the same floor with obstacles stripped, goals kept.
  2. Paired A/B walk (sim-runner fan-out, ~6 s/run) — through-traffic groups, seeds {0..9}, both furniture arms = 20 runs. Honour walkable QC; a wedged/jammed furnished run is a geometry finding, reported and dropped. Bounded-influence footfall estimator (c-coverage-estimator-factorial) wired in from run 1.
  3. Footfall redistribution (furniture_walkability.py, pure numpy over the trajectory parquets) — seed-paired TV distance + bootstrap CI + the signed difference map.
  4. Seat reachability (secondary) — a small seek_and_occupy/seat arm (3 seats), furnished vs empty; report reached-seat count. Descriptive only (weak at 3 seats).
  5. Synthesise + replay — the furnished-vs-empty footfall overlay + delta map, the reachability note, and a /map/ replay of agents routing around furniture on resplan-2605 (analysis-writer under the sim-storytelling-contract).

Figure render request

furniture_walkability — (a) furnished×empty through-traffic footfall overlay + the signed delta map; (b) the seed-paired TV-distance point + bootstrap CI against min_effect_size; (c) a small reached-seat furnished-vs-empty bar.

Out of scope

  • Cross-floor generalisation — one floor has obstacle furniture today. Emitting obstacle furniture on more ResPlan floors via the theme-aware placer, then re-running, is the follow-on that turns this into a cross-geometry claim (the c-csi-cross-geometry-scaleout pattern).
  • Arrangement swap — resplan-2605 has a single FURNITURE layer (computed-resplan-2605-floor-0); the "does which layout matter" arm needs a SECOND arrangement authored via the placer first (the arrangement: param is already wired for it, this session). Optional follow-on, not a launch criterion.
  • A strong FIIT-blocker reachability claim — 3 seats on resplan-2605 is too few; that needs a densely-seated obstacle floor. fiit-library-floor-0 is the known geometry blocker (fiit-library-floor-not-sim-ready); it is the motivation for the reachability probe, not a result here.
  • Radio / CSI — the movement side only; the coupled furnished CSI/placement re-run is Arc B1.

Expected interpretation

  1. TV distance CI clears 0.10 → furniture reshapes the demand surface; the empty-floor footfall the placement oracle used is biased on furnished floors, and the furnished placement re-run (Arc B1) plus the placer-on-more-floors follow-on are warranted.
  2. TV distance ≈ 0 → the 6.9% walkable pinch does not move a room-scale through-crowd; downstream empty-floor footfall surfaces are safe at this catalogue density, and the expensive furnished CSI/placement re-runs deprioritise.
  3. Furnished run fails walkable QC → the placer over-blocks navigation; a placer/geometry finding that generalises the FIIT 0/80 pattern.

Risks / honest limits

  • Single floor — the obstacle-furniture substrate exists on exactly one floor; no cross-geometry claim until the placer emits obstacles on more floors. Stated up front.
  • Furniture footprint fidelity — box footprints at standing height; low/under-desk clearance approximated as solid (conservative, over-blocks).
  • Self-authored crowd — a through-traffic persona, not measured trajectories; ranks furniture's effect on a generative demand surface, consistent with the sim programme (campaign-rigor-audit).
  • Weak reachability arm — 3 seats; directional only.

Execution log — Stage-0 verified + staging wired (2026-07-14)

Ran locally against live PostGIS (pure read + a bounded staging-code change; no pipeline):

  • Furniture-as-obstacle is wired for the walker. gis.export.floor_structure_bundle emits obstacles from cell_type='obstacle' furniture filtered by active IP-113 FURNITURE arrangement layers; sim.floorgeom.walkable_from_floor subtracts them (walkable = envelope − buffer(walls) − obstacles; occupiable seats are goals, kept).
  • Measured manipulation. resplan-2605 active furniture (35 obstacles) → walkable 364.25 → 339.03 m² (−6.92%) at agent_clearance_cm=2.0. Seat-only resplan-12439 (0 obstacles) → 0.00% — confirming the seat-only floors are null and excluded.
  • Empty + swap arms wired this session. stage_floor_bundle now threads arrangement (IP-113 layer select) and include_furniture (False ⇒ drop obstacles, keep goals) from the resolved config; ParamsSchema declares both (defaults preserve prior behaviour; extra="forbid" still holds). Files: monad_knowledge/sim/runtime/scene_stage.py, monad_knowledge/sim/walk_notebook/schema.py.

Smoke + reduction (2026-07-14)

  • Reduction authored + selftest-validated. monad_knowledge/notebooks/python/furniture_walkability.py (monad-free, IP-087): seed-paired TV distance between area-normalised footfall heatmaps, paired bootstrap CI, signed delta map + overlay + TV/CI figures. --selftest (planted furnished-detour vs empty-straight) recovers TV 0.48, clears the 0.10 threshold. Single-run config: sim/walk_notebook/config/furniture-walkability-resplan2605.yaml.
  • End-to-end smoke PASSED — and exposed a jam. Two walk-notebook runs on resplan-2605, seed 0, furnished (01KXEVTBXTYJWJSS426ZJ5B9Z8: 35 obstacles, gate_passed, 7.4 s) vs empty (01KXEVTVKY42K89539FEKGXP0V: 0 obstacles, gate_passed, 6.5 s). The include_furniture toggle drives obstacles 35↔0 exactly as wired. But the furnished through-crowd JAMMED at a pinch point (~x=6 m doorway): furnished trajectory 22 079 frames vs empty 4 035, and the top-3 agents held 50.7% of furnished footfall (one agent 17.5%) vs empty's near-uniform 28%. Raw-footfall TV = 0.85 was a jam artefact, not rerouting.
  • Reduction hardened in response. Added the bounded-influence estimator (footfall_mode: bounded, default — per-agent unique-cell uniform weighting, the Stage-1 gate) + a jam_warning flag from the max single-agent frame share. Re-run: bounded TV = 0.55 with jam_warning: true, and the verdict tells the operator to detune. This is exactly the Stage-1 discipline working.
  • Detune to n_agents: 8 did NOT clear the jam — through-traffic is the wrong probe for this floor. Re-smoke (01KXFWHFKPY3DEWPA1NVZH5RXD furnished / 01KXFWHZ83QSYC9H5P56WWMBKJ empty, both gate_passed): furnished 26 824 frames vs empty 2 380 → traversal_inflation 11.3× (agents spend ~168 s of the 200 s window on the floor and mostly never complete the east→west crossing). Fewer agents made the frame-ratio worse, not better.
  • Door widths are NOT the cause. All 14 doors on resplan-2605 are 0.90–1.49 m; the three at the ~x=6 m pinch (y=6.0/7.9/12.3) are 1.09/0.90/1.01 m — far above the ~0.34 m an agent needs. The jam is the furniture constricting the single east→west through-path, not a narrow doorway. On a corridor-constrained floor, furniture doesn't just reshape the demand surface — it can block through-flow entirely.
  • Jam detector corrected. The Stage-1 ">10% single-agent share" gate is meaningless at n<10 (uniform share is 1/n ≥ 12.5%); replaced the primary jam signal with traversal_inflation (furnished/empty total frames; >2.0 ⇒ jam), which is agent-count-robust. Selftest 1.0 (no jam), n=8 re-smoke 11.3× (jam). max_agent_frame_share kept as a secondary diagnostic.
  • NOT launched. The through-traffic estimand is jam-contaminated on this floor. Before any fan-out, the scenario must change to one that does NOT force a full-width crossing through the furniture — candidates: (a) seek_and_occupy/seat (3 seats; short localised approaches), (b) same-wing spawn→goal so agents don't all funnel through x=6, or (c) reframe the campaign around the blocking finding itself (furniture makes this floor's through-corridor impassable — interpretation #3) plus a placer sanity-check that the 35 obstacles aren't unrealistically dropped across the only corridor. Decision pending with the operator.
  • Placement diagnosis (2026-07-14): the placer is fine — the scenario is wrong. All 35 obstacles sit inside sensible container rooms (0 in circulation): fixtures→bathrooms, desks/beds/wardrobes/ nightstands→bedrooms, sofas/tv_stands/reading_tables→living rooms, kitchen_counter→kitchen. Only one obstacle is at the pinch — a tv_stand at (6.5,8.0) in living-1, 0.35 m from the door at (6.14,7.9). resplan-2605 is a fully-partitioned apartment, not an open floor; east→west through-traffic across every room is an unrealistic crossing that congests at furniture-narrowed room doorways. The furniture is realistic; the through-traffic scenario is the defect. Fix = a realistic apartment scenario (residents entering → a target room → dwell → leave), NOT a full-width crossing. Note resplan-2605 has only 3 seats, so seek_and_occupy/seat is thin; a room-targeted movement scenario (goal = a room, not a seat) uses the whole apartment with short room-to-room paths and is the better probe. Scenario redesign pending operator confirmation (it changes the primary estimand from through-traffic to intra-apartment room-approach footfall).
  • Room-targeted scenario re-smoke (2026-07-14): the catastrophic jam is gone, but furniture TRAPS a fraction of agents at egress. Switched to kind: agendas — 6 personas / 14 agents, each entering from a different edge to a distinct furnished room (bedroom-0/2/3, living-0/1, kitchen-0), dwell, leave. No agent is motionless (span<1 m = 0), and movement is distributed across the whole apartment (vs the 2-cell pileup before). BUT: traversal_inflation 2.06× at a 200 s window, rising to 3.00× at 300 s — extending time made it worse, and the same 4/14 furnished agents stay present for the full sim (empty: 0/14 all complete). They enter their room and cannot egress through the furniture-narrowed doorway. Runs: rooms 01KXFX6ZGJAZVQHG69RFM7QPER/01KXFX7AD78EKN05A09TDHS0JD, rooms2(300 s) 01KXFXCRBHEG1Z3TWJN6K2QZ8H/01KXFXD2P03ARVBVASW2AKKYWW. TV(bounded)=0.60.
  • Interpretation. This is a genuine furniture-blocks-egress effect, not a scenario artifact — the placer sat a desk 0.52 m from bedroom-0's door and a tv_stand 0.35 m from living-1's door, and a 0.15 m-radius (0.30 m-diameter) agent cannot reliably pass the residual gap on the way out (empty agents pass the bare 0.9-1.5 m doors fine). Two untried levers before declaring the floor unsuitable: (a) agent_radius_m 0.15 → 0.10 (the repo's 2026-06-04 fidelity standard; a 0.20 m-diameter agent may clear the furniture-narrowed gap) — the single most likely fix; (b) accept it as the campaign's reachability / over-block finding (interpretation #3) and report the trapped-fraction as the result rather than the footfall-redistribution TV. NOT launched pending this decision.

Literature-grounding pass (2026-07-14) — supersedes the "try radius 0.10" lever

Two literature-verification passes (crowd + CSI simulators) were run against the vault + fresh acquisitions before any further parameter tuning, on the operator's instruction to stop ad-hoc tuning and rely on established knowledge. Verdict:

Crowd sim (jupedsim-runner / CFSM). Params are grounded; the trap is a scene problem, not physics.

  • agent_radius_m stays at the validated 0.20 m (hard-core radius, 0.40 m diameter, personal-space inclusive) — corroborated by cordes2024_05a8 (0.2 m hard disk / 0.4 m social), echeverrahuarte2023_fcc4 (~0.225 m), moussad2011_fa42. The drift toward 0.10 m was the geometry-cheat the jupedsim-runner note explicitly warns against.
  • desired_speed_m_s set to 1.34 (Weidmann/empirical mean; seyfried2006_f4db N(1.24,0.05), hoogendoorn2015_13e1 1.34, echeverrahuarte2023 1.4 ± 0.2 floored ≥1.0). Runner takes a scalar; the ideal is a truncated distribution.
  • The 11× inflation + trapped agents are scene-geometry pathologies. At apartment occupancy (≪0.5 ped/m²) the fundamental diagram predicts free-flow (corbetta2023_bcb7, helbing2015_d0b0, hoogendoorn2015), so a slowdown cannot be congestion. A 0.35–0.52 m furniture-to-door gap is below the frictionless-disk passability limit (echeverrahuarte2023; aleksandrov2021_6897 empirical min passable gap ≈ 1.1 m). The literature fix is door F-Space clearance (IndoorGML diakite2020_1b54: furniture must leave ≥0.6–1.0 m at doorways) + largest-connected-component pruning (floor_walk already does the pruning).
  • The room-targeted scenario is confirmed correct — it is the literature's strategic→tactical→ operational activity model (feng2021_f56d, duives2013_3924, hoogendoorn2015); through-traffic had no strategic layer.
  • Acquired: Collision-Free Speed Model for Pedestrian Dynamics (Tordeux/Chraibi/Seyfried 2016, the primary method we run) + Generalized collision-free velocity model (Xu 2019). Standing gaps the open indices don't serve: activity-based residential occupancy movement, furnished-egress-as-phenomenon, residential occupant densities.

CSI sim (sionna-csi-runner) — verification vs literature. Method is accepted; two correctives + one weak axis.

  • Grounded: Sionna RT as method (hoydis2023_7aa4); the strongest axis is Doppler/temporal CFR (wang2015_48cf CARM — motion lives in CFR time-evolution, freq×λ = path-change speed, indoor <300 Hz); lossy-primitive body defensible (rampa2022_ca57 TAP screen model). The over-coding symptom (sim floor-ID 0.98 vs real 0.83) is predicted by WiSegRT's furniture ablation (zhang2024_df4a): scene/ material diversity drives CSI variance, not mean power — so under-furnished specular scenes over-fit.
  • Correctives: max_depth=3 is the low end (WiSegRT uses 4 bounces); antenna count ≫ bandwidth for discriminability (cominelli2023_e6ee: 4-antenna 802.11ax = +30–40%, 20→160 MHz marginal) — the antenna knob, not bandwidth, is the sweep lever; default analyses to 5 GHz (huang2025_060d WiMANS); body_radius 0.20 may be too narrow vs rampa's 0.55 m width.
  • Weak axis: the hand-rolled impairment magnitudes (CFO ~200 Hz, phase-noise ~1° RMS, SNR 20–30 dB) have zero vault validation (CARM measured CFO 80 kHz = 400× our residual) — physically-motivated but uncalibrated. Critical standing gap: no published Sionna-synthesized-vs-measured indoor CSI comparison exists (confirmed by search) — the exact evidence a fidelity claim most needs.
  • Acquired: Vishwakarma 2021 (GAN sim↔measured WiFi-radar augmentation, SimHumalator group).

Decision status: the agent_radius 0.10 re-smoke is now MOOT (under-grounded). At the validated 0.20 m, the furnished arm re-exposes the door-passability issue → launch is PAUSED on the door-F-Space fork (A: fix IP-113 arrangement · B: stage-time furniture_door_clearance_m filter · C: accept 0.10 as the repo's documented residential value). Recommendation: B — a stage-time F-Space filter operationalizes IndoorGML directly, keeps radius at 0.20 and IP-113 data pristine, and dropping door-blocking furniture is exactly what F-Space says shouldn't be there.

Door-F-Space fix APPLIED + validated (2026-07-14) — fork resolved (option A)

Operator chose fix the IP-113 arrangement (not the stage-time filter or the 0.10 cheat). Implemented a door-aware placer: gis/furnish/geometry.door_fspace() reserves an IndoorGML F-Space at every threshold, placer.furnish_room() + pipeline.furnish_arrangement() subtract it, validate_placement() now reports door_blocking_obstacles, and pipeline.refurnish_floor() re-materialises a floor reversibly.

Re-materialised computed-resplan-2605-floor-0 (door_clearance_m=0.6, seed 7): 35 → 27 obstacles (the 8 door-blockers dropped), door_blocking_obstacles = 0 across all 14 rooms/14 doors. Old layer preserved inactive as computed-resplan-2605-floor-0-preDC (35 obstacles/3 seats) for rollback.

Re-smoke at the validated 0.20 m CFSM radius (v0 1.34):

  • furnished 01KXFZCC1GZ0M9XT62T4XHZCN6 / empty 01KXFZCPJG3AWYQA6NZRVR972A
  • traversal_inflation 0.91 (was 3.00× @ r0.15, 1.48× @ the r0.10 cheat) → no jam, no trapped agents
  • jam_warning=false, max_agent_frame_share=0.15, no impassable-risk QC warnings
  • tv_mean 0.36 — a clean footfall-redistribution signal, uncontaminated by the jam artifact

Exactly the literature's prediction: at apartment occupancy the FD gives free-flow, so fixing the door F-Space (geometry) lets the validated 0.20 m agent pass freely. The campaign is now on grounded footing — ready to launch the multi-seed run for a real TV CI.

RESULT — multi-seed TV confidence interval (2026-07-14)

Ran the door-aware arrangement furnished-vs-empty across 8 seeds at the validated 0.20 m CFSM radius (v0 1.34), n_boot=2000 over the 8 pairs. Furnished run_ids seed0..7: 01KXFZM531MD9XJX6MVX2XG7SQ 01KXFZMJEJ9XMET4MSMB3KY1G8 01KXFZN27ZW965237M8Y4Q2A7C 01KXFZNFAD01YKNPZN253SM18Z 01KXFZNW1RZJQKWBB7RRDVY2SM 01KXFZPA2MEEPH4HF6R7EAQJ5A 01KXFZPN6SZVV407QTY1CD14ZZ 01KXFZQ3S0XFRX8GMBCHH7QH2Q ; empty: 01KXFZS13E5JSH8C6B9Z306W0C 01KXFZSCDNG1WEHH0FKABCB05C 01KXFZSRDW1VH6MEWP69JX6F68 01KXFZT314WA27G5FY8V68NVA9 01KXFZTDTR5VXNJDQ5YDT8WH27 01KXFZTQN1SWZ7Q4CRBDST58TW 01KXFZV43RAMSF09RVZ0ASNTY6 01KXFZVFA9NYYXRFGAH7DM7WVQ .

metric value
TV (footfall redistribution) 0.540, 95% CI [0.485, 0.577]
traversal_inflation 0.96 (no jam — furnished≈empty)
jam_warning false
max_agent_frame_share 0.15
min_effect_size 0.10 (CI clears it → significant)

Headline: in a furnished apartment, in-room furniture significantly redistributes pedestrian footfall (TV ≈ 0.54) relative to the bare floor, and — crucially — it does so without inducing any traversal jam (0.96× vs empty). The redistribution is a genuine routing-around-furniture effect, not a congestion or egress-trap artifact. This is only credible because (a) the CFSM params are literature-validated (radius 0.20, v0 1.34) and (b) the IP-113 placer now respects door F-Space (door_blocking=0), so the measured signal is the furniture's spatial effect, not a passability defect. Campaign COMPLETE.