{# Merge confirmation (issue #54) — the exact, SERVER-computed effect of the proposed merge, shown before anything is written. Swapped into #merge-confirm by the preview POST; the Confirm form applies it and swaps the whole #labels list. `expected_json` carries each label's current effective-ruling id so the apply route can reject a stale confirm (409) instead of silently overriding a decision the operator never saw. #}

Treat {{ preview.labels|length }} labels as the same speaker in this recording

{% if target_speaker %} → assign all to existing speaker {{ target_speaker.display_name }}. {% elif target_name %} → enroll a new speaker “{{ target_name }}” and assign all to it. {% endif %}

{% if preview.distinct_roster_speakers %}

These labels currently map to two different roster identities. This only changes attribution in this recording — it does not merge those identities on the roster. If they are the same person everywhere, merge them on the Speakers page.

{% endif %}

Affects {{ preview.total_turns }} diarization turns and {{ preview.total_segments }} transcript segments in this recording. Reversible — you can re-rule any label afterwards.

{% for impact in preview.labels %} {% endfor %} {% if target_speaker %} {% elif target_name %} {% endif %}