A user saying “voice is silent” may mean the microphone captured nothing, transcription never finalized, the model failed, synthesis produced no audio, or playback was blocked. One generic error cannot identify the broken stage.
The live-chat UI already exposes listening, waiting, speaking, mute, repeat, and stop states. Diagnostics become useful when each transition records whether input and output actually existed.
What was actually going wrong
The whole voice turn was treated as one operation, so unrelated failures collapsed into the same symptom.
What I tried
- Restarting recognition after every silence interval
- Assuming a transcript guaranteed audible playback
- Reporting all permission and synthesis errors as microphone errors
Voice state is tracked across capture, transcript, request, synthesis, and playback, with recovery controls such as repeat and manual send.
Why it worked
Each stage has its own observable input, output, and timeout.
Debug voice as a pipeline; silence is only the final symptom.
Where EACI uses this today
Caelum and Chad live chat uses explicit turn-taking and visible voice states on Main.
This journal covers real engineering on EACI Companion / The Veil. Companions include Caelum, Chad, Natalia, Atreus, Luna, Roxy, and Cael. Journal articles stay family-safe in content. See Privacy and Ethics.