The internal interruption note is now separate from generated dialogue. Closing requests such as “Danke, das reicht” are recognized as Stop commands.
The old memory entry prepended an English bracketed playback warning to an assistant message. The LLM could copy it; sentence splitting could even turn its internal periods into separate output chunks. Playback uncertainty is now structured metadata and an internal system instruction. Legacy history is cleaned, the known note is suppressed before TTS framing/compact synthesis, and the UI guards against old payloads.
The Stop pipeline uses local multilingual Laya plus direct literal commands, followed by existing acoustic confirmation. “Danke, das reicht” was excluded by the caller's vocabulary gate; “Halt die Klappe” reached Laya but lacked the direct-command treatment. Both paths are corrected without relaxing the background/rival/echo guards.
| Check | Result |
|---|---|
| Offline regression checks | 457 passed |
| Real Laya: three Stop phrases, three negative controls | 6/6 correct decisions |
| Real Qwen/Cerebras follow-ups after interrupted history | 2/2 without internal note |
| HTTPS Chromium with an injected legacy reply | Latest-reply card and chat contain only the answer |
| New ASR → speaker check → actual playback cancellation | First attempt blocked; later run: 0/4 positive noisy cancellations, negated control preserved, spin follow-up timed out |
The first blocked attempt and later failed run are both retained. A clean audit also found poor recognition of the synthetic blunt-Stop take. Text/model/UI checks do not prove noisy acoustic interruption reliability. The earlier strict Stop/Wait matrix passed 6/8; its remaining misses have not been reclassified as fixed.
python check_completion_decisions.py python browser_completion_stop_check.py --prepare --url http://127.0.0.1:8793
Restore the pinned v2 fixtures and install Playwright/Chrome first. The browser script reuses the existing paced 16-kHz input harness, prepares three one-take public synthetic clips, and records every attempt. It never disconnects someone else's session. No private microphone recordings or enrolled voiceprints are published.
Before: caller and Laya decisions · After: actual Laya decisions · Browser attempt · Real LLM outputs · UI check · Full protocol · Earlier acoustic stress report