Skip to content

UI system: ambient instrument core + BASE status always-on (fixes per-theme status bug) #66

Description

@tamirelazar

Part of the UI-system unification. Introduce the ambient instrument — one bottom-docked surface with a BASE/TUNE/MSG state machine — and land the BASE (status) state on it.

What to build

  • An ambient surface module with a state machine and resolution priority: error-MSG > MSG > TUNE > BASE; expired non-sticky states fall back. The surface always reserves the taller (tuner) height so later states do not cause layout jump.
  • BASE = the status line, reborn on the shared RowBuf + L1 tokens. This fixes the standing bug where the status line hardcodes Gruvbox colors and is therefore visually wrong on the other four themes.
  • BASE is the resting state and renders at rest. This is a behavior change, not a port: today the status line only appears when an overlay is open or paused. The at-rest render gate must be removed so BASE shows during normal running (gated only by the user status-bar/chrome preference).

State machine shape (from the design):

  • BASE
  • TUNE { param, until }
  • MSG { level, text, sticky, until }
    resolve(states, now) picks by the priority above after dropping expired non-sticky entries.

Acceptance criteria

  • State machine + resolve priority unit-tested (error outranks all; expired TUNE -> BASE; live MSG outranks TUNE)
  • BASE renders from tokens; a non-Gruvbox theme golden differs from Gruvbox in status colors (proves the bug is fixed)
  • BASE renders at rest (no overlay, not paused); surface reserves tuner height
  • visual-regression + cargo test --lib + clippy pass

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestroadmapPlanned future work

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions