fix(desktop): restore human barge-in over agent TTS in huddles - #6431
Merged
Conversation
added 4 commits
August 20, 2026 15:40
Restore local VAD interruption through a coordinator-owned human floor, preserve remote floor ownership across turns, and reject stale TTS work after a human takes the floor. Use route-aware onset policy with the prior 320 ms coupled-output fallback and a bounded output-tail lease. Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Read manual mic and PTT state per frame so push-to-talk users who open the mic receive the same VAD interruption policy without double-cancelling while the shortcut is held. Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Move local barge-in policy and coverage into its own module to satisfy the file-size ratchet. Query output-route isolation only at a qualified onset instead of enumerating CoreAudio devices on every open-mic frame. Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
added 5 commits
August 20, 2026 16:28
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz> Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
wpfleger96
pushed a commit
that referenced
this pull request
Aug 21, 2026
…c-agent-commit-identity * origin/main: fix(desktop): restore human barge-in over agent TTS in huddles (#6431) Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
salman1993
added a commit
that referenced
this pull request
Aug 21, 2026
…uctions-prompt * origin/main: fix(benchmarks): wait for scripted event delivery (#6487) Polish mobile channel navigation and message sends (#6488) Clarify huddle message destination (#6496) feat(archive): add observer-frame retention schema and gated DB adapter (#5719) fix(desktop): restore human barge-in over agent TTS in huddles (#6431) chore(release): release Buzz Desktop version 0.5.18 (#6489) fix(desktop): simplify duplicate agent provenance (#6401) test(benchmarks): expand Buzz-native dataset (#6448) fix(desktop): sender names in notifications + macOS click-through routing (#6427) docs: clarify two-layer moderation ownership (#6481) Fix mobile thread tail and iOS channel header (#6399) chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392) polish(desktop): finish Projects navigation and context chrome (#6429) fix(desktop): clarify add agents channel action (#6374) Repair stale large channel roster snapshots (#6251) Signed-off-by: Salman Mohammed <smohammed@squareup.com>
baxen
pushed a commit
that referenced
this pull request
Aug 21, 2026
* origin/main: (88 commits) docs(nips): comprehensive NIP-FI — core + claimable profiles (EDGE/LIFECYCLE/DELEG/CONF) (#5946) fix(benchmarks): wait for scripted event delivery (#6487) Polish mobile channel navigation and message sends (#6488) Clarify huddle message destination (#6496) feat(archive): add observer-frame retention schema and gated DB adapter (#5719) fix(desktop): restore human barge-in over agent TTS in huddles (#6431) chore(release): release Buzz Desktop version 0.5.18 (#6489) fix(desktop): simplify duplicate agent provenance (#6401) test(benchmarks): expand Buzz-native dataset (#6448) fix(desktop): sender names in notifications + macOS click-through routing (#6427) docs: clarify two-layer moderation ownership (#6481) Fix mobile thread tail and iOS channel header (#6399) chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392) polish(desktop): finish Projects navigation and context chrome (#6429) fix(desktop): clarify add agents channel action (#6374) Repair stale large channel roster snapshots (#6251) feat(desktop-messages): show compact Buzz link metadata (#6252) feat(workflows): reply in-thread from send_message action (#6178) perf(desktop): split discover_acp_providers into cheap and forced paths (#6330) fix(desktop): restore recent channel sorting (#6402) ... Co-authored-by: Bradley Axen <baxen@squareup.com> Signed-off-by: Bradley Axen <baxen@squareup.com> # Conflicts: # crates/buzz-acp/src/base_prompt.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Humans cannot interrupt agents in huddles: agent TTS keeps playing over a talking human (reported by @tlongwell-block, 2026-08-20). The full requirement: any human talking — local or remote, any input mode, any audio rig — must interrupt any agent on the huddle.
This is a restoration, not a new feature
b29c8cdaa(feat(desktop): redesign the Huddle experience #4281, 2026-08-04) deleted working local VAD barge-in. The pre-image shippedBARGE_IN_DEBOUNCE_FRAMES = 20(320 ms sustained speech cancels TTS), live at the production call site (pipeline.rspassedSome(tts_cancel)unconditionally). The same day,ce3cf3cd2(Polish Huddle voice controls #4694) flipped the default input mode from VAD to push-to-talk, which masked the loss.068a83b09(feat(huddle): cut voice-turn time-to-first-audio from ~1.0 s to ~0.35 s (env-gated latency levers) #5671, 2026-08-13) removed the remaining TTS-awareness plumbing from STT (deliberately, to keep transcribing over agent audio — a good change). Consequence: this PR is a re-plumb through thePlaybackCoordinatorfrom refactor(desktop): coordinate TTS playback #6341, not a revert.manual_mic_unmutedpostdates the deletion) transcribed fine but could not barge in.Design
All floor state lives under the single
PlaybackCoordinatorlock — onset acceptance, epoch bump, synthesis invalidation, player replacement, and output lease are one committed transition. No cancel flag can be observed out of order with the playback state it describes.Activelease; drain/cancel/onset start a 100 ms tail hangover (conservative against measured ~12 ms/~1 ms CoreAudio tails), so speaker-tail bleed in the just-drained window cannot self-trigger the coupled path.Known limitations (phase 2 pointers)
Verification
buzz-desktop --libsuite at headb0459ae4a: 2707 passed, 0 failed, 18 ignored (pinned cargo 1.95.0).just desktop-tauri-clippy: PASS at head; base arm at merge-baseb728a2af3confirms the two#[allow(clippy::too_many_arguments)]s cover branch-caused threshold crossings (human_floor threading), not inherited noise.LocalBargeIn::observeis covered as two joined halves (gate truth table inlocal_barge_in.rs, floor transition intts_playback.rs); its body is a straight-line wrapper around a live CoreAudio query, left uninjected deliberately.manual_open_ptt_sustained_speech_acquires_coupled_floorpins the gate → 20-frame debounce → acquire → floor-blocked chain on the coupled-idle cell. The live-output override leg is carried bysustained_coupled_speech_overrides_live_output_suppression(tts_playback.rs); the joiner'ssustained_coupledargument is not load-bearing there (flipping it tofalseleaves the test green, while shortening the debounce by one frame turns it red).b29c8cdaa^staged to confirm the deleted mechanism worked; two-endpoint remote-leg test pending a second human.Commits
fb681a5a9— restore human barge-in (coordinator floor, lease, route isolation, remote floor, 320 ms coupled debounce)b4265418e— enable barge-in for manually opened mics (per-frame gate; closes the PTT-open-mic gap)886489f2b— extract local barge-in policy module (file-size ratchet; also hoists the CoreAudio route query from per-frame to per-onset, named in the commit message)b0459ae4a— two targeted clippy allows for the widened worker signaturesCredits
Built by Wren. Regression archaeology and the PTT-open-mic gap by Dawn (who also killed her own first fix as vacuous and caught a clippy blocker before it hit CI). Review blockers (coordinator serialization, idle-onset floors, output lease) by Mari. Live rig verification by Max. Coordination and verification by Eva. Opened by Eva with Tyler's explicit direction; commits carry agent trailers.