ReadonlyChanged$Emits after every change so the owning component can mark for check.
The persisted cross-session milestones (replaced immutably on change).
The CURRENT session's volatile level — max(base, raised events).
Level 4: developer affordances are offered by default (gear popover still gates them).
Level 2+ POWER-CHROME milestone (app-bar End pill, gear, channel strip). NOTE: the composer dock itself is NOT level-forced — it is the overlay's per-session, user-owned Open toggle (the strip's Type control / T opens it; the dock's hide control closes it).
Level 2+: the channel strip + the app-bar gear (density escape hatch lives there).
Level 2+: the surface panel exists (content arrival forces this via 'engaged'/'channel').
Level 1+: the caption thread (and the captions control) are visible.
Resets the volatile session level to the base — call at every fresh session start.
Loads persisted milestones (tolerant) and resets the session level to the base.
RAISES the session level for an event (never lowers it).
true when the level actually changed.
Ratchets + replaces the milestones for a completed call and returns the serialized payload for persistence. The session level is left as-is (the overlay is about to close or re-begin).
EXPLICIT step back down to the pure-audio surface (level 0) for THIS session —
the inverse door of the hero's "Show the conversation" / T-to-type reveals. Volatile
only: the cross-session milestones ratchet is untouched (use the gear's simple
density to make pure audio the durable default). Raising is one-way for CONTENT;
the USER may always walk back down.
Applies the gear's manual density override. Takes effect immediately — simple
returns even a mid-call console to the day-one surface (content tabs keep their
content; only the chrome retracts). The caller persists the serialized milestones.
The volatile + persisted disclosure state for ONE overlay instance. The overlay loads it from UserInfoEngine at construction, calls Raise as session events land, derives every visibility gate from the getters, and persists RatchetOnSessionEnd's result when the call ends.