memory: donut voiced-interview slices 2+3 built + committed + live-proven; heid gates pending triage

This commit is contained in:
2026-08-01 19:02:42 -07:00
parent 71689142bc
commit ef76a03bcd
+22 -8
View File
@@ -46,15 +46,29 @@ upstream API key stays server-side (INV-003).
_As of 2026-08-01:_
**🔨 ACTIVE BUILD — Donut voiced-interview (auto-TTS + KB-recall + Princess Donut). RESUME HERE post-clear.**
**🔨 Donut voiced-interview — ALL 3 SLICES BUILT + COMMITTED + LIVE-PROVEN (2026-08-01). Heid gates PENDING triage.**
Operator ask "add auto-tts to the web gui" grew into a voiced, corpus-grounded Tier-3 interview character.
**Slice 1 DONE** (persona `docs/characters/donut.md` authored + `ratatoskr:donut` defined + in the picker);
**slices 2 (Zonos auto-TTS) + 3 (retire-ready KB-bridge) TO BUILD** — operator: "build both today." Contract
`docs/contracts/donut_voiced_interview.contract.md` (validated). Both external deps verified live 2026-08-01
(Zonos `voice:"donut"` REGISTERED + returns wav; the KB-recall pattern is worldtree-dev-ruled — consumer-side
retrieval + `memory_context` pinning, retire-ready). **FULL build state / design specs / owed items →
`persistent-memory.d/2026-08-01-donut-voiced-interview-build.md`.** OWED: a P&P verification re-run to infra-ops
(#382 fix deployed b166).
**Slice 1** (persona + `ratatoskr:donut` define, `3e912b1`), **Slice 2** (auto-TTS via Zonos, `1883214`), **Slice 3**
(retire-ready KB-recall bridge, `7168914`) — ALL DONE, **531 green**, both live-smoked end-to-end on :8081/b128.
Contract `docs/contracts/donut_voiced_interview.contract.md`. **NOT pushed** (operator's call; local at `7168914`).
- **Slice 2 (TTS):** `src/ratatoskr/tts.py` (Zonos gateway client + `pad_to_dials`) + `/api/tts` proxy in `web/server.py`
(voice map `ratatoskr:donut→donut`, serialize lock, 503 degrade) + `index.html` 🔊 toggle (opt-in, localStorage,
default off) / speak-on-`done` / AbortController cancel-on-new-turn / `<audio>` sink. `RATATOSKR_TTS_URL` override.
LIVE: Donut voice + affect dials → 44.1kHz wav (booth `http://10.100.10.50:8090/b/donut-voiced/`). Gateway
`http://10.100.79.3:8890/v1/audio/speech`, **wav-only** (mp3/opus→mislabeled PCM), emotion_valence/arousal from live PAD.
- **Slice 3 (KB-bridge):** `src/ratatoskr/kb_bridge.py` `pin_kb_context(question, agent_id, *, client)` — THE one seam
(INV-KB-1), allowlist-gated (`ratatoskr:donut`→"Dungeon Crawler Carl"), timeout-bounded (20s), degrades to [] on any
fail (INV-KB-3, CancelledError propagates). `wt.stream_turn` gained a `memory_context` passthrough (defaults None —
seam-review caught the contract's touch-list undercounting `wt.py`). `TurnHandle.agent_id` + browser sends agent_id.
**CONSULT FOOT-GUN:** an unconstrained Mimir consult LOOPS read_note↔search past 60s; the tuned prompt
"search_library EXACTLY ONCE, no read_note" converges ~3-15s. **KNOWN LIMIT (not a defect):** DCC's fiction index is
weak (scores ~0.02, failed backfill — worldtree-dev item), so grounding is opportunistic; Donut's DCC training
knowledge already grounds her well (live smoke: she answered fully in-voice even when the bridge degraded to []).
- **⏳ PENDING:** heid-code-review (thread `01KZ0324M02E90D3K2Q91JAH0J`) + heid-bug-hunt (thread
`01KZ0351KJRCN4GX8EM4349GVE`) dispatched — awaiting replies, wake-listener armed. Triage + fixup on arrival.
- **OWED (still):** P&P verification re-run to infra-ops on thread `01KYZX0JM1A1AF8ETMFV0AP7E9` (#382 fix deployed b166).
Partial signal: Mimir DOES ground in DCC fiction wing now (bridge smoke), but the specific P&P-dismiss shape unrun.
**Prior design detail → `persistent-memory.d/2026-08-01-donut-voiced-interview-build.md`.**
**✅ SHIPPED + PUSHED since v0.22.0 (origin at `14bbc2b`):** the worldtree-sdk cutover (#20, **v0.22.0**, 7 slices,
494 green — the big one) + **bifrost 1.1.5** (`3ef3a5e`, **v0.22.1**) + **worldtree-sdk 1.0.0→1.1.1→1.1.2**