Skip to content

Add meeting language picker and automatic Whisper language detection - #1752

Merged
r3dbars merged 11 commits into
mainfrom
codex/transcription-language
Sep 22, 2026
Merged

r3dbars merged 11 commits into
mainfrom
codex/transcription-language

Conversation

@r3dbars

@r3dbars r3dbars commented Sep 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add a Meeting language picker with Auto and 100 named Whisper languages for new meetings and imported audio. Dictation is unchanged.
  • Add bounded, recording-scoped Whisper language detection. At least two non-overlapping speech-candidate windows must agree, and every sampled observation must be confident; mixed or weak evidence keeps per-segment Auto.
  • Preserve the requested language through capture/import queues, recording journals, recovery, retries, and saved Markdown. Explicit selection requires Whisper; Parakeet retains its existing model-specific behavior without a hidden model switch.
  • Fix a blocker discovered during live testing: duplicate-instance handoff now presents existing controls directly instead of entering an app-modal “already running” alert that can obstruct Stop. The single-instance lock remains intact.

Stack / merge boundary

This is a draft feature PR, not release approval. Its base is the frozen combined verification snapshot codex/audio-release-verification at a2011b07ddc098ec2acf1a4f215cd21cfd17d92f.

That snapshot combines work already tracked in #1747 (audio-only permissions and Meetings creation menu), #1749 (stop-tail regression coverage), and #1751 (existing-functionality fixes). Using it as the base keeps this diff limited to the two new feature/fix commits instead of duplicating all three dependency PRs.

Do not merge this into the integration snapshot as a substitute for shipping. Land/reconcile those dependency PRs first, then rebase/retarget this PR to main and rerun the relevant gates. No dependency PR is merged by this change.

Verification completed

  • App build and signed local launch smoke passed; latest launch-to-interactive result: 651.3 ms.
  • Latest fast suite: 15,057 passed, 0 failed.
  • Feature baseline: Core suite 1,144 reported, 13 skipped, 0 failures; app/Core integration and deterministic E2E passed; CaptureKit 54, CLI 78, MCP 190 passed.
  • Full QA bench at the feature baseline: 13 passed, 0 failed, one separately-covered build skip and one warnings-only empty-artifact check. Overall report remains INCOMPLETE, not a release sign-off. The later nonmodal handoff patch was rebuilt and fast-tested separately.
  • Native UI: selected Whisper Large V3 Turbo, verified cached/Ready, opened the language picker, selected Finnish, imported an audio file, and restored Auto. Six sanitized light/dark component renders are committed under .agent-review/visuals/transcription-language/.
  • Supervised live Finnish video recording: captured system signal, stopped normally with Command-R, saved Finnish text, and retained audio. No stop timeout, audio gaps, or device switches in this run. The mic also heard the speakers, so this is not echo-cancellation or headphones proof.
  • Same captured system track imported twice: Finnish selected → fi / explicit / fi, then Auto → auto / detected / fi. Each saved 73 words / 5 system utterances. No reference transcript was used, so this is functional language/detection proof, not a measured accuracy score.
  • The live dual-track run used automaticUncertain and successfully fell back to per-segment Auto. Do not describe that run as a confident recording-wide language lock.
  • Failed attempts are not counted as passes: an initial managed-browser playback attempt had no captured system signal; another attempt was interrupted after controls became inaccessible, with recovery files preserved. Native menu clicks also produced stale automation IDs after the patch; the successful Stop used the application's keyboard command.

Independent review

  • Full feature diff reviewed independently against the combined base. A retry error-copy problem was corrected.
  • Accepted documentation/test finding: clarify that all observed windows must agree, not a two-of-three quorum; added the [fi, fi, nil] → uncertain regression.
  • Original-model retention finding not adopted: recovery/retranscription intentionally preserves existing current-model behavior. Explicit language is never silently ignored; switching to Parakeet produces guidance to select Whisper. Automatically restoring a historical model could override an intentional model change or redownload removed files. This limitation is documented.
  • The three-file nonmodal handoff fix was independently reviewed against the feature commit: no actionable findings. Source-level tests are not proof of a deliberate second-process collision during active recording.

Remaining release acceptance

  • Compare Auto/preselected English, Finnish, and another language against a known transcript or fluent review.
  • Mixed-language speech and English introductions; short/quiet/noisy/silent input.
  • Headphones/speakers and real-call route checks, with retained playback and normal stop.
  • Native relaunch, queued-job, retry/recovery, and model-switch acceptance; dictation remains unchanged.
  • Deliberate duplicate-process launch during capture, followed by successful Stop.
  • Fresh-install/upgrade, permission denial/recovery, offline/cache/model compatibility, and signed distribution gates on the final combined candidate.

Raw recordings, transcript contents, private logs, and customer data remain local. Nothing has been merged, released, or emailed.

r3dbars and others added 11 commits September 19, 2026 05:57
The recording-end tail drop in the Core Audio tap change is fixed in
4765e68: stop arms the attempt's tail admission before the recording
generation advances, finishes and drains the backend instead of
cancelling it, and AudioStopCleanup closes the system writer on the same
serial file queue behind the drained writes.

Nothing pinned that wiring. CoreAudioSystemAudioCaptureTests covers the
backend drain and the admission window in isolation, but no test
exercised Audio.stop's ordering, and no CI job records real audio, so
moving either line would silently truncate the end of every saved
meeting.

Add SystemAudioStopTailHandoffTests: an end-to-end pass through the real
AudioStopCleanup scheduler asserting a queued ring tail reaches the WAV
before the writer closes, the cancellation counterpart asserting a
superseded attempt still discards its tail, and a source-order contract
for the two orderings inside Audio.stop that no unit test can observe.

Also correct the stale "Deferred P2" bullet in the probe README, which
still described the tail drop as unresolved.

No production code changes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NwYbJHm2aXJogYcYKEps2s
@r3dbars
r3dbars changed the base branch from codex/audio-release-verification to main September 22, 2026 11:35
@r3dbars
r3dbars merged commit 6ca9139 into main Sep 22, 2026
4 of 7 checks passed
@r3dbars
r3dbars deleted the codex/transcription-language branch September 22, 2026 11:59
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