## 1. Specification - [x] 1.1 Define requirements for local speaker identity storage and candidate elimination. - [x] 1.2 Define requirements for live periodic matching and transcript relabeling. ## 2. Implementation - [x] 2.1 Add SQLite speaker identity database in app data. - [x] 2.2 Add speaker snippet extraction and matching orchestration. - [x] 2.3 Learn unmatched speaker identities from meeting attendees at transcript completion. - [x] 2.4 Eliminate candidate names on future matches and promote a canonical name. - [x] 2.5 Relabel finished transcript segments when canonical identity matches are found. - [x] 2.6 Add live periodic matching after an initial delay and apply matches to future transcript writes. - [x] 2.7 Keep timestamped in-memory audio samples for live diarized speaker matching and reserve recording-file extraction for final-only diarization. - [x] 2.8 Add speaker aliases and a diagnostic duplicate-identity merge process. - [x] 2.9 Use aliases during candidate elimination and unmatched-candidate filtering. - [x] 2.10 Keep live speaker matching read-only so final identity decisions use the latest meeting note frontmatter. - [x] 2.11 Rewrite already-written live transcript segments when a live speaker match is found. - [x] 2.12 Prioritize attendee-matched speaker identities, filter stale non-attendees, and cap match candidates. - [x] 2.13 Run live speaker identification incrementally when new unmapped speakers appear or attendees change. - [x] 2.14 Maintain speaker identity last-modified timestamps for active-age filtering. - [x] 2.15 Add identified speaker display names to meeting note attendees without duplicating display names or aliases. - [x] 2.16 Canonicalize calendar attendee names through identity canonical names and aliases before writing meeting notes. ## 3. Validation - [x] 3.1 Add tests for candidate creation, elimination, canonical promotion, and reset on empty candidate intersection. - [x] 3.2 Add tests for recording coordinator transcript relabel integration. - [x] 3.3 Add tests for in-memory speaker samples and rolling audio buffer extraction. - [x] 3.4 Add tests for duplicate speaker identity merging and the diagnostic endpoint. - [x] 3.5 Add tests for alias-aware candidate elimination. - [x] 3.6 Add tests that live matching does not mutate speaker identities. - [x] 3.7 Add tests that live speaker matches relabel current and future transcript segments. - [x] 3.8 Add tests for speaker identity candidate ordering, active-age filtering, and candidate caps. - [x] 3.9 Add tests for incremental live speaker identification triggers. - [x] 3.10 Add tests for speaker identity last-modified timestamp creation, updates, and schema upgrade. - [x] 3.11 Add tests for adding matched speaker identities to meeting attendees and alias duplicate suppression. - [x] 3.12 Add tests for calendar attendee canonicalization and alias duplicate suppression. - [x] 3.13 Run `dotnet test`.