Skip to content

Notch island: name voices in the island, per-call review in Speakers, simpler menu bar - #1900

Merged
r3dbars merged 3 commits into
mainfrom
claude/notch-standard
Sep 28, 2026
Merged

r3dbars merged 3 commits into
mainfrom
claude/notch-standard

Conversation

@r3dbars

@r3dbars r3dbars commented Sep 28, 2026 •

Copy link
Copy Markdown
Owner

Why

Build the "Start here" mockups (Notch Standard Mockups): calls, finishing a meeting and naming people all happen in the notch; naming later happens per call in Speakers; the menu bar loses its right-click menu.

Product Impact

  • Affects: meetings
  • Lane: meeting reliability / activation
  • Why this matters: after a meeting, today a separate review window pops open by itself, and anything skipped lands in one "Unknown voice" pile in Speakers with no sense of which call it came from.

What changed

  • Menu bar: right-click on the status item opens the same popover as a left-click. The separate right-click menu is removed (owner request); AGENTS.md's keep-the-surface list is updated.
  • Call prompt (Notch island): "Closes in Ns" becomes a ring around Not now (the dictation Dismiss ring). "Remind me soon" reads Later. The timeout pauses while the pointer is over the island. An unanswered prompt still expires and re-offers as before.
  • Meeting finishes (Notch island): after the transcript chime, the island asks "Who was on this call?" instead of opening the review window:
    • recognized voices (new SpeakerNamingRequest.recognizedSpeakerNames)
    • "Is this Maya?" Yes / No
    • No → name box with invitee chips (arrow past three) and autocomplete from saved people, invitees first
    • play → pause with a ring that fills as the clip plays
    • Later (20 s ring; saves what was answered) and Done → "Everyone's named" + Open transcript
    • builds the same SpeakerNameUpdates as the window; same analytics events with surface: speaker_review_island
    • NotchIslandPanel can take the keyboard only while a name box is in use
  • Speakers: "Needs a name" → "Review and name these people", a stack of cards, one per call (name, day, length). Only the top call is open; naming everyone in it brings the next one up. Each card has that call's invitees as one-tap names, Later (to the back of the stack, this session) and a saved "Skip this call".
  • Island clip button: a fixed 30 pt round view with the playback ring centered on it; answering a voice (Yes or a name) stops its clip.
  • Call audio off (Notch island): no modal before the meeting starts. It records the mic, and the island asks once while recording. Turning it on applies from the next meeting (this recording never built the system-audio tap).

How I checked it

  • scripts/dev/agent-preflight.sh
  • bash scripts/dev/linux-checks.sh (57 passed)
  • bash build-deps.sh --force, bash build.sh --no-open
  • bash run-tests.sh (19722 tests; new NotchIslandSpeakerReviewPolicyTests, new per-call grouping and saved-skip suites)
  • bash run-integration-smoke.sh
  • swift test
  • bash scripts/dev/concurrency-census.sh --check, bash scripts/dev/typecheck-lab-build.sh
  • Manual check: Justin ran the build locally and named voices in the island (the round clip button, stop-on-Yes and the Speakers card stack came from that session; the last two are built but not yet re-checked by hand)

Checks I could not run, and why:

  • None beyond what's listed below; the island itself was checked by hand on Justin's Mac.

Mac or hardware test still needed? Yes, with Settings › Dictation window = Notch island:

  1. Join a call → the island asks; Not now shows a draining ring that pauses on hover; Later reads Later.
  2. Record a meeting with a new voice → after Stop and the chime, "Who was on …?" opens in the island (no window). Play a clip: pause glyph + filling ring. No → name box; invitee chips; type → suggestions; Return picks. Done → "Everyone's named" → Open transcript opens it on Meetings.
  3. Same, but leave it: Later's ring runs out after 20 s; the call shows as a card under Speakers › Name these people. Skip this call, restart the app → still skipped.
  4. With System Audio Recording off, press ⌥M → recording starts at once (no alert); the island asks about call audio.
  5. Right-click the menu bar icon → the popover opens.

On main, steps 1–4 show the old pill copy, the review window, the flat Speakers list, and the blocking alert.

Risk Review

  • Privacy / local-first behavior reviewed (names stay local; analytics are counts/buckets only, same keys as the review window)
  • New analytics properties avoid the sanitizer's drop fragments (no new keys; new surface value only)
  • Checked the text-pin tests for every file I edited (check-source-pins.py --changed-only)
  • Storage path or migration impact reviewed (new speakerReviewSkippedCalls defaults key only)
  • Public-facing copy stays concrete
  • Release/update impact reviewed: n/a
  • Agent PRs got an independent deep review of the full diff: not yet
  • UI changes include sanitized .agent-review/visuals/ evidence: not yet (island not capturable)
  • No private transcripts, audio, tokens, personal paths, or customer data are included

Notes

  • Everything island-related only applies with the Notch island selected; Near text box / Mini cursor keep the pill, window and alert.
  • Not in this PR: the "2 to name" chip on Meetings rows, and restyling the popover in island black.

🤖 Generated with Claude Code

r3dbars and others added 3 commits September 28, 2026 15:18
…on Not now, Later

Right-clicking the status item now opens the same popover as a left-click.
The separate right-click menu is gone (owner request); AGENTS.md's
keep-the-surface list is updated to match.

In the Notch island, the call-detected prompt drops the "Closes in Ns"
line and traces the countdown as a ring around Not now, the same ring the
dictation Dismiss button uses. Remind me soon reads Later. The prompt's
timeout pauses with the ring while the pointer is over the island, so it
never closes on someone reading it. An unanswered prompt still expires and
re-offers as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… call audio ask

When a saved meeting has voices Transcripted isn't sure about, the island
now asks "Who was on this call?" instead of opening the review window
(Notch island mode):

- voices it named on its own show as recognized; the pipeline now passes
  those names in SpeakerNamingRequest.recognizedSpeakerNames
- a likely match asks "Is this Maya?" with Yes / No
- No, or a voice with no guess, opens a name box with the calendar
  invitees as one-tap names (an arrow shows past three) and autocomplete
  from people already saved, invitees first
- the play button turns into pause while a clip plays, with a ring that
  fills until the clip ends
- Later carries the dictation Dismiss ring (20 s, pauses on hover, stops
  once you touch anything) and saves what was answered; Done saves and
  shows "Everyone's named" with Open transcript

Answers build the same SpeakerNameUpdates the window builds, and the
review reports the same analytics with surface speaker_review_island.
The island panel can take the keyboard only while a name box is in use.

Speakers: "Needs a name" becomes "Name these people", one card per call
(name, day, length) with that call's invitees as one-tap names and a saved
"Skip this call" (the per-voice Skip stays session-only).

Call audio off: in Notch island mode a meeting no longer waits on the
"can't hear the other side" alert. It starts with the mic, and the island
asks once while it records; turning it on applies from the next meeting,
since this recording never built the system-audio tap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is a card stack

The island's play/pause is now a fixed 30 pt round view (the NSButton
wasn't staying square, so it drew as a squashed blob with an off-center
ring). Answering a voice (Yes, or picking a name) stops its clip so the
next one is ready to play.

Speakers shows "Review and name these people" as a stack: only the top
call is open, the next ones peek out underneath, and naming everyone in
it brings the next call up. Later sends a call to the back for now; Skip
this call still removes it for good.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@r3dbars
r3dbars marked this pull request as ready for review September 28, 2026 21:16
@r3dbars
r3dbars merged commit 9435395 into main Sep 28, 2026
8 checks passed
@r3dbars
r3dbars deleted the claude/notch-standard branch September 28, 2026 23:52
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.

1 participant