pub enum UiSignal {
LogLine {
step: Option<StepId>,
icon: Icon,
text: String,
},
Progress {
step: StepId,
phase: String,
fraction: Option<f32>,
},
CeremonyOverview {
description: Option<String>,
materials: Vec<MaterialOverview>,
step_count: usize,
},
SystemInfo(Box<SystemInfo>),
Environment(Environment),
}Expand description
Transient UI-only signal. Never written to the transcript.
Signals are operator-assistance, not evidence. A frontend may drop any
variant without affecting correctness or the transcript (this is exactly
why headless and console ignore most of them). To persist information,
emit a StepFact from an action; nothing here is ever promoted into the
transcript. See docs/development/runtime-and-frontend.md for the full
fact-vs-signal model.
The enum is intentionally not #[non_exhaustive]: it is a
workspace-internal protocol type, and forcing every frontend to match each
variant exhaustively (no wildcard arms) is the wanted compile-time check
that a new signal is consciously handled or ignored everywhere. Public-API
enums still get #[non_exhaustive].
Variants fall into three sub-families:
- narration: ephemeral lines and progress (
LogLine,Progress). - one-shot structured: a single snapshot emitted at ceremony start
(
CeremonyOverview,SystemInfo). - re-emittable structured: state the runtime may resend during the run;
the frontend replaces its view on each (
Environment).
Variants§
LogLine
Human-readable narration line for the live UI.
Fields
Progress
Progress signal for spinners and progress bars.
Fields
CeremonyOverview
Descriptive metadata for the pre-ceremony overview screen. Emitted
once, right after StepFact::CeremonyStarted. Deliberately kept
out of the transcript: the YAML is the source of truth for these
fields, and embedding them in the persisted record would bloat
every transcript with data that the verifier could pull from the
ceremony source instead.
Fields
materials: Vec<MaterialOverview>Declared materials, in declaration order.
SystemInfo(Box<SystemInfo>)
Static build and host identity for the System tab. Emitted once, right
after CeremonyOverview. UI-only: machine
identity that belongs in the transcript is recorded by the
machine_info action, not fed in through this channel.
Boxed: SystemInfo is much larger than the other variants, and
keeping the enum (and ExecEvent) small avoids bloating every
channel message.
Environment(Environment)
Live device inventory for the System tab. Emitted once today, but shaped to be re-emitted: the frontend replaces its environment view on each, so a future live observer is purely additive. UI-only, never persisted.