Confirm before merging speaker profiles#1064
Merged
Merged
Conversation
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
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.
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
meetingsmeeting reliabilityWhat 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.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.SpeakerDuplicateCandidate.displayName(for:)helper.How I checked it
scripts/dev/agent-preflight.sh.agents/test-matrix.ymlfor the files changed (Sources/**/*.swift→ build + fast tests)bash build.sh --no-openbash run-tests.sh(4574 tests, 4574 passed)bash build.sh --no-openruns the bundle gate)bash run-integration-smoke.shif I touchedSources/Meeting/orSources/TranscriptedCore/— not touchedswift testif I touchedPackage.swift,Sources/TranscriptedCore/, or the public core seam — not touchedRisk Review
.agent-review/visuals/evidence — alert-only change, no screenshot capturedNotes
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