From fd6a07bb5829c068e5de3a8dbca7ef9f6bde948d Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 19 Oct 2026 13:31:01 -0700 Subject: [PATCH] docs: auto-speak narrates every turn, not only the final answer (Refs #36) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Limits bullet still described the pre-fix behaviour ("thinking and the final message only"), which dank/dankvoice#3 just retired: narration rides `turn_end`, so the assistant's prose and thinking are spoken while the agent works. Records the two rules an operator needs when audio seems missing — arming is read at startup only, and a turn landing during playback is dropped rather than queued — plus where the design rationale lives. kb-lint 0 violations, index-coverage 0 issues. --- omp-docs/core/dankvoice.md | 14 ++++++++++---- omp-docs/log.md | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/omp-docs/core/dankvoice.md b/omp-docs/core/dankvoice.md index 894b4d9..3c686ec 100644 --- a/omp-docs/core/dankvoice.md +++ b/omp-docs/core/dankvoice.md @@ -83,16 +83,22 @@ saved sink. Thinking narration rides the same arming (`thinking: true`). ## Limits -* Auto-speak narrates thinking and the final message only — mid-turn tool - chatter is never spoken; skipped in `print`/`json` modes so benches stay - silent. +* Auto-speak narrates **each turn** — the assistant's prose and thinking while + the agent is still working — plus the settled final answer, spoken once. A + turn that lands while audio is still playing is dropped, not queued or + interrupting; tool-only turns stay silent; `print`/`json` modes never speak, + so benches stay quiet. Narration goes through the humanizer, so it lags its + turn by a rewrite round trip; `/say humanize off` removes the lag. +* Arming is read at startup only — see **Arming auto-speak** above. A session + that never speaks is unarmed, not broken; `/say on` before debugging. * frank-tts deployment, voice packs and the registry are owned by the `serverAppConfigs` repo (`serverAppConfigs-docs/Dankclaw/Frank TTS.md`). ## Citations * Package repo `dank/dankvoice` (README, `docs/decisions/`) — behaviour and - knob truth. + knob truth. `docs/decisions/2026-10-19-turn-narration.md` records why + narration rides `turn_end` and not only `agent_end`. * Gitea issues #21, #23, #27, #32 (drop-in history) and #34 (this cutover) on `dank/command-center`. * Live endpoint probes 2026-10-18/19 documented in those issues. diff --git a/omp-docs/log.md b/omp-docs/log.md index fee0380..cf9d3a6 100644 --- a/omp-docs/log.md +++ b/omp-docs/log.md @@ -20,10 +20,16 @@ on its concept page, linked here. Never re-expand an entry in place. Sessions spoke only on explicit `/say`: the settings file carried no `auto` key, and arming is session-scoped by design (`/say on` never persists). Set -`"auto": true` in `~/.omp/cache/dankvoice.json`. Law: silence at session start -is a config state — read `/say status` for `auto-speak on`, then watch -`pgrep -a pw-play` for one player per segment, before blaming the endpoint. -Details: [dankvoice](core/dankvoice.md). +`"auto": true` in `~/.omp/cache/dankvoice.json`. Same report, second half: +auto-speak listened only to `agent_end` — a settle that fires once per prompt +and is skipped outright when the harness schedules a continuation — so nothing +was narrated while an agent worked; fixed in dank/dankvoice#3, which narrates +`turn_end` as well. Law: silence at session start is a config state — read +`/say status` for `auto-speak on`, then watch `pgrep -a pw-play` for one player +per segment, before blaming the endpoint. Law: whether the harness delivers an +event to extensions is settled in minutes by a throwaway probe extension that +timestamps `turn_end`/`agent_end` — never inferred from audio timing, which the +humanizer lags by seconds. Details: [dankvoice](core/dankvoice.md). ## 2026-10-19 — LazyVim installed as an NVIM_APPNAME profile