When using the default Speech Dispatcher address, try the user's Unix
socket first and then /run/speech-dispatcher/speechd.sock if the user
socket is missing or refuses the connection. This allows Fenrir to use
an existing system service before attempting to autospawn a user daemon.
Keep explicit Options.Socket, SPEECHD_ADDRESS, and SPEECHD_SOCKET
settings authoritative. Do not fall back for permission errors, TCP
connections, or a canceled context. If both sockets fail, preserve the
user socket's error so autospawn continues to target the user's endpoint.
After opening the data connection, use its selected Unix socket for the
control connection and disable further fallback there. Both connections
must belong to the same Speech Dispatcher server.
Add tests for address overrides, user-first selection, missing and stale
user sockets, permission errors, and preservation of the original error
when neither socket is available.
Validation:
- go test ./internal/speech -count=1 (GOPROXY=off): passed
- git diff --check: passed
- gofmt -l on all five changed Go files: no output
Live audible speech and physical keyboard behavior were not verified
as part of this commit.
Try the invoking user session followed by /run/pulse/native for sound
cues, while preserving an explicit PULSE_SERVER override. Resolve the
user socket from SUDO_UID, XDG_RUNTIME_DIR, or the current UID, and
document the fallback and Speech Dispatcher audio configuration.
Allow five seconds for Speech Dispatcher command acknowledgements so
large voice catalog queries can finish without premature failures.
Add regression coverage for socket selection and delayed replies.
Include cpu-usage.patch as a standalone patch artifact containing Python
remote registry permission and registration failure handling changes.
The patch is stored without applying it to the Python sources.
Validation: go test ./internal/sound ./internal/speech -count=1 passed
with GOCACHE=/tmp/cthulhu-go-cache and GOPROXY=off outside the sandbox
to permit local Unix sockets. source diff whitespace checks passed.
The staged patch has whitespace warnings from preserved blank context
lines; its contents are retained unchanged.
Live audio and keyboard behavior were not tested.
Run voice discovery, voice testing, clipboard I/O, and external scripts in isolated background worker lanes. Deliver results through Fenrir's event queue so manager state remains owned by the main loop.