Share Speech Dispatcher transport and restart recovery

This commit is contained in:
ak47 committed 2026-11-12 22:18:14 -05:00
1 parent e49ba198d7
commit b9a33f7578
19 files changed
+2951

No files matched your search

+35
View File
@@ -91,3 +91,38 @@ pinned module versions: after review and live acceptance, release/tag the
common module, then update `go.mod` and `go.sum` in **both** readers and test
with `GOWORK=off`. A shared source change does not update already installed
binaries; they must be rebuilt with the updated dependency.
## Speech Dispatcher
`speechdispatcher` owns the shared SSIP client used by both readers: endpoint
resolution, optional daemon startup, speaking and independent cancellation
connections, settings, bounded reply parsing, discovery queries, and read-all
notifications. It has no service-manager dependency. Each reader supplies its
client identity and keeps its own admission, interruption, presentation, and
hardware-synthesizer behavior. Fenrir enables automatic system-socket fallback;
explicit socket/address choices never fall back to another server.
After a connection fails, the failed utterance is not replayed. The next fresh
speech request rebuilds both channels and restores settings, priority, and the
new cancellation target. Failed reconnection remains retryable on subsequent
requests. Context cancellation bounds connection work; Close and Abort prevent
reconnection. Fenrir additionally retains its worker's bounded background retry
and outage-queue discard policy. An already accepted utterance whose reply was
lost may have spoken before the failure; automatically replaying it is unsafe.
`Speak` normalizes desktop text; `SpeakText` preserves console-prepared whitespace
and line boundaries. `SpeakCharacter` sends character feedback. Query connections
are separate from speaking connections, and ordinary discovery never autostarts
a daemon. Startup can honor the invoking sudo user's credentials without
changing the reader process's credentials.
Run `go test -race ./speechdispatcher` for protocol and recovery fixtures.
`CTHULHU_NATIVE_SPEECH_STARTUP=1 go test -race ./speechdispatcher` additionally
starts and restarts private dummy-output daemons; it does not restart the user's
Speech Dispatcher. The environment variable retains the migrated test's name.
The shared client is available starting with v0.3.0. Both readers pin this
version for standalone builds; the sibling workspace remains useful for local
development. Verify released dependencies with `GOWORK=off`. Existing installed
binaries do not gain fixes until rebuilt. Live audible-speech, keyboard, and
braille acceptance is tracked separately from automated protocol tests.