Skip to content

fix(voice): defer transcripts until chats can accept them - #246

Merged
johnmatthewtennant merged 18 commits into
mainfrom
jtennant/voice-transcript-routing
Aug 30, 2026
Merged

fix(voice): defer transcripts until chats can accept them#246
johnmatthewtennant merged 18 commits into
mainfrom
jtennant/voice-transcript-routing

Conversation

@johnmatthewtennant

@johnmatthewtennant johnmatthewtennant commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Keeps accepted voice transcripts attached to their chat until they can be delivered safely.

  • Retains the bound route while the chat is temporarily busy.
  • Defers delivery during security confirmation, queued-message, history, compaction, project metadata, and workspace-readiness blocks without showing failure UI or consuming the native rejection budget.
  • Preserves pending playback context across a deferred retry.
  • Clears the route when voice is disabled, the chat becomes read-only or non-Goose, or admission fails permanently.
  • Delivers retained transcripts to their original chat once that chat becomes eligible again.
  • Scopes temporary blocking to the authoritative mounted route so duplicate views cannot overwrite delivery readiness.
  • Rechecks live admission before native startup and preserves the failure phase when replacing a voice conversation, avoiding duplicate or misleading errors.

Reviewer-reproducible examples

  1. Start Voice Conversation in a Goose chat and begin a response.
  2. While the response is running, add a follow-up so it appears in the chat composer queue.
  3. Speak another request while the queued follow-up is still present.
  4. Confirm the spoken request remains pending without an error notification and does not jump ahead of the queued follow-up.
  5. Let the queued follow-up dispatch and the chat become eligible again.
  6. Confirm the spoken request is delivered exactly once to the same chat after the queued follow-up.

@johnmatthewtennant johnmatthewtennant changed the title fix(voice): retain queued transcript routes fix(voice): defer transcripts until chats can accept them Aug 29, 2026
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review August 29, 2026 13:03

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

Reviewed the exact three-dot comparison 7dac06f...0b51898 by static inspection only, including all six changed files, the applicable chat law, supplied GitHub checks, allowed anchors, and all supplied review threads. The supplied checks for this head are complete and successful. Final self-check covered the changed voice-transcript admission, deferral, retry, permanent-unavailability, and queued-message flows; accessibility; localization; navigation and consent/security guards; async failure, never-completes, lifecycle, and race behavior; test honesty; design-system/project rules; and duplicate overlap. One blocking multi-view lifecycle race remains; no accessibility, localization, visual-system, or unrelated-law finding was supported by the diff.

Deterministic publication result: 1 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Comment thread src/features/voice-conversation/hooks/useVoiceConversationController.ts Outdated
morgmart
morgmart previously approved these changes Aug 29, 2026

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

Fresh full static review completed for the exact three-dot comparison 7dac06f...0bceb7b. Reviewed all six changed files, applicable chat laws, supplied current-line anchors, the complete supplied thread history, and GitHub check evidence. The earlier mounted-route ownership race is fixed by route-token ownership and is covered by adversarial multi-controller, unmount, navigation, temporary-block, permanent-unavailability, stale-start, and replacement-outcome tests, so it is neither a current finding nor a duplicate suppression. Final self-check covered every changed voice flow (start, delivery, steering, queue ordering, temporary deferral, retry, permanent rejection, navigation/unmount, multi-view ownership, replacement, and startup races); accessibility; i18n/localization; navigation and consent/security-confirmation guards; async error, never-completes, lifecycle, and race behavior; test honesty; design-system and project rules; duplicate/overlap handling; and the evidence/user-effect threshold for blocking severity. No publishable finding remains. All supplied check runs for the exact head completed successfully; the combined commit status is pending with no legacy statuses, so required checks still independently govern merge readiness.

Deterministic publication result: 0 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Pending checks: 1 check(s) are not complete.

This approval reflects the completed code review only; merge readiness remains governed by the repository's required checks.

stack merge was automatically disabled August 29, 2026 23:23

Pull Request is not mergeable

stack merge was automatically disabled August 29, 2026 23:32

Pull Request is not mergeable

Base automatically changed from jtennant/voice-call-routing to main August 30, 2026 02:05
@johnmatthewtennant
johnmatthewtennant requested a review from a team August 30, 2026 02:05

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

Fresh full static review completed for the exact three-dot comparison 33f885e...96a91d9. Reviewed all six changed files, the applicable chat laws, supplied current-line anchors, complete supplied thread history, and GitHub check evidence. The prior mounted-route ownership race remains fixed through mount-scoped route tokens and adversarial multi-controller coverage, so it is not a current finding or duplicate suppression. Final self-check covered every changed voice flow (start, delivery, steering, queue ordering, temporary deferral and retry, permanent rejection, navigation/unmount, multi-view ownership, replacement, stale startup, and failure reconciliation); accessibility; i18n/localization; navigation and consent/security-confirmation guards; async error, never-completes, lifecycle, and race behavior; test honesty; design-system and project rules; duplicate and overlap handling; and concrete evidence plus user effect for blocking severity. No publishable finding remains. Supplied checks for the exact head are structurally valid: nine completed successfully and Tauri Rust checks (macOS) is in progress; required checks independently govern merge readiness.

Deterministic publication result: 0 blocking and 0 non-blocking finding(s) publishable; 0 duplicate(s) suppressed.

Pending checks: 1 check(s) are not complete.

This approval reflects the completed code review only; merge readiness remains governed by the repository's required checks.

@johnmatthewtennant
johnmatthewtennant merged commit 42f17b4 into main Aug 30, 2026
10 checks passed
@johnmatthewtennant
johnmatthewtennant deleted the jtennant/voice-transcript-routing branch August 30, 2026 02:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants