What broke
Two paths could answer the same turn.
Control activity could also be mistaken for audible output, cancelling the only recovery path before a caller could hear anything.
DentSignal repair · Async reliability
The repair made response ownership explicit, tied cancellation to playable output, and kept silence bounded with fallback.
What broke
Control activity could also be mistaken for audible output, cancelling the only recovery path before a caller could hear anything.
What changed
Queued speculative work is cleared, and only playable output cancels the fallback. Silence reaches a bounded recovery path after 2.5 seconds.
What it fixed
The turn has one producer, one real completion signal, and one time-bounded recovery rule.
Before / after
primary.respond()
secondary.respond()
on_any_activity(cancel_fallback)response_owner = primary
on_playable_output(cancel_fallback)
await fallback_after(seconds=2.5)Evidence
The historical record shows one response owner per turn, cancellation tied to playable output rather than generic activity, and bounded fallback when sound never arrives. This is engineering evidence from that revision, not a current production-health claim.
Stack and capabilities
Next