Repository navigation
Suggest calendar invitees as names in speaker review - #1853
Merged
Merged
Conversation
When a calendar event overlaps a saved meeting, its invitees show up as one-click name buttons on each speaker review row and lead the name list. A 1:1 with one unnamed remote voice gets the other invitee pre-filled; the user still presses Save. Suggestions only: silent auto-naming is unchanged. Invitee names are read from EventKit on demand, only when calendar access was already granted, and are never logged or sent off the Mac. Imported recordings are skipped. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3Eka9wHqsZQvPs8X2XAGP
An event now counts only when the recording started in the same window the record-this-meeting pop-up uses (a minute before to five minutes after the event's start). Before, any event covering half the recording counted, so a second call later in a long calendar slot picked up the first meeting's invite list. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3Eka9wHqsZQvPs8X2XAGP
Review rows leave out voices that were already named silently, so one review row could sit next to an auto-named invitee. The pre-fill now also needs the transcript's system_speakers to be 1, and skips when that count is unknown. From the deep review (M1). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3Eka9wHqsZQvPs8X2XAGP
r3dbars
marked this pull request as ready for review
September 25, 2026 17:09
6 tasks done
r3dbars
pushed a commit
that referenced
this pull request
Sep 25, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CbeBca5tWoYd38bopu4dF1
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.
Requested by Justin · project thread
Why
Before: after a meeting, speaker review asks "who is Speaker 1?" and you type every name, even though your calendar already knows who was on the call.
After: when the recording started with a calendar event, that event's invitees show as one-click name buttons on each review row and sit at the top of the name list. In a 1:1 where the meeting heard one remote voice, the other invitee's name is filled in; you still press Save.
"Started with" means the recording began in the same window the "record this meeting?" pop-up uses: from a minute before to five minutes after the event's start. It doesn't matter whether you started from the pop-up or the hotkey (Justin's pick). A call that just falls inside a long calendar slot gets no names. For example, if a 1-hour meeting ends after 15 minutes and someone else calls at minute 30, that call gets no suggestions (Justin's ask).
This is option A from Justin's naming brainstorm: suggestions only. Silent auto-naming (0.92 similarity, 0.12 margin, 5 confirmed meetings) is unchanged. Option B (fewer confirmations when the calendar agrees) waits for an eval.
Product Impact
meetingsmeeting reliabilityWhat changed
Sources/Support/MeetingInviteeSuggestionPolicy.swift(new, Foundation-pure):MeetingPromptHeuristics.calendarReminderLeadTimebefore andcalendarReminderPostStartGraceafter the event's start. Those are the pop-up's own constants, and a test pins them equal.first.last, so a raw email is never shown.system_speakersis 1, and the one remote row has no suggestion. So a guest sitting next to an auto-named invitee isn't handed their name.Sources/Meeting/MeetingInviteeCalendarReader.swift(new): read-only EventKit lookup on a background queue. It only runs when calendar access was already granted and never asks for it. It keeps events with no meeting link, so in-person meetings count, and it includes the organizer.Sources/UI/Settings/SpeakerNamingSheet.swift:system_speakersfrom the saved transcript's frontmatter off the main thread. Imports carryimported_atand are skipped.Tests/MeetingInviteeSuggestionPolicyTests.swift, plus its entry inrun-tests.shAPP_SOURCES.How I checked it
bash scripts/dev/linux-checks.sh(48 passed, 0 failed)python3 scripts/dev/check-source-pins.py --changed-only(all pins hold)bash build.sh --no-open/bash run-tests.sh/ integration smoke: green in CI on 1a6d2e1; CI is running again on the latest headChecks I could not run, and why: the cloud session has no Swift toolchain, so CI is the build.
Mac or hardware test still needed? Yes:
mainthe row is empty.main.Risk Review
reviews/next-release/1853.md). M1 fixed in ac95605. M2 kept, see Notes.Notes
.unknownparticipant types are kept as people. EventKit reports many Google and CalDAV attendees that way, so dropping them would lose real invitees. An untagged room could still show up as a button, but it's only a suggestion.Agent handoff
COORD_DONE: BRIEF | this PR | invitee name buttons + 1:1 pre-fill, only when the recording starts with the event | none | none | linux-checks + source pins + CI | CI on ac956058, then Mac check🤖 Generated with Claude Code
https://claude.ai/code/session_01W3Eka9wHqsZQvPs8X2XAGP