"The app should be impossible to forget while it's listening, and should itself forget the moment it stops."
Two Halves of One Promise
The trust contract has two halves that sound unrelated but are the same idea. Visible while listening: whenever the microphone is live, there is an unmissable indicator — the pill overlay with a moving waveform. Not a subtle menu-bar tint; a thing your eye catches. Forgetful after: when the dictation is done, the audio is discarded by default. Together they say: you always know when it hears you, and it doesn't keep what it heard.
Why the Waveform Matters
The live waveform isn't decoration. A static "recording" label could be a lie — it might be showing while nothing records, or (worse) fail to show while something does. A waveform that moves with your voice is evidence: it's derived from the actual capture tap, so it can only animate if audio is genuinely flowing. The indicator is coupled to the thing it indicates. That's a small design choice that converts a claim into a demonstration.
The Tension: Forgetting vs. Losing
"Discard everything" collides with a real need: if STT or cleanup fails, throwing away the audio means the user's words are gone forever. Firekeeper resolves this deliberately rather than picking a side:
successful dictation -> audio discarded (default)
STT failure -> audio moved to recovery-audio/, pruned to 10
cleanup failure -> raw transcript already in state; words never lost
history on disk -> OPT-IN only
# Forget by default. Retain only on failure, briefly, and bounded.
The raw transcript lands in state before cleanup runs, so a cleanup failure can never eat your sentence. Recovery audio exists only for the failure case, is capped at a small number, and rotates. Retention is the exception with a reason, never the default with an excuse.