Archive summary refinements and profile switching
PR and Push Build/Test / build-and-test (push) Successful in 6m37s

This commit is contained in:
2026-05-27 23:11:21 +02:00
parent c12febe029
commit 7777b349a5
37 changed files with 3190 additions and 121 deletions
@@ -0,0 +1,82 @@
## MODIFIED Requirements
### Requirement: Meeting Assistant generates meeting outputs
Meeting Assistant SHALL generate a summary, decisions, and next steps from the meeting transcript, metadata, user notes, and assistant-discovered context.
The summary pipeline SHALL expose tools scoped to the current meeting:
- `read_meetingnote`
- `read_transcript`
- `read_context`
- `read_usernotes`
- `read_glossary`
- `add_dictation_word`
- `add_attendee`
- `remove_attendee`
- `override_speaker`
- `delete_identity`
- `write_summary`
- `write_context`
- `list_projects`
- `list_projectfiles`
- `read_projectfile`
- `write_projectfile`
- `search`
The summary instructions SHALL tell the summary agent to use transcript evidence and screenshot OCR participant evidence to refine the meeting note attendee list conservatively, adding or removing attendees only when the evidence is clear.
The summary instructions SHALL tell the summary agent to call `override_speaker` only when it is very certain that a transcript speaker label belongs to a named speaker, such as from user notes, OCR with a correlating meeting timestamp, or very clear context cues.
When `override_speaker` is called with an existing transcript speaker label and a replacement speaker name, Meeting Assistant SHALL rewrite that speaker label in the transcript and record the override for final speaker identity processing.
When `override_speaker` is called without merge enabled and the transcript already contains the replacement speaker name as a speaker label, Meeting Assistant SHALL refuse the override. When merge is enabled, Meeting Assistant SHALL allow the override, rewrite the source speaker label to the replacement speaker name, and record the override as a speaker merge for final speaker identity processing.
The summary instructions SHALL tell the summary agent to call `delete_identity` only when it is certain that an existing speaker identity was wrongfully matched.
When `delete_identity` is called with an existing transcript speaker identity, Meeting Assistant SHALL rewrite transcript speaker labels for that identity to `Removed-<n>` and record the deletion for final speaker identity processing.
#### Scenario: Summary agent refines attendees from clear participant evidence
- **GIVEN** assistant context OCR states that visible meeting participants are complete
- **AND** the OCR result names a participant missing from the meeting note
- **WHEN** the summary pipeline runs
- **THEN** the summary agent can add that attendee to the meeting note through `add_attendee`
#### Scenario: Summary agent does not over-trim partial participant evidence
- **GIVEN** assistant context OCR states that visible meeting participants are only a partial result
- **WHEN** the summary pipeline runs
- **THEN** the summary instructions tell the agent not to remove attendees solely because they are absent from that partial screenshot evidence
#### Scenario: Summary agent overrides a certain speaker label
- **GIVEN** the transcript contains speaker label `Guest-01`
- **AND** user notes or OCR evidence clearly identifies that speaker as `Sabrina`
- **WHEN** the summary agent calls `override_speaker` with `Guest-01` and `Sabrina`
- **THEN** Meeting Assistant rewrites the transcript speaker label to `Sabrina`
- **AND** records the override for final speaker identity processing
#### Scenario: Summary agent cannot accidentally merge speakers
- **GIVEN** the transcript contains speaker labels `Guest-01` and `Sabrina`
- **WHEN** the summary agent calls `override_speaker` with `Guest-01` and `Sabrina` without merge enabled
- **THEN** Meeting Assistant refuses the override
- **AND** keeps the transcript unchanged
#### Scenario: Summary agent explicitly merges speakers
- **GIVEN** the transcript contains speaker labels `Guest-01` and `Sabrina`
- **AND** user notes or OCR evidence clearly proves they are the same person
- **WHEN** the summary agent calls `override_speaker` with `Guest-01`, `Sabrina`, and merge enabled
- **THEN** Meeting Assistant rewrites `Guest-01` transcript speaker labels to `Sabrina`
- **AND** records the override as a merge for final speaker identity processing
#### Scenario: Summary agent deletes a wrong speaker identity
- **GIVEN** the transcript contains speaker identity `Sabrina`
- **AND** user notes or OCR evidence clearly proves that `Sabrina` was wrongfully matched
- **WHEN** the summary agent calls `delete_identity` with `Sabrina`
- **THEN** Meeting Assistant rewrites the transcript speaker label to `Removed-1`
- **AND** records the deletion for final speaker identity processing
### Requirement: Meeting screenshots are captured into assistant context
Meeting Assistant SHALL expose a configurable screenshot hotkey.
The default OCR prompt SHALL explain that the image is from a meeting and ask the model to identify who is talking, who is presenting, what is presented, capture slide text in markdown, convert diagrams to Mermaid when possible, indicate whether visible people are clearly the exact meeting participants or only a partial result, return crop coordinates only for confidently isolated presentation/shared-screen content, and otherwise describe the scene.
#### Scenario: OCR reports whether visible people are complete or partial
- **WHEN** Meeting Assistant uses the built-in screenshot OCR prompt
- **THEN** the prompt asks the model to state whether the screenshot clearly shows exactly who is in the meeting or only a partial participant result
@@ -0,0 +1,37 @@
## 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`