9c7bafd5b1
It wired no PushHandler, and SendRequest discards a push frame when there is none. That was not a missing feature but a silent one. mavend routes a nudge to the voice session that spoke most recently, so once mavwaked had spoken once it WAS that session. PushToMostRecent succeeded, the dispatcher counted the nudge delivered and stopped rerouting to the away channels, and mavwaked threw the audio away. He heard nothing, anywhere. It now connects at startup rather than at the first utterance, because the dispatcher has to tell "he is not at the machine" from "he is, and she has nothing to say". The receiver redials on its own clock, since mavend restarts on every deploy. A nudge is queued, not played where it arrives. The capture loop picks it up on the next frame, so the half-duplex gate and barge-in cover it the way they cover a reply. It resets the VAD first: playback is about to suppress every frame, and a half-heard sentence would otherwise splice onto whatever he says next. A nudge arriving while one still waits replaces it, which is the contract internal/voice states for PushHandler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ptwopxyo3Z2kwFckHkLvN