Skip to content

Show a "Mic only" note when a meeting records just the mic - #1794

Merged
claude[bot] merged 8 commits into
mainfrom
claude/project-thread-g2gzc0
Sep 24, 2026
Merged

claude[bot] merged 8 commits into
mainfrom
claude/project-thread-g2gzc0

Conversation

@claude

@claude claude Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Justin · project thread

Before: if someone tapped Don't Allow on the call-audio prompt once, every later meeting quietly recorded only their mic. The app remembered "mic only", skipped the question, and nothing on screen said the other side of a Zoom call wasn't being recorded.

After: the recording pill shows a small Mic only note. When the pill rests, a small mic glyph stays in front of the timer for the whole meeting. Clicking the note turns call audio on: the macOS box if macOS never asked, otherwise System Audio Recording in System Settings. The note then flips to Call audio on once macOS says yes. The Zoom/Meet "Record?" prompt says "Call audio is off, so only your side will be recorded." when Record will really start mic only without asking. The mid-meeting "System audio not verified / unavailable" warning gets a Check Access button.

The note is a quiet label, not a prompt. It never pops over a call and never stops the pill from resting, so someone recording an in-person meeting on purpose isn't nagged.

Default to confirm at the Mac test: the resting-capsule mic glyph (the review's S1 pick) keeps the cue visible for the whole meeting. If Justin finds it noisy, drop it and the note shows at the start and on hover only.

#1787 is merged; this PR is now based on main with main merged in (b27783a), and CI is on.

Why

Batch 2 items 3 and 4 in the next-release plan: a declined call-audio prompt should never silently turn every later call into a one-sided transcript. The saved Markdown side is #1787's mic_only: true; this PR's pill wording matches it.

Product Impact

  • Affects: meetings
  • Lane: meeting reliability
  • Why this matters: a one-sided transcript of a call is the worst silent failure a meeting recorder can have.

What changed

  • Sources/Meeting/MeetingMicOnlyNotice.swift (new, Foundation-only): note states, what a click does per macOS answer, the bounded re-check (2s, about ten minutes, restarted by another click), when the call prompt says mic only, "Turn It On" then Don't Allow at start, copy, and which warnings get Check Access (not when macOS says access is already on).
  • MeetingSessionController: publishes micOnlyNotice for any start without the system tap, and after start when a "Turn It On" start reads denied; turnOnCallAudioFromMicOnlyNotice() with an in-flight guard; checkSystemAudioAccessFromWarning(). Every stop path clears the note and cancels the re-check. This recording stays mic only either way; the next meeting records both sides.
  • MeetingOverlayRootView / MeetingOverlayController: the note sits between timer and waveform (pill widens to 356pt), becomes a mic glyph in the resting capsule (144pt), wakes the pill once when it flips to "Call audio on", and stays through stopping so Stop doesn't slide. Prompts can carry a left-aligned third button.
  • CapturePillController + TranscriptedApp: the detected-call prompt swaps its detail line when access is denied and mic only is remembered.
  • Shorter unverified warning line: "Mic is recording. Check System Audio access."
  • Fast test Tests/MeetingMicOnlyNoticeTests.swift; docs in Sources/Meeting/CLAUDE.md and Sources/UI/CLAUDE.md.

How I checked it

  • scripts/dev/agent-preflight.sh
  • python3 scripts/dev/check-build-source-lists.py, check-duplicate-declarations.py, bash -n on the runner
  • Deep review (no blockers; S1, S2 via Mic-only meetings don't start the call-audio tap #1787's mic_only: true, M1 to M7 and M10 handled; M8 and M9 left as noted)
  • bash build.sh --no-open (no Swift toolchain in this session; CI runs it)
  • bash run-tests.sh (same)
  • bash run-integration-smoke.sh (same)
  • Manual check: Mac steps written for Justin (note, remembered mic-only, resting cue, Settings round trip, call prompt line)

Risk Review

  • Privacy / local-first behavior reviewed: new diagnostics are local DiagnosticsTrail info events with TCC status and action names only
  • Storage path or migration impact reviewed: none
  • Public-facing copy stays concrete and matches current product scope
  • Release/update impact reviewed: none
  • Agent PRs stay draft until human review
  • UI changes include sanitized .agent-review/visuals/ evidence (needs a Mac run)
  • No private transcripts, audio, tokens, personal paths, or customer data are included

Notes

Agent handoff

COORD_DONE: BRIEF | this PR | Mic only note + resting cue + Check Access + call prompt line | close #1761 after this lands (Justin's OK) | resting cue default | preflight, source lists, dup decls, deep review | CI on main merge, then Mac test

🤖 Generated with Claude Code

https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV

After one Don't Allow, later meetings skip the question and record only
the user's mic, and #1787 no longer marks them degraded, so nothing on
screen said the other side of a call wasn't recorded.

- The recording pill shows a quiet "Mic only" note for any meeting that
  never built the system-audio tap. Clicking it shows the macOS box if
  macOS never asked, otherwise opens System Audio Recording settings,
  then re-reads macOS every 2s so the note flips to "Call audio on"
  (this recording stays mic only; the next one records both sides).
  It never blocks the pill from resting.
- The detected-call prompt says "Call audio is off, so only your side
  will be recorded." when access is denied.
- The mid-meeting "not verified" / "unavailable" system audio warning
  gets a Check Access button (redo of #1761's piece), and a shorter
  unverified line.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV
@claude claude Bot assigned r3dbars Sep 23, 2026
@claude
claude Bot requested a review from r3dbars September 23, 2026 21:38
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV
- Call prompt only says "only your side" when Record really won't ask
  (denied and mic only remembered).
- A second click on the note can't raise another macOS request while
  the first is waiting.
- Check Access isn't offered when macOS says access is already on.
- "Turn It On" then Don't Allow at start now shows the note too.
- Accessibility help follows the note's state; doc comment placement.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV

# Conflicts:
#	Sources/Meeting/CLAUDE.md
@claude claude Bot mentioned this pull request Sep 23, 2026
10 of 12 tasks
- The resting capsule shows a small mic glyph before the timer while a
  recording is mic only and call audio is still off, so "only your
  side" stays visible after the pill rests, not just for 6 seconds.
- The access re-check stops after about ten minutes; another click
  starts it again.
- The pill keeps the note through stopping, so it doesn't shrink and
  slide Stop under the cursor mid-stop.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhbLPLFZT72TB1NQbFLCAV
Base automatically changed from claude/mic-only-skip-system-tap-tuprff to main September 24, 2026 02:14
@claude
claude Bot marked this pull request as ready for review September 24, 2026 03:39
@claude
claude Bot merged commit edc59da into main Sep 24, 2026
7 checks passed
@claude
claude Bot deleted the claude/project-thread-g2gzc0 branch September 24, 2026 03:39
r3dbars pushed a commit that referenced this pull request Sep 24, 2026
Keep both sides in the meeting overlay: the saved/error pill Open,
progress and failed-row subscriptions sit next to the mic-only notice,
Check Access button and their tooltips.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MGacyW51MJ3Hq87uKs3xWC
claude Bot pushed a commit that referenced this pull request Sep 24, 2026
…st Mic + call audio

Resolved per release/merge-notes/1796-vs-1787-1794.md: keep both sides in
the controller; #1794's unverified line plus the unheard-playback copy;
the recovered notice's OK-only display before #1794's Check Access
display; the hidden-primary rule alongside #1794's new buttons.

Check Access now covers "can't hear the call" while macOS doesn't say
access is on (a tap without access hears only zeros), and not the
recovered notice. Tests added.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgXMcLRGBtiSiybdgyD1VJ
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