feat(gateway): butler filler line while Tatlock works

Tatlock turns take 10-25s, which is a long silence after a request. Speak
a canned "Let me check on that for you, sir" immediately (synthesized once
and cached), then re-assert the thinking state so the device keeps its
effort-face spinner up until the real reply arrives. On the device, guard
the playback-done handler so the filler audio finishing doesn't drop the
spinner back to idle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKPbR6DY2JygHbyLjxm7Uu
This commit is contained in:
2026-07-15 21:29:35 +02:00
co-authored by Claude Opus 4.8
parent 6b7fbb60c9
commit 09f8afcadd
4 changed files with 37 additions and 1 deletions
+6 -1
View File
@@ -122,7 +122,12 @@ static void app_task(void *arg)
void app_on_playback_done(void)
{
face_set(FACE_IDLE);
/* Only fall back to idle if we're still the speaker. After the butler filler
* line, the gateway re-asserts "thinking" (FACE_EFFORT) while Tatlock works —
* don't clobber that spinner when the filler audio finishes. */
if (face_get() == FACE_SPEAKING) {
face_set(FACE_IDLE);
}
}
#if FACE_LOADTEST