App — Speaker Labelling UI
Speaker label display on transcript segments, inline assignment dropdown (existing person or create new), optimistic assignment, and visually distinct unassigned labels.
App — Speaker Labelling UI
Owner: App Engineer Domain: app Complexity: M Prerequisite: Core Speaker Assignment slice merged
When this slice is complete, the transcript view shows each segment's speaker label, offers an inline assignment control (pick an existing person or create a new one), applies the assignment optimistically, and visually distinguishes labels that have not been assigned to anyone from those that have.
Required Capabilities
- Transcript segments render their
speaker_label. - An inline dropdown/control lets the user assign an existing person, or create a new one, to a label.
- The assignment applies optimistically in the UI ahead of the server response.
- Unassigned labels are visually distinct from assigned ones.
Dependencies
- Core Speaker Assignment slice must be merged — specifically
POST /meetings/{id}/speaker-labels,GET /meetings/{id}/speaker-labels, andPOST /people.
Test Cases
Test cases map to tests/bets/meeting-recording/test_milestone_09_speaker_labelling.py. Run via ./dev test bet meeting-recording.
| Test | Location | Assertion |
|---|---|---|
test_transcript_displays_distinct_speaker_labels | test_milestone_09 (App Vitest test_app_transcript_shows_speaker_labels) | The transcript view renders distinct speaker labels on segments. |
test_user_can_assign_existing_person_to_speaker | test_milestone_09 (App Vitest test_app_assign_existing_person_to_speaker) | The inline assignment control assigns an existing person to a speaker label. |
test_user_can_create_person_from_speaker_flow | test_milestone_09 (App Vitest test_app_create_person_from_speaker_flow) | The assignment flow supports creating a new person and attaching them to a label. |
test_unassigned_speaker_labels_remain_visible | test_milestone_09 (App Vitest test_app_unassigned_labels_visible) | Labels the user never assigned remain visible and visually distinct from assigned ones. |
Completion Checklist
- Code merged and deployed
- Bet progress tests pass (
./dev test bet meeting-recording) - Permanent service tests implemented per testing strategy
- Code review completed
- Testing review completed
- System documentation updated (as applicable)
09 Speaker Labelling
Speaker labels can be assigned to people and survive final transcript replacement.
Core — Speaker Assignment
POST /meetings/:id/speaker-labels, person lookup/create, speaker_label to person_id mapping persisted to transcript_segments and surviving PUT /transcriptions/:id/segments replacement, and SpeakerStateUpdatedEvent to ML.