## MODIFIED Requirements ### Requirement: Meeting Assistant learns speaker identities locally Meeting Assistant SHALL maintain a local SQLite speaker identity database in the user's application data folder. Live speaker matching SHALL be read-only with respect to the speaker identity database. Candidate elimination, canonical promotion, transcription counters, stored snippet updates, and new unmatched identity creation SHALL happen only after transcription is finished and after automatic summary generation has completed, using the latest meeting note frontmatter. When the summary agent records a speaker override from a diarized transcript label to a named speaker, final speaker identity processing SHALL attach the current run speaker sample to an existing identity with that name when one exists, or create a new canonical speaker identity with that name when none exists. When a speaker override maps a current-run unnamed candidate to an existing named identity, Meeting Assistant SHALL merge the candidate's meeting reference and useful snippets into the named identity instead of leaving a duplicate candidate. When the summary agent records that a speaker identity was wrongfully matched, final speaker identity processing SHALL delete the matching identity from the local speaker identity database so it cannot be matched again unless it is newly created in the future. #### Scenario: Final speaker identity learning uses summary-refined attendees - **GIVEN** the summary agent changes meeting note attendees during automatic summary generation - **WHEN** Meeting Assistant performs final speaker identity learning and candidate creation - **THEN** it uses the attendee list from the meeting note after the summary agent changes #### Scenario: Speaker override attaches to existing identity - **GIVEN** the speaker identity database contains canonical speaker `Sabrina` - **AND** the summary agent records that transcript speaker `Guest-01` is `Sabrina` - **WHEN** final speaker identity processing runs - **THEN** Meeting Assistant stores the meeting reference and current speaker sample on Sabrina's identity - **AND** does not create a separate unnamed candidate for `Guest-01` #### Scenario: Speaker override creates named identity - **GIVEN** the speaker identity database has no accepted name `Sabrina` - **AND** the summary agent records that transcript speaker `Guest-01` is `Sabrina` - **WHEN** final speaker identity processing runs - **THEN** Meeting Assistant creates a canonical speaker identity named `Sabrina` - **AND** stores the meeting reference and current speaker sample on that identity #### Scenario: Speaker identity deletion removes a wrong match - **GIVEN** the speaker identity database contains canonical speaker `Sabrina` - **AND** the summary agent records that `Sabrina` was wrongfully matched - **WHEN** final speaker identity processing runs - **THEN** Meeting Assistant removes Sabrina's identity from the speaker identity database - **AND** the relabeled transcript uses `Removed-1` instead of `Sabrina`