Skip to content

Observatory caption can contradict the rendered scene at load: scenario description only updates on scenario change #1527

Description

@IASC-00

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions