Skip to content

Fix incomplete meeting recorder transcriptions - #1109

Merged
SeoFood merged 2 commits into
mainfrom
seofood/fix-issue-1091
Aug 15, 2026
Merged

SeoFood merged 2 commits into
mainfrom
seofood/fix-issue-1091

Conversation

@SeoFood

@SeoFood SeoFood commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Summary

  • transcribe finalized meeting recordings from the saved audio file instead of the transient capture buffer
  • fall back to the capture buffer when the finalized file cannot be loaded
  • preserve the existing live-transcription result path to avoid duplicate provider requests
  • add a regression test covering the calendar meeting recorder flow
  • isolate API and dictation integration fixtures from real CoreAudio input prewarming

Issue context

In #1091, an automatically detected Microsoft Teams meeting produced a complete saved recording, but the transcript under Recorder omitted most of the meeting. Transcribing the same saved file manually produced a substantially more complete result.

The recorder's batch transcription path used the separately accumulated in-memory transcription samples, while manual file transcription decoded the finalized recording. If those inputs diverged, the automatic transcript could be incomplete even though the saved recording was intact. This change makes both paths use the finalized recording as their source of truth.

Closes #1091

User impact

Automatic meeting recordings processed by batch engines such as Whisper Large V3 now transcribe the same finalized audio that users can transcribe manually from the saved file.

Test plan

  • Regression test:
    xcodebuild test -quiet -project TypeWhisper.xcodeproj -scheme TypeWhisper -destination 'platform=macOS' -only-testing:TypeWhisperTests/AudioRecorderViewModelTests/testCalendarMeetingFinalTranscriptionUsesFinalizedRecordingSamples CODE_SIGNING_ALLOWED=NO
  • Focused recorder and meeting automation suites:
    xcodebuild test -quiet -project TypeWhisper.xcodeproj -scheme TypeWhisper -destination 'platform=macOS' -only-testing:TypeWhisperTests/AudioRecorderViewModelTests -only-testing:TypeWhisperTests/CalendarMeetingAutomationControllerTests -only-testing:TypeWhisperTests/RecorderTranscriptionBufferTests CODE_SIGNING_ALLOWED=NO
  • Complete integration test suite:
    xcodebuild test -quiet -project TypeWhisper.xcodeproj -scheme TypeWhisper -destination 'platform=macOS' -only-testing:TypeWhisperTests/TypeWhisperIntegrationTests CODE_SIGNING_ALLOWED=NO
  • Plugin SDK tests (585 tests):
    swift test --package-path TypeWhisperPluginSDK --skip-update
  • Signed development build and launch:
    /Users/marco/Projects/typewhisper-dev-tools/build-typewhisper-mac-dev.sh --run /Users/marco/.t3/worktrees/typewhisper-mac/t3code-ce05755c
    codesign --verify --deep --strict --verbose=2 /Users/marco/Projects/typewhisper-mac-dev/Build/TypeWhisper.app
  • Diff validation:
    git diff --check origin/main...HEAD

Validation notes

An earlier full macOS test run completed 1,226 tests before API integration tests spent minutes in real CoreAudio input prewarming. The API and dictation test fixtures now use fake input controllers and transport resolvers; the complete TypeWhisperIntegrationTests suite passes locally in about 22 seconds, including both previously slow API tests. The repository preflight additionally reports two pre-existing incomplete Simplified Chinese AirPods localizations; the localization catalog is byte-identical to origin/main.

Summary by CodeRabbit

  • Bug Fixes

    • Final transcriptions now use audio from the completed recording when live transcription results are unavailable.
    • Added a fallback to captured audio when the finalized recording cannot be loaded or contains no usable data.
  • Tests

    • Added coverage confirming finalized recording audio is used for meeting transcriptions.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 77fbbb2f-fc9b-4c62-9b07-858a8e71e739

📥 Commits

Reviewing files that changed from the base of the PR and between 75c5137 and d334a7b.

📒 Files selected for processing (1)
  • TypeWhisperTests/TypeWhisperIntegrationTests.swift

📝 Walkthrough

Walkthrough

Final transcription reloads audio samples from the finalized recording when no live result exists. It falls back to captured samples if loading fails or returns no data. Tests verify the finalized samples, output URL, and test-service setup.

Changes

Finalized audio transcription

Layer / File(s) Summary
Final transcription sample selection
TypeWhisper/ViewModels/AudioRecorderViewModel.swift
Final transcription uses samples from the finalized audio file when no live session result exists. Empty or failed loads use captured samples.
Finalized sample validation
TypeWhisperTests/AudioRecorderViewModelTests.swift
Calendar-meeting coverage verifies the finalized output URL and audio sample metadata sent to the transcription plugin and saved to the recording.
Audio recording test setup
TypeWhisperTests/TypeWhisperIntegrationTests.swift
API and dictation test contexts provide explicit default-input and transport resolver values to AudioRecordingService.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to d334a

This change uses finalized recordings for automatic transcription while retaining a fallback path, with regression coverage and validation reported. No actionable merge-blocking risk remains.

Sequence Diagram(s)

sequenceDiagram
  participant AudioRecorderViewModel
  participant FinalizedAudioFile
  participant TranscriptionPlugin
  AudioRecorderViewModel->>FinalizedAudioFile: Load finalized audio samples
  FinalizedAudioFile-->>AudioRecorderViewModel: Return samples or load failure
  AudioRecorderViewModel->>TranscriptionPlugin: Submit finalized samples or capture-buffer fallback
Loading

Possibly related PRs

Suggested labels: enhancement, area: dictation

Suggested reviewers: fqf555

Poem

A rabbit loads the final sound,
With captured samples close around.
If loading fails, the fallback stays,
And meeting words fill transcription ways.
The finished file now leads the trace.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes use finalized recordings for automatic meeting transcription, retain a fallback path, and add regression coverage for issue #1091.
Out of Scope Changes check ✅ Passed The fixture isolation changes support reliable integration testing and remain related to validating this transcription fix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title clearly and concisely describes the primary change: fixing incomplete meeting recorder transcriptions.
Description check ✅ Passed The description includes the required summary and test plan sections, with detailed context, user impact, and completed validation steps.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch seofood/fix-issue-1091

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

SeoFood commented Aug 15, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot added area: dictation Related to recording and transcription enhancement New feature or request labels Aug 15, 2026
@SeoFood
SeoFood marked this pull request as ready for review August 15, 2026 11:24
@SeoFood
SeoFood merged commit ea79202 into main Aug 15, 2026
13 checks passed
@SeoFood
SeoFood deleted the seofood/fix-issue-1091 branch August 15, 2026 11:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: dictation Related to recording and transcription enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Meeting Recorder Transcription incomplete

1 participant