mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-23 07:02:44 -05:00
Confirms and implements the users direction: assets/room_csi_composite.png (a static matplotlib experiment blending a real signal_field grid onto assets/room-style-1.png) becomes Layer 1s real continuous per-frame target. - New heatfield.rs: bilinear-samples the real live signal_field grid (observed 20x20, [20,1,20]) each frame and screen-blends it onto the embedded room-style-1.png backdrop. Validated against live data: real pixel-level variation confirmed frame to frame (3202/147456 pixels changed between two frames ~1s apart, not a frozen composite). - render_frame now uses the heatfield composite as the background whenever signal_field is present, falling back to the flat schematic otherwise (never fabricates a heat pattern that was not measured). - Honesty fix: room-style-1.png already depicts its own illustrated person (decorative, not real pose data). Drawing the schematic stick-figure skeleton and room-bounds rectangle on top of it in an unrelated position risked a viewer confusing one figure for the other, or the schematic rectangle for real room bounds. Both are now suppressed on the heatfield backdrop; real per-node dots and real vitals bars are kept since they do not have that ambiguity. The schematic elements remain the whole visualization on the flat-fallback path. - estimated_persons / signal_quality_score made serde-optional: the live server was observed to occasionally omit them, previously causing a real (correctly non-fabricating) fetch error on those frames. Non-negotiable trust boundary, encoded in ADR-352 and at the type level: fal.ai (generic model or the in-training ruforecast-visual-teacher LoRA) may only ever return supplementary synthetic pixels. StyledFrame is constrained to opaque image_bytes + call telemetry and must never gain a field a caller could mistake for a measured/derived value (pose, vitals, identity, confidence). The fal.ai clients endpoint is now parameterized (FAL_MODEL_ENDPOINT / with_endpoint) so swapping in the trained visual-teacher model id is a config change, not a code change. Budget: default fal-cost-estimate-usd lowered from 0.02 to 0.01 per team-lead direction (pessimistic end of the measured $0.003-0.01/call range, biased so BudgetGuard fails safe against an underestimate).