Repository navigation
feat(voice): start answering before transcription finishes - #448
Merged
Merged
Conversation
johnmatthewtennant
force-pushed
the
jtennant/goose/voice-early-delivery
branch
from
October 29, 2026 14:45
dcd9309 to
9c37091
Compare
johnmatthewtennant
marked this pull request as ready for review
October 29, 2026 16:45
johnmatthewtennant
force-pushed
the
jtennant/goose/voice-early-delivery
branch
from
October 29, 2026 17:01
af9a1c2 to
137b3ec
Compare
morgmart
requested changes
Oct 29, 2026
morgmart
left a comment
Collaborator
There was a problem hiding this comment.
🤖 Automated code review
Engineering found three blocking issues in the exact full PR comparison: corrected speech can block indefinitely behind a speculative run, provisional recognition retains ordinary tool authority before final confirmation, and late finals can be assigned to a newer utterance. The supplied GitHub evidence is structurally valid and all ten captured checks completed successfully, but required checks still independently govern merge readiness. Recommendation: REQUEST_CHANGES.
Deterministic publication result: 3 blocking and 0 non-blocking inline finding(s) publishable; 0 duplicate(s) suppressed; 0 blocking screenshot-evidence requirement(s) in this review body.
johnmatthewtennant
marked this pull request as draft
October 29, 2026 17:51
johnmatthewtennant
marked this pull request as ready for review
October 29, 2026 18:36
johnmatthewtennant
force-pushed
the
jtennant/goose/voice-early-delivery
branch
from
October 29, 2026 22:32
2eb65ad to
bbca4c2
Compare
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
…ered app Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
johnmatthewtennant
force-pushed
the
jtennant/goose/voice-early-delivery
branch
from
October 30, 2026 01:52
372deaa to
757b78a
Compare
Signed-off-by: John Matthew Tennant <jtennant@block.xyz>
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.
Summary
Voice calls currently wait for finalized recognition before the agent can begin answering. Berd now prepares a private draft when the user pauses, enabled by default, without adding visual states. Voice settings includes an “Early delivery (experimental)” switch, on by default; explicitly saved off remains off. Disabling it immediately discards private preparation and leaves final-only delivery unchanged. Preparation uses a session hidden at creation, with the same configured provider/model and backend-enforced chat-only mode, so provisional recognition cannot execute tools or steer an unrelated run.
Only the final transcript enters the normal chat with execution authority. Preparation receives only the provisional transcript, not copied conversation history. A completed draft is assistant-only context, never a substitute for answering or carrying out the final request. Final delivery waits at most 750 ms for preparation; stalled or unsupported preparation is discarded without blocking later speech. Late native finals retain their original recognition IDs even after recognition holds expire.
The change preserves the queue ordering and dispatch requirements in
LAWS/CHAT.mdand configured-agent requirement inLAWS/AGENTS.md.Related issue
None found.
Testing
Rendered-app scenarios exercise the production controller and ACP paths with native recognition and the model substituted at their boundaries:
Mutation checks reject invoking provisional inference without chat-only mode. Native regressions cover hold expiry, a new provisional utterance, then old and new finals retaining their matching IDs.
The isolated-draft implementation has not been exercised with a live macOS microphone.
Screenshots