"Keep the audio. When it piles up, I'll delete it." — Dad, 2026-09-25
Two Things to Keep
A spoken turn produces two artifacts: the words the transcriber heard, and the sound itself. Both are kept, and both are kept as they were, with honest limits for the sound, below.
The Words, Unedited
It is tempting to clean a transcript before the model sees it: fix the spacing, correct the obvious homophones, maybe run a small model over it to make it read well. cwkPippa does none of that. The soul holds the conversation, the roster of apps, the names of the family, and is the best corrector there is. A cleanup pass in front of her would add latency to every turn and change meaning in a place nobody can see, so when it guesses wrong, the error is invisible and permanent. No pass rewrites his words: the stored message is the transcript as the transcriber produced it. The one change the house allows is a label, never a correction. When the speaker check (Track 8) hears another voice in the recording, the stored message becomes the same words as lines labeled with whose they were, and the transcript as the client sent it rides voice_meta.speaker.original_text. How the soul reads it is the next track's business.
The Sound, Filed Beside the Words
On every door that holds a talk, the audio of every dictated utterance is kept as an ordinary chat upload. On the batch path, the transcription route takes a keep_audio flag and returns the recording's upload id with the words. Since 2026-10-18 it stores the recording before Scribe hears it, so the speaker check of the turn (Track 8) can start listening while the words come back; a failed transcription deletes what it stored, so nothing is kept and the client still holds its own copy to retry. On the hands-free path, the client turns the utterance's PCM into a WAV file and keeps it; for a long utterance the same batch call that re-transcribes it also keeps it. A shaky link no longer leaves the recording behind. On the phone it waits with the turn in the outbox and goes up with it, so a link that drops costs neither the words nor the voice; on the web the upload is asked again while the server is away, by the same rule that asks again for a listening grant. Only a real failure leaves the note that the recording was not kept, and then the words still go out, because a turn held hostage by storage would be the worse failure. Either way the upload ids ride the turn as input_audio_ids and land in the user row's voice_meta, next to the language he picked.
The model never sees these recordings. They are a record, not an input. Nothing prunes them automatically; by Dad's ruling he deletes them when they pile up. And they pay for themselves quickly: the forced-commit fix in the previous lesson was proven by replaying four days of these recordings through the new rule, and the missing twenty seconds of counting were proven lost by the transcriber, not the microphone, because the recording still had them.
The Scope Travels With the Store
Voice created stores the chat never had: uploaded recordings, the voice engine's audio cache, its job history. Every one of them has to inherit the conversation's scoping from its first line. A soul's conversations belong to that soul, and a private conversation keeps nothing: its recordings go into that conversation's own temporary folder and disappear when it ends. This is not theoretical caution. The day before voice mode was designed, the diary feature taught the house this exact lesson, and its whole cause was one missing soul filter on one query. A new store is exactly where that filter gets forgotten.