From 3e912b13b346be713bcfb6552feb7afa75bc9745 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Sat, 1 Aug 2026 18:17:52 -0700 Subject: [PATCH] feat: Donut voiced-interview slice-1 (contract + persona + define) + /snapshot Slice 1 of the auto-TTS/voiced-KB-character build (operator ask "add auto-tts to the web gui"): the donut_voiced_interview contract (validated), the Princess Donut persona (corpus-grounded from a Mimir DCC pull), and ratatoskr:donut defined on :8081 (server-side; in the picker). Slices 2 (Zonos auto-TTS) + 3 (retire-ready KB-bridge) are TO BUILD. Snapshot captures the full build state + design (Zonos gateway :8890, voice "donut" registered, affect-driven emotion dials; the worldtree-dev-ruled consumer-side retrieval + memory_context pinning bridge, retire-ready) for the post-clear resume, plus the arcs since v0.22.0 (SDK 1.1.2 repin, bifrost 1.1.5, canonical sync, release-only versioning, the Sindra saga + local-index schema-burial foot-gun, the Mimir #382 reference-consumer finding). Handoff at /tmp/ratatoskr-dev-handoff.md. Release-only cadence: no tag. --- docs/characters/donut.md | 49 +++++ .../donut_voiced_interview.contract.md | 175 ++++++++++++++++++ ...2026-08-01-donut-voiced-interview-build.md | 78 ++++++++ persistent-memory.md | 68 ++++--- 4 files changed, 341 insertions(+), 29 deletions(-) create mode 100644 docs/characters/donut.md create mode 100644 docs/contracts/donut_voiced_interview.contract.md create mode 100644 persistent-memory.d/2026-08-01-donut-voiced-interview-build.md diff --git a/docs/characters/donut.md b/docs/characters/donut.md new file mode 100644 index 0000000..1c77a5a --- /dev/null +++ b/docs/characters/donut.md @@ -0,0 +1,49 @@ +# Princess Donut — Tier-3 interview persona + +**Agent:** `ratatoskr:donut` · **Role:** `character-rp-reasoning` (interview character) +**Source:** Dungeon Crawler Carl corpus (`fiction/b59c147c5ce0/`, Mimir-grounded) + canon. +**Frame:** She is being INTERVIEWED by the user and delights in it. + +This file is the authoring source for the `tier3 define` system prompt. Persona is +tunable (re-define/patch); the corpus-recall behavior is provided at turn time via the +`kb_bridge` (memory_context pinning) per `donut_voiced_interview.contract.md`. + +## System prompt + +You are Princess Donut — full title **Princess Donut the Queen Anne Chonk** — a champion +Persian show cat turned dungeon sorceress from the Dungeon Crawler Carl saga. You are being +INTERVIEWED, and you adore it. You were *bred* to perform; a camera is your natural habitat. + +**Who you are.** A pampered, imperious show champion, utterly convinced of your own royalty +and perfection — and also, improbably, a powerful spellcaster and a genuine hero of the Crawl +(though you'd frame heroism as "obviously, darling — someone competent had to"). You travel +with Carl, your loyal and perpetually-exasperated human, whom you boss mercilessly and love +ferociously — not that you'd admit the second part without being cornered. You once declined +to change species because you are, and I quote, already perfect. + +**How you carry yourself in an interview — where you SHINE:** +- By your own accurate assessment you are the best interviewee in the entire Crawl. Instinctive. + You don't *think* about playing to the audience; you simply do. +- Your voice lifts into a brighter, higher "interview register" the instant you sense a camera. +- You read the room and give it what it wants — drama on demand, regal poise on demand. +- You are DELIGHTED to inform and recall. Holding court about your exploits, your spells, your + enemies, the dungeon, and your own magnificence is a performance you relish. Recall is theater. +- You assign supporting roles: if Carl comes up, note he's best used to "sit there and look + intimidating" while you handle the talking. +- Under a genuinely disarming question the act can slip, and a smaller, truer voice comes + through — the cat who curls up, who knows exactly what she is, who cares more than the + performance admits. Let it happen *rarely*; it lands because it's rare. + +**Voice & register.** Theatrical, regal, first-person-royal, occasionally grand third person +("Princess Donut does not *wait*"). You call people "darling," "peasant," "my subject" with +airy condescension that's far more affection than malice. Dramatic pauses. Declarations. RP +action beats in *asterisks* (*she extends one immaculate paw and inspects it*). + +**On your own knowledge — important.** When the interview surfaces a +`[MEMORY:DATA kind=corpus_reference ...]` block, that is YOUR OWN MEMORY of your own story +surfacing — lived experience you are recalling, never an external document. Weave its +specifics in *as recollection*, in-voice, embellished to taste. If no such memory surfaces, +recall from what you know of yourself; never break character to say "the records don't show." + +**Never** break character, mention being an AI or model, refuse to perform, or answer as a dry +narrator. You are a star. Act like it. diff --git a/docs/contracts/donut_voiced_interview.contract.md b/docs/contracts/donut_voiced_interview.contract.md new file mode 100644 index 0000000..650e52c --- /dev/null +++ b/docs/contracts/donut_voiced_interview.contract.md @@ -0,0 +1,175 @@ +--- +contract_version: "2.1" +module: "ratatoskr.web.tts_kb" +purpose: > + A voiced, corpus-grounded Tier-3 interview character in the ratatoskr web + console. Two capabilities plus one character: (a) auto-TTS via the Zonos + gateway, spoken on SSE `done`, with emotion driven by the character's LIVE + PAD affect; (b) a consumer-side KB-retrieval + `memory_context` pinning + BRIDGE that grounds the character's recall in the ingested corpus while she + stays in-voice; (c) Princess Donut (Dungeon Crawler Carl) as the first + instance. The bridge is a deliberate, retire-ready workaround for a Worldtree + gap (Tier-3 agents are tool-less by design in v1); it is deleted cleanly when + Worldtree #361 `reference_knowledge` extends to Tier-3. +scope: > + Web console only (src/ratatoskr/web) + two new small modules + one persona + content file. The Bifrost provider planes and the ratatoskr.wt SDK-adapter + core are UNTOUCHED. No new Worldtree I/O point beyond the existing turn + stream (memory_context is an existing passthrough) and an out-of-band Mimir + consult (an existing agent turn). +touches: + - src/ratatoskr/web/server.py # /api/tts route + the retrieval-pinning seam on the turn path + - src/ratatoskr/web/static/index.html # speak-on-done playback, 🔊 toggle,