Summary
The Observatory scenario caption is only written when the scenario changes, so between page load and the first auto-cycle advance it can describe a state that does not match what is on screen. The visible result is a caption reading "no human presence in the monitored zone" while the scene renders people and the vital-signs panel shows a heart rate.
This is a presentation bug, not a data bug. Reporting it because the Observatory is the page most likely to be shown to someone evaluating the project, and a caption that contradicts the render undercuts it.
What I saw
On one load, roughly six seconds in, the HUD showed:
- Scenario description:
Baseline calibration with no human presence in the monitored zone.
- Vital signs: heart rate
42 BPM, respiration 9 RPM, confidence 45%
- WiFi Signal panel:
Persons 1, presence badge PRESENT
- Scene: two skeletons rendered
Sampling the HUD every 250ms for ~110 seconds afterwards, covering four scenario cycles, caught one further contradictory sample, at the first frame after load:
t+0.00s desc='Baseline calibration with no human presence in the monitored zone.' hr='22' br='4' persons='0'
total contradiction samples: 1 of 440
What is not wrong
Steady state is consistent. During empty_room the panel correctly reads hr: --, persons: 0. Scenario transitions are also handled sensibly — on entering single_breathing the rate ramps -- → 27 → 52 → 62 → 69 → 71 → 72 over about ten seconds, which is the intended lerp in updateHUD (lerpFactor = 0.04), not a glitch.
So the mismatch is confined to initialization, not to the cycle.
Likely cause
observatory/js/hud-controller.js:546
_updateScenarioDescription(scenarioKey) {
const el = document.getElementById('scenario-description');
if (!el) return;
el.textContent = SCENARIO_DESCRIPTIONS[scenarioKey] || '';
}
This runs on scenario change. updateHUD runs every frame and syncs the dropdown, the vitals and the person count, but does not re-assert the description. If the scene begins on a scenario other than the one the caption element was initialized with, the caption stays stale until the first auto-cycle advance — up to a full scenario length, which is around 28 seconds in my run.
The vitals lerp compounds it at load: this._lerpHr starts from a non-zero seed and blends 4% per frame toward the target, so a heart rate is displayed for a second or two before it settles to --.
Suggested fix
Set the description from the same per-frame path that syncs the dropdown in updateHUD, so the caption is derived from the current scenario rather than from the last change event. Initializing _lerpHr / _lerpBr to zero would remove the load-time flicker as well.
Environment
- Image
ruvnet/wifi-densepose:latest, digest sha256:c94b541fe6269e5ce28ebfc297e34cf240997427c8f9bfb97f6775b32d50ceab
/ui/observatory.html, default auto-cycle, no hardware attached
Summary
The Observatory scenario caption is only written when the scenario changes, so between page load and the first auto-cycle advance it can describe a state that does not match what is on screen. The visible result is a caption reading "no human presence in the monitored zone" while the scene renders people and the vital-signs panel shows a heart rate.
This is a presentation bug, not a data bug. Reporting it because the Observatory is the page most likely to be shown to someone evaluating the project, and a caption that contradicts the render undercuts it.
What I saw
On one load, roughly six seconds in, the HUD showed:
Baseline calibration with no human presence in the monitored zone.42 BPM, respiration9 RPM, confidence45%Persons 1, presence badgePRESENTSampling the HUD every 250ms for ~110 seconds afterwards, covering four scenario cycles, caught one further contradictory sample, at the first frame after load:
What is not wrong
Steady state is consistent. During
empty_roomthe panel correctly readshr: --,persons: 0. Scenario transitions are also handled sensibly — on enteringsingle_breathingthe rate ramps--→ 27 → 52 → 62 → 69 → 71 → 72 over about ten seconds, which is the intended lerp inupdateHUD(lerpFactor = 0.04), not a glitch.So the mismatch is confined to initialization, not to the cycle.
Likely cause
observatory/js/hud-controller.js:546This runs on scenario change.
updateHUDruns every frame and syncs the dropdown, the vitals and the person count, but does not re-assert the description. If the scene begins on a scenario other than the one the caption element was initialized with, the caption stays stale until the first auto-cycle advance — up to a full scenario length, which is around 28 seconds in my run.The vitals lerp compounds it at load:
this._lerpHrstarts from a non-zero seed and blends 4% per frame toward the target, so a heart rate is displayed for a second or two before it settles to--.Suggested fix
Set the description from the same per-frame path that syncs the dropdown in
updateHUD, so the caption is derived from the current scenario rather than from the last change event. Initializing_lerpHr/_lerpBrto zero would remove the load-time flicker as well.Environment
ruvnet/wifi-densepose:latest, digestsha256:c94b541fe6269e5ce28ebfc297e34cf240997427c8f9bfb97f6775b32d50ceab/ui/observatory.html, default auto-cycle, no hardware attached