Skip to content

Paper cuts batch 2: Esc, setup, agent connect, and wording fixes - #1804

Merged
r3dbars merged 21 commits into
mainfrom
claude/project-thread-e1lvvc
Sep 24, 2026
Merged

r3dbars merged 21 commits into
mainfrom
claude/project-thread-e1lvvc

Conversation

@r3dbars

@r3dbars r3dbars commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Requested by Justin · project thread

Before: a stray Esc during a long hands-free dictation silently threw the whole take away. Setup didn't say what Accessibility was for, the Done screen promised shortcuts that couldn't work yet, the agent page dropped the "restart it" step once a row connected, and a lot of small copy was vague (a shortcut labeled "Off", and shaking red errors for things that weren't errors).

After: dictations longer than 5 seconds ask "Press Esc again to discard" before Esc throws them away, and a cancel gets its own soft sound. Setup explains what each permission unlocks and what still works without it, and the agent page keeps telling you to restart the agent. The small wording fixes from the paper-cuts audit are all in too.

Why

This is batch 2 of the paper-cuts audit (/mnt/project-files/paper-cuts/audit.md): items 5, 6, 7, 11-17, 19-21, 26 and 28-30, plus the "Small stuff" wording list.

Product Impact

  • Affects: dictation / meetings
  • Lane: activation / dictation reliability
  • Why this matters: new users stumble in setup, and an accidental Esc can lose minutes of dictation with no warning.

What changed

Esc (item 5)

  • Takes of 5 seconds or less still cancel on the first Esc. Longer takes show "Press Esc again to discard" for 3 seconds, and VoiceOver announces it. Held-key repeats are ignored. The prompt works in the mini cursor mode too.
  • A new soft two-note cancel sound (Resources/Sounds/dictation-cancelled.wav). It's also used for "No speech heard", so neither sounds like the done chime.
  • Copy: the stop button reads "Stop and paste. Esc cancels."
  • Note: meeting Discard now plays the cancel sound as well, on purpose.

Setup and permissions (items 6, 12, 16, 17, 19)

  • The Accessibility row is renamed "Keyboard shortcuts and paste-back" and says what still works without it.
  • The Done screen only promises shortcuts once Accessibility is on, and states the open-at-login default.
  • The Welcome screen mentions anonymous stats and crash reports.
  • When the mic or calendar is blocked, the row says macOS won't ask again and the button reads "Open Settings".
  • The first Accessibility grant during onboarding only shows the macOS prompt; it doesn't also open System Settings on top. The Settings rows still always open the pane.

Agent connect (item 7): connected rows stay visible and say "Restart X to finish connecting".

Update row (item 11): the row now says why it's waiting ("After this recording finishes", "After transcribing finishes", "Finish naming speakers first").

Overlay messages (items 13, 26): notices stay up longer for long text, hold while you hover (capped at 30 s), and only real errors shake. The 5-minute cap save is a calm "Saved" notice.

No speech (items 14, 15): push-to-talk users are told to hold the key while talking. Everyone else is told to check their mic.

Menu bar (items 20, 21): while dictating, the row reads "Stop Dictation". The voice-model subtitle uses plainer copy ("Voice setup failed. Try again", "Downloaded. Loads when you start").

Settings (items 28-30): "Better matching on calls" says it needs a restart, and re-transcribe explains why it's disabled. "Clear all" corrections now asks first.

Small stuff wording: auto-send failures, Paste Last (shows its shortcut, clearer failure text), the model card, System Audio row, storage cleanup, meeting audio wording, diagnostics result, speaker merge (no longer promises an undo it can't do), and the meeting-finishing message.

Skipped here: item 9 (waits for #1801), item 31 and the Option-M prompts (other threads own them), speaker sheet keys and title (overlaps #1795), recovery copy (next to #1801's hunk), and the bigger behavior items (Move for the library folder, duplicate shortcuts, multi-file import, mic-denial skip, email-support diagnostics ID). The Esc undo window after a discard is a follow-up.

How I checked it

  • scripts/dev/agent-preflight.sh
  • check-build-source-lists.py, check-analytics-emitters.py, check-duplicate-declarations.py pass locally
  • bash build.sh --no-open (CI, no Swift toolchain in this session)
  • bash run-tests.sh (CI; tests updated for every changed copy/policy)
  • Manual check: Esc confirm in both overlay modes, cancel sound volume by ear, onboarding Accessibility first ask

Risk Review

  • Privacy / local-first behavior reviewed (no new off-device data)
  • Storage path or migration impact reviewed (none; one new UserDefaults flag for the first Accessibility prompt)
  • Public-facing copy stays concrete and matches current product scope
  • Release/update impact reviewed (goes in 1.1.63)
  • No private transcripts, audio, tokens, personal paths, or customer data are included

Notes

Deep review: /mnt/project-files/reviews/next-release/1804.md. S1-S4 and M2-M4, M11, M13, M14 are fixed. M1 is kept on purpose (meeting Discard sound), and M5-M7, M9, M10, M12 are left as-is or as follow-ups.

Agent handoff

COORD_DONE: BRIEF | https://github.com/r3dbars/transcripted/pull/1804 | paper-cuts batch 2 | none | none | preflight + local python checks; CI pending | merge when CI green and re-review clean

🤖 Generated with Claude Code

https://claude.ai/code/session_01XWq97CXXURmxjYLNWtVxXC

Esc is a global key, so closing an autocomplete mid-dictation used to
discard a long hands-free take with no sound. Takes over 5 seconds now
ask "Press Esc again to discard" and only a second press inside 3
seconds cancels. Cancel and no-speech get a soft bundled cue instead of
silence or the delivered chime, and the copy says Esc cancels, not stops.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XWq97CXXURmxjYLNWtVxXC
@r3dbars r3dbars self-assigned this Sep 24, 2026
- The Accessibility row is now "Keyboard shortcuts and paste-back"; the
  Done screen stops listing shortcuts that can't work without it.
- The Done screen says the app opens at login before macOS shows its notice.
- The welcome line mentions anonymous stats and crash reports.
- The first Accessibility Grant shows only the macOS prompt; later clicks
  open the pane.
- A fresh Don't Allow for the mic or calendar stays in the app, and the
  row says macOS won't ask again with an Open Settings button.

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

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

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

Review fixes for the Esc change:
- Mini cursor mode widens the pill and shows the prompt in place of the
  waveform, and VoiceOver announces it.
- Stopping clears a pending confirm, so an Esc while it transcribes asks
  again instead of discarding.
- Held-Esc key repeat no longer counts as the second press.
- Uptime clock instead of wall clock; reset on success; retained
  recordings readmitted for another pass always ask first.
- The cancel cue is skipped when the audio is kept (quit with recovery).

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

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

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

- One name for saved meeting audio (not replay/kept/retained), and the
  retention row reads "Delete meeting audio after".
- Send Diagnostics says it's sent and gives a code to mention.
- The speaker merge confirm no longer promises an undo that restores past
  transcripts.
- System Audio row: "How to turn it on" instead of migration steps.
- Dictation during a starting meeting no longer says "finish saving".
- Setup's last button says Done; Calendar reads the same in setup and
  Settings.

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

- Only onboarding's first Accessibility Grant shows the prompt alone;
  Settings rows keep prompting and opening the pane, since macOS may not
  prompt an existing user who lost trust after an update.
- A starting or stopping meeting counts as recording for the update row.
- Hovering holds an overlay message for at most 30 seconds.
- Clear all says "Clear all corrections?" when nothing parses.

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

# Conflicts:
#	Sources/UI/Settings/SpeakerPeopleSettingsSection.swift
#	Sources/UI/Settings/TranscriptedSettingsView.swift
@r3dbars
r3dbars marked this pull request as ready for review September 24, 2026 05:49
@r3dbars
r3dbars merged commit 886fbea into main Sep 24, 2026
8 checks passed
@r3dbars
r3dbars deleted the claude/project-thread-e1lvvc branch September 24, 2026 05: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.

2 participants