Skip to content

Confirm before merging speaker profiles#1064

Merged
r3dbars merged 2 commits into
mainfrom
claude/priceless-cartwright-1b305e
Jun 10, 2026
Merged

Confirm before merging speaker profiles#1064
r3dbars merged 2 commits into
mainfrom
claude/priceless-cartwright-1b305e

Conversation

@r3dbars

@r3dbars r3dbars commented Jun 10, 2026

Copy link
Copy Markdown
Owner

Why

Merging two speaker profiles is destructive — it deletes the source profile and its voice clips and rewrites every saved transcript, with no undo — but it ran on a single click. Both the "Merge" button on duplicate-candidate rows and the "Merge Into" submenu in the person row's overflow menu called merge(source:into:) directly. Delete in the same file already has a confirmation alert; Merge didn't, and the compact redesigned rows put Merge right next to the play chips, so a misclick was easy.

Product Impact

  • Affects: meetings
  • Lane: meeting reliability
  • Why this matters: a stray click can no longer silently combine two people's history and rewrite past transcripts.

What changed

  • SpeakerDuplicateCandidateRow's Merge button now opens a confirmation alert instead of merging immediately.
  • SpeakerMergeMenu's target buttons stash the picked target in state and present the same alert; the merge only runs from the alert's Merge button.
  • Both alerts mirror the existing "Delete person?" alert style: a title naming both speakers (Merge "John" into "John Betker"?) and the message "This combines their history and can't be undone. Past transcripts are updated.", with a Cancel button.
  • Unnamed profiles show as "Unnamed speaker" in the alert via the existing SpeakerDuplicateCandidate.displayName(for:) helper.

How I checked it

  • scripts/dev/agent-preflight.sh
  • Selected checks from .agents/test-matrix.yml for the files changed (Sources/**/*.swift → build + fast tests)
  • bash build.sh --no-open
  • bash run-tests.sh (4574 tests, 4574 passed)
  • Performance budget passed (bash build.sh --no-open runs the bundle gate)
  • bash run-integration-smoke.sh if I touched Sources/Meeting/ or Sources/TranscriptedCore/ — not touched
  • swift test if I touched Package.swift, Sources/TranscriptedCore/, or the public core seam — not touched
  • Manual check: not run (no live Settings session in this environment)

Risk Review

  • Privacy / local-first behavior reviewed — UI-only change, no new logging or off-device payloads
  • Storage path or migration impact reviewed — none
  • Public-facing copy stays concrete and matches current product scope
  • Release/update impact reviewed — none
  • Agent PRs link the issue/workpad and stay draft until human review
  • UI changes include sanitized .agent-review/visuals/ evidence — alert-only change, no screenshot captured
  • No private transcripts, audio, tokens, personal paths, or customer data are included

Notes

The alert's default (Return-key) button is Merge, matching how the Delete alert structures confirm + cancel. If you'd rather make Cancel the keyboard default or render Merge with a destructive role, it's a one-line tweak in each alert.

Agent handoff

COORD_DONE: GREEN | (PR URL pending) | added merge confirmation alerts to both merge entry points in SpeakerPeopleSettingsSection.swift | none | none | build.sh --no-open + run-tests.sh (4574 passed) | manual QA of the alert in a live Settings window

🤖 Generated with Claude Code

r3dbars and others added 2 commits June 10, 2026 06:04
Merge was the only one-click destructive action in the Speakers UI:
both the duplicate-candidate Merge button and the Merge Into submenu
called merge(source:into:) directly, which deletes the source profile
and its voice clips and rewrites saved transcripts with no undo. The
compact rows also put Merge right next to the play chips, so a misclick
was easy.

Both paths now show a confirmation alert styled like the existing
"Delete person?" alert, naming both speakers before the merge runs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…wright-1b305e

# Conflicts:
#	Sources/UI/Settings/SpeakerPeopleSettingsSection.swift
@r3dbars r3dbars merged commit a71a961 into main Jun 10, 2026
1 check passed
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