bc0e3a5a89
PROTOCOL.md: generated from internal/voice/wire.go — documents the voice wire format (TCP, length-prefixed JSON, methods, pushes, errors) for multi-client implementors. Must stay in sync with wire.go. dispatcher: when voice sink returns ErrVoiceNoSession, skip voice and continue to remaining channels instead of aborting. sev4-present already has ntfy in the routing table (continues naturally). sev1-3 present have only voice — the loop ends with no dispatches, which matches the spec (care/ops-soft drop on no-voice). voicesink: maps voice.ErrNoSession to delivery.ErrVoiceNoSession so the dispatcher can detect it without importing the voice package.