mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-23 15:13:03 -05:00
StreamingEngine owns its own MultistaticFuser instance -- a different one from wifi-densepose-sensing-server's AppState, which was fixed for this same class of bug in #1860. Nothing ever called set_node_positions / set_node_positions_by_id on this instance, so every FusedSensingFrame produced by the governed path (fuse_scored_calibrated, which feeds provenance and the witness) carried every node's position as the origin regardless of deployment configuration. Adds StreamingEngine::set_node_positions(HashMap<u8, [f32;3]>), delegating to the fuser's existing set_node_positions_by_id. Also fixes a related hazard in set_multistatic_config: it rebuilt the fuser wholesale (MultistaticFuser::with_config(cfg)), which silently discarded any positions configured before it. It now preserves them across the rebuild, so callers don't need to remember a specific ordering between the two setters. Two regression tests per the issue's own acceptance criteria: one calling fuse_scored_calibrated directly and asserting each fused contribution carries its own node's configured position, and one asserting positions survive a later set_multistatic_config call. Fixes #1870.