Public Access
Add meeting inactivity safeguards
PR and Push Build/Test / build-and-test (push) Failing after 14m53s
PR and Push Build/Test / build-and-test (push) Failing after 14m53s
This commit is contained in:
+9
@@ -17,6 +17,8 @@ Meeting Assistant SHALL automatically stop the recording normally when transcrip
|
||||
|
||||
When the inactivity safeguard stops a recording, Meeting Assistant SHALL infer the meeting end time from the most recent transcript segment timestamp plus configured padding, defaulting to 1 minute. If no transcript segment has arrived, Meeting Assistant SHALL infer the end time from the meeting start time plus the same padding.
|
||||
|
||||
When a recording stops normally and its meeting note, transcript, and assistant context contain no user-authored or captured content beyond generated default headings and metadata, Meeting Assistant SHALL delete the run artifacts instead of running summary generation.
|
||||
|
||||
#### Scenario: Inactive recording prompts the user
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** no transcript text has arrived for the first configured inactivity prompt threshold
|
||||
@@ -50,3 +52,10 @@ When the inactivity safeguard stops a recording, Meeting Assistant SHALL infer t
|
||||
- **AND** the first inactivity prompt was shown
|
||||
- **WHEN** a new transcript segment with text arrives
|
||||
- **THEN** Meeting Assistant resets the inactivity prompt schedule from that transcript arrival
|
||||
|
||||
#### Scenario: Empty stopped recording is cleaned up
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** the meeting note, transcript, and assistant context only contain generated default content
|
||||
- **WHEN** the recording stops normally
|
||||
- **THEN** Meeting Assistant deletes the run artifacts
|
||||
- **AND** does not run summary generation
|
||||
+2
@@ -7,3 +7,5 @@
|
||||
- [x] Use inferred end time for safeguard-triggered normal stops.
|
||||
- [x] Add focused behavior tests.
|
||||
- [x] Validate with `dotnet test MeetingAssistant.slnx` and `openspec validate add-recording-inactivity-safeguard --strict`.
|
||||
- [x] Register native Windows notification activation at app startup and keep notification resources installed across normal restarts.
|
||||
- [x] Delete default-only stopped recording artifacts instead of summarizing them.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Allow Summary Title Rename
|
||||
|
||||
## Why
|
||||
Meetings often start with generated default titles such as `Meeting 2026-06-03 07:26`. When the summary agent can infer a clear purpose from the transcript, user notes, or assistant context, it should be able to give the meeting a useful title while writing the summary.
|
||||
|
||||
## What
|
||||
- Refine `write_summary` title handling so a non-empty title renames the current meeting and summary artifacts.
|
||||
- Preserve the existing title when the title parameter is omitted or blank.
|
||||
- Instruct the summary agent to provide a concise title when the meeting still has a generated default title and the meeting purpose is clear.
|
||||
|
||||
## Impact
|
||||
- Updates summary tool behavior and instructions.
|
||||
- Adds focused tests for title preservation and rename behavior.
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Meeting Assistant generates meeting outputs
|
||||
The summary note SHALL keep frontmatter links to meeting artifacts and SHALL copy `title`, `start_time`, `end_time`, `attendees`, and `projects` from the meeting note when available. If the meeting note has no title, the summary agent SHALL be able to provide a title when writing the summary.
|
||||
|
||||
When the summary agent calls `write_summary` with a non-empty `title` parameter, Meeting Assistant SHALL update the current meeting note title and write that title to the summary note frontmatter.
|
||||
|
||||
When the summary agent calls `write_summary` without a `title` parameter or with a blank `title` parameter, Meeting Assistant SHALL keep the existing meeting note title and summary title behavior.
|
||||
|
||||
The summary instructions SHALL tell the summary agent to provide a concise `title` parameter to `write_summary` when the meeting note still has a generated default title and the meeting purpose is clear from context.
|
||||
|
||||
#### Scenario: Summary agent renames default-titled meeting
|
||||
- **GIVEN** the current meeting note has a generated default title
|
||||
- **AND** the meeting purpose is clear from transcript, user notes, or assistant context
|
||||
- **WHEN** the summary agent writes the summary
|
||||
- **THEN** the summary instructions tell the agent to provide a concise `title` parameter
|
||||
- **AND** Meeting Assistant updates the meeting note title and summary note title to the provided title
|
||||
|
||||
#### Scenario: Summary title parameter is omitted
|
||||
- **GIVEN** the current meeting note has an existing title
|
||||
- **WHEN** the summary agent writes the summary without a title parameter
|
||||
- **THEN** Meeting Assistant keeps the existing meeting note title
|
||||
- **AND** writes the existing title to the summary note frontmatter
|
||||
|
||||
#### Scenario: Summary title parameter is blank
|
||||
- **GIVEN** the current meeting note has an existing title
|
||||
- **WHEN** the summary agent writes the summary with a blank title parameter
|
||||
- **THEN** Meeting Assistant keeps the existing meeting note title
|
||||
- **AND** writes the existing title to the summary note frontmatter
|
||||
@@ -0,0 +1,6 @@
|
||||
## Implementation
|
||||
- [x] Update `write_summary` title handling to rename the current meeting note for non-empty title values.
|
||||
- [x] Keep existing title behavior when the title parameter is omitted or blank.
|
||||
- [x] Update summary-agent instructions and tool description for generated default titles.
|
||||
- [x] Add focused tests for rename, omitted title, blank title, and instructions.
|
||||
- [x] Validate with focused tests, `dotnet test MeetingAssistant.slnx`, and `openspec validate allow-summary-title-rename --strict`.
|
||||
@@ -235,3 +235,63 @@ When a meeting is actively recording, the menu SHALL allow switching to each con
|
||||
- **GIVEN** an older meeting is still summarizing
|
||||
- **WHEN** a newer meeting is actively recording
|
||||
- **THEN** the taskbar icon indicates recording
|
||||
|
||||
### Requirement: Recording inactivity safeguard stops forgotten meetings
|
||||
Meeting Assistant SHALL track transcript inactivity during an active recording from the later of meeting start or the most recent live transcript segment that contains text.
|
||||
|
||||
Meeting Assistant SHALL show a stop prompt when transcript inactivity reaches configured prompt thresholds. The default thresholds SHALL be 2 minutes, 5 minutes, and 10 minutes.
|
||||
|
||||
On Windows, the stop prompt SHALL use a native Windows app notification with affirmative and negative action buttons.
|
||||
|
||||
The stop prompt SHALL ask whether to stop the meeting and SHALL provide affirmative and negative actions.
|
||||
|
||||
Showing or ignoring the stop prompt SHALL NOT block later inactivity checks, reminder prompts, or automatic stop.
|
||||
|
||||
If the user accepts the stop prompt, Meeting Assistant SHALL stop the recording normally, allowing transcription, speaker recognition, and summary generation to continue as for a normal stop.
|
||||
|
||||
Meeting Assistant SHALL automatically stop the recording normally when transcript inactivity reaches the configured auto-stop threshold, defaulting to 30 minutes.
|
||||
|
||||
When the inactivity safeguard stops a recording, Meeting Assistant SHALL infer the meeting end time from the most recent transcript segment timestamp plus configured padding, defaulting to 1 minute. If no transcript segment has arrived, Meeting Assistant SHALL infer the end time from the meeting start time plus the same padding.
|
||||
|
||||
When a recording stops normally and its meeting note, transcript, and assistant context contain no user-authored or captured content beyond generated default headings and metadata, Meeting Assistant SHALL delete the run artifacts instead of running summary generation.
|
||||
|
||||
#### Scenario: Inactive recording prompts the user
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** no transcript text has arrived for the first configured inactivity prompt threshold
|
||||
- **WHEN** the inactivity safeguard checks the active recording
|
||||
- **THEN** Meeting Assistant prompts the user whether to stop the meeting with a native Windows app notification when running on Windows
|
||||
- **AND** does not abort or discard meeting artifacts
|
||||
|
||||
#### Scenario: Ignored inactivity prompt does not block auto-stop
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** the inactivity safeguard prompt was shown
|
||||
- **WHEN** the user ignores the prompt until the automatic stop threshold is reached
|
||||
- **THEN** Meeting Assistant stops the recording normally without waiting for a prompt response
|
||||
|
||||
#### Scenario: User accepts inactivity stop prompt
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** the inactivity safeguard prompt is shown
|
||||
- **WHEN** the user chooses to stop the meeting
|
||||
- **THEN** Meeting Assistant stops the recording normally
|
||||
- **AND** continues normal transcription and summary processing
|
||||
- **AND** writes the inferred meeting end time to meeting artifacts
|
||||
|
||||
#### Scenario: Inactive recording automatically stops
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** no transcript text has arrived through the configured automatic stop threshold
|
||||
- **WHEN** the inactivity safeguard checks the active recording
|
||||
- **THEN** Meeting Assistant stops the recording normally without aborting artifacts
|
||||
- **AND** writes the inferred meeting end time to meeting artifacts
|
||||
|
||||
#### Scenario: New transcript text resets inactivity prompts
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** the first inactivity prompt was shown
|
||||
- **WHEN** a new transcript segment with text arrives
|
||||
- **THEN** Meeting Assistant resets the inactivity prompt schedule from that transcript arrival
|
||||
|
||||
#### Scenario: Empty stopped recording is cleaned up
|
||||
- **GIVEN** a recording is active
|
||||
- **AND** the meeting note, transcript, and assistant context only contain generated default content
|
||||
- **WHEN** the recording stops normally
|
||||
- **THEN** Meeting Assistant deletes the run artifacts
|
||||
- **AND** does not run summary generation
|
||||
|
||||
@@ -4,250 +4,32 @@
|
||||
TBD - created by archiving change define-meeting-assistant-v1. Update Purpose after archive.
|
||||
## 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.
|
||||
|
||||
Meeting Assistant SHALL use a Microsoft Agent Framework pipeline for the first summary implementation. The pipeline SHALL use a configurable OpenAI-compatible endpoint, model, and API key source, including support for a direct key or an environment variable name.
|
||||
|
||||
The summary pipeline SHALL retry transient model endpoint failures according to configurable reconnection attempts and delay settings.
|
||||
|
||||
The summary pipeline SHALL track context-window usage for the configured model using response usage when available and request-size estimates otherwise. The context-window limit, maximum output reserve, compaction enablement, compaction threshold, and Responses compact endpoint path SHALL be configurable.
|
||||
|
||||
When only the configured remaining context ratio is available, the summary pipeline SHALL try to compact the conversation through the configured OpenAI-compatible `POST /v1/responses/compact` endpoint. If that endpoint is unavailable or returns invalid data, the pipeline SHALL fall back to Microsoft Agent Framework compaction.
|
||||
|
||||
Fallback compaction SHALL become increasingly aggressive: collapse old tool results, summarize older conversation spans, keep only the last four user turns, and drop oldest groups if still over budget.
|
||||
|
||||
When summary generation fails after retries, Meeting Assistant SHALL write a markdown failure report to the configured summary note path. The failure report SHALL include a clickable retry link, error details, and the meeting artifact paths needed to diagnose or retry the run.
|
||||
|
||||
After transcript processing finishes for a recording, Meeting Assistant SHALL automatically invoke the summary pipeline for the meeting.
|
||||
|
||||
Before automatic summary generation starts, Meeting Assistant SHALL wait for pending screenshot OCR jobs for that meeting to complete or reach their configured timeout.
|
||||
|
||||
Meeting Assistant SHALL expose an API operation to retry summary generation for a given summary note path. The retry operation SHALL resolve the linked meeting artifacts from the meeting note frontmatter and SHALL overwrite the existing summary note with either the new summary or a new failure report.
|
||||
|
||||
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`
|
||||
- `list_past_project_meetings`
|
||||
- `read_past_project_meeting_summary`
|
||||
- `search`
|
||||
|
||||
All summary-agent read tools that return file-like content SHALL support either reading the whole file or reading a clamped inclusive 1-based line range when `from` and `to` are supplied.
|
||||
|
||||
The summary agent SHALL be able to list paginated past meeting summary notes for projects assigned to the current meeting.
|
||||
|
||||
The past meeting summary listing SHALL read summary notes from the configured summaries folder only.
|
||||
|
||||
The past meeting summary listing SHALL skip malformed or non-summary markdown files instead of failing the whole listing.
|
||||
|
||||
When no project filter is supplied to the past meeting summary listing, Meeting Assistant SHALL include past summaries assigned to any project assigned to the current meeting.
|
||||
|
||||
When a project filter is supplied to the past meeting summary listing, Meeting Assistant SHALL include only past summaries assigned to those requested projects and SHALL refuse requested projects not assigned to the current meeting.
|
||||
|
||||
The summary agent SHALL be able to read past project meeting summary files through a read-only tool. Meeting Assistant SHALL refuse reads for summary files outside the configured summaries folder, the current summary file, or summary files that do not belong to one of the current meeting's assigned projects.
|
||||
|
||||
When search results identify past meeting summaries with the `past-meetings/` prefix, the past meeting summary read tool SHALL accept that prefixed path.
|
||||
|
||||
The summary instructions SHALL clearly distinguish `write_summary`, which writes the current meeting's summary, from past meeting summary read tools, which are read-only historical context.
|
||||
|
||||
The summary pipeline SHALL write the summary note as a markdown artifact linked to the meeting note, transcript, and assistant context.
|
||||
|
||||
The summary instructions SHALL tell the summary agent to include only the most relevant cropped screenshot links from assistant context in the summary, placing them near the related summary text.
|
||||
|
||||
The summary agent SHALL be able to read the meeting note, transcript, assistant context, glossary, and bound project files through tools.
|
||||
|
||||
The summary agent SHALL be able to write the summary and assistant context files as its owned artifacts.
|
||||
|
||||
For summary-agent writes to any file other than the summary file and assistant context file, Meeting Assistant SHALL record an in-memory diff containing removed and added lines.
|
||||
|
||||
Meeting Assistant SHALL use a diff implementation that can reduce whole-file rewrites to changed lines instead of treating every rewrite as a full replacement.
|
||||
|
||||
When the summary agent finishes, Meeting Assistant SHALL append the collected external write diffs to the assistant context file.
|
||||
|
||||
After writing the meeting summary, the summary agent SHALL update existing project files when the meeting produced durable project knowledge, decisions, next steps, or context.
|
||||
|
||||
The assistant context note SHALL keep `title`, `start_time`, `end_time`, `meeting`, `transcript`, `summary`, `state`, and `agenda` in frontmatter. Meeting Assistant SHALL write `title` and `start_time` when the assistant context note is created, update `title` when later meeting metadata is discovered, and write `end_time` when transcript processing stops. When a Teams appointment is detected at recording start, the assistant context note SHALL also keep `scheduled_end` in frontmatter. The `state` value SHALL be one of `collecting metadata`, `transcribing`, `speaker recognition`, `summarizing`, `finished`, or `error`.
|
||||
|
||||
The summary note SHALL keep frontmatter links to meeting artifacts and SHALL copy `title`, `start_time`, `end_time`, `attendees`, and `projects` from the meeting note when available. If the meeting note has no title, the summary agent SHALL be able to provide a title when writing the summary.
|
||||
|
||||
When the summary note already has an `attendees` frontmatter property, Meeting Assistant SHALL preserve the existing summary attendees instead of overwriting them from the meeting note.
|
||||
When the summary agent calls `write_summary` with a non-empty `title` parameter, Meeting Assistant SHALL update the current meeting note title and write that title to the summary note frontmatter.
|
||||
|
||||
The summary agent SHALL be able to read and write the assistant context body as its own notebook using append-by-default, explicit whole-body replacement, replace, and insert line modes.
|
||||
When the summary agent calls `write_summary` without a `title` parameter or with a blank `title` parameter, Meeting Assistant SHALL keep the existing meeting note title and summary title behavior.
|
||||
|
||||
When the summary agent calls `write_context` without line edit arguments and without `replace_file`, Meeting Assistant SHALL append the supplied content to the assistant context body while preserving assistant context frontmatter.
|
||||
The summary instructions SHALL tell the summary agent to provide a concise `title` parameter to `write_summary` when the meeting note still has a generated default title and the meeting purpose is clear from context.
|
||||
|
||||
When the summary agent calls `write_context` with `replace_file` true, Meeting Assistant SHALL replace the assistant context body while preserving assistant context frontmatter.
|
||||
#### Scenario: Summary agent renames default-titled meeting
|
||||
- **GIVEN** the current meeting note has a generated default title
|
||||
- **AND** the meeting purpose is clear from transcript, user notes, or assistant context
|
||||
- **WHEN** the summary agent writes the summary
|
||||
- **THEN** the summary instructions tell the agent to provide a concise `title` parameter
|
||||
- **AND** Meeting Assistant updates the meeting note title and summary note title to the provided title
|
||||
|
||||
Meeting Assistant SHALL refuse ambiguous `write_context` calls that combine `replace_file` with line edit arguments.
|
||||
#### Scenario: Summary title parameter is omitted
|
||||
- **GIVEN** the current meeting note has an existing title
|
||||
- **WHEN** the summary agent writes the summary without a title parameter
|
||||
- **THEN** Meeting Assistant keeps the existing meeting note title
|
||||
- **AND** writes the existing title to the summary note frontmatter
|
||||
|
||||
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: Assistant context note is initialized
|
||||
- **WHEN** Meeting Assistant starts a meeting session
|
||||
- **THEN** it creates the assistant context note with frontmatter links to the meeting note, transcript note, and summary note
|
||||
- **AND** the assistant context frontmatter state is `collecting metadata`
|
||||
- **AND** the assistant context frontmatter includes `agenda`, empty when no agenda is known
|
||||
- **AND** the assistant context frontmatter includes `scheduled_end` when Teams metadata supplied a scheduled end time
|
||||
|
||||
#### Scenario: Assistant context state follows meeting processing
|
||||
- **WHEN** transcription, final speaker recognition, and summary generation progress
|
||||
- **THEN** Meeting Assistant updates assistant context frontmatter state to `collecting metadata`, `transcribing`, `speaker recognition`, `summarizing`, `finished`, or `error` as appropriate
|
||||
- **AND** preserves existing `agenda` and `scheduled_end` frontmatter values
|
||||
|
||||
#### Scenario: Summary copies final meeting attendees
|
||||
- **WHEN** the summary agent writes a summary note after meeting attendees have changed
|
||||
- **THEN** the summary note frontmatter includes the final meeting note attendees
|
||||
|
||||
#### Scenario: Existing summary attendees are preserved
|
||||
- **GIVEN** an existing summary note has `attendees` in frontmatter
|
||||
- **WHEN** the summary agent rewrites the summary
|
||||
- **THEN** Meeting Assistant preserves the existing summary attendees
|
||||
|
||||
#### Scenario: Summary copies final meeting projects
|
||||
- **WHEN** the summary agent writes a summary note after meeting projects have changed
|
||||
- **THEN** the summary note frontmatter includes the final meeting note projects
|
||||
|
||||
#### Scenario: Summary waits for pending screenshot OCR
|
||||
- **GIVEN** screenshot OCR is still running for a meeting
|
||||
- **WHEN** transcript processing is ready to run the automatic summary
|
||||
- **THEN** Meeting Assistant waits for the screenshot OCR to complete before moving the assistant context to `summarizing`
|
||||
- **AND** proceeds after the configured OCR timeout if OCR does not finish
|
||||
|
||||
#### Scenario: Summary can include relevant cropped screenshots
|
||||
- **GIVEN** assistant context contains cropped screenshot markdown links
|
||||
- **WHEN** Meeting Assistant builds summary-agent instructions
|
||||
- **THEN** the instructions tell the summary agent to include only the most relevant cropped screenshots in the summary
|
||||
- **AND** to markdown-link them near the related summary text
|
||||
|
||||
#### Scenario: External project write is audited
|
||||
- **WHEN** the summary agent writes a bound project file
|
||||
- **THEN** Meeting Assistant records the changed removed and added lines for that project file
|
||||
- **AND** appends that diff to the assistant context after the agent finishes
|
||||
|
||||
#### Scenario: Dictionary write is audited
|
||||
- **WHEN** the summary agent adds a dictation word and the dictionary file changes
|
||||
- **THEN** Meeting Assistant records the changed removed and added lines for the dictionary file
|
||||
- **AND** appends that diff to the assistant context after the agent finishes
|
||||
|
||||
#### Scenario: Owned artifact writes are not audited
|
||||
- **WHEN** the summary agent writes the summary or assistant context file
|
||||
- **THEN** Meeting Assistant does not include those writes in the external write diff audit
|
||||
|
||||
#### Scenario: Assistant context body appends by default
|
||||
- **WHEN** the summary agent writes assistant context content without line arguments
|
||||
- **THEN** Meeting Assistant appends the content to the existing assistant context body
|
||||
- **AND** preserves the existing assistant context frontmatter
|
||||
|
||||
#### Scenario: Assistant context body can be explicitly replaced
|
||||
- **WHEN** the summary agent writes assistant context content with `replace_file` set to true
|
||||
- **THEN** Meeting Assistant replaces the assistant context body
|
||||
- **AND** preserves the existing assistant context frontmatter
|
||||
|
||||
#### Scenario: Assistant context body writes do not duplicate frontmatter
|
||||
- **WHEN** the summary agent writes assistant context content that accidentally includes a markdown frontmatter block
|
||||
- **THEN** Meeting Assistant preserves the existing assistant context frontmatter
|
||||
- **AND** writes only the replacement body content after that frontmatter
|
||||
|
||||
#### Scenario: Assistant context write mode is ambiguous
|
||||
- **WHEN** the summary agent combines `replace_file` with `from`, `to`, or `insert`
|
||||
- **THEN** Meeting Assistant refuses the assistant context write
|
||||
|
||||
#### 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
|
||||
|
||||
#### Scenario: Past project meetings are listed by current meeting project scope
|
||||
- **GIVEN** the current meeting note is assigned to `Project X` and `Project Y`
|
||||
- **AND** the summaries folder contains prior summary notes for `Project X`, `Project Y`, and `Project Z`
|
||||
- **WHEN** the summary agent lists past project meetings without a project filter
|
||||
- **THEN** Meeting Assistant returns prior summaries for `Project X` and `Project Y`
|
||||
- **AND** excludes prior summaries for `Project Z`
|
||||
- **AND** excludes the current meeting's summary file
|
||||
|
||||
#### Scenario: Past project meeting listing rejects out-of-scope projects
|
||||
- **GIVEN** the current meeting note is assigned to `Project X`
|
||||
- **WHEN** the summary agent lists past project meetings for `Project Z`
|
||||
- **THEN** Meeting Assistant refuses the request because `Project Z` is not assigned to the current meeting
|
||||
|
||||
#### Scenario: Past project meeting listing skips malformed notes
|
||||
- **GIVEN** the current meeting note is assigned to `Project X`
|
||||
- **AND** the summaries folder contains one valid prior `Project X` summary note
|
||||
- **AND** the summaries folder contains one markdown file with malformed frontmatter
|
||||
- **WHEN** the summary agent lists past project meetings
|
||||
- **THEN** Meeting Assistant returns the valid prior summary
|
||||
- **AND** does not fail because of the malformed file
|
||||
|
||||
#### Scenario: Past project meeting summary is read-only historical context
|
||||
- **GIVEN** the current meeting note is assigned to `Project X`
|
||||
- **AND** a prior summary note in the configured summaries folder is assigned to `Project X`
|
||||
- **WHEN** the summary agent reads that prior summary note with line bounds
|
||||
- **THEN** Meeting Assistant returns the clamped inclusive line range
|
||||
- **AND** exposes no tool to write that prior summary note
|
||||
|
||||
#### Scenario: Past project meeting search paths can be read
|
||||
- **GIVEN** the current meeting note is assigned to `Project X`
|
||||
- **AND** a prior summary note in the configured summaries folder is assigned to `Project X`
|
||||
- **WHEN** the summary agent searches and receives a `past-meetings/` prefixed summary path
|
||||
- **THEN** the summary agent can pass that prefixed path to `read_past_project_meeting_summary`
|
||||
- **AND** Meeting Assistant reads the prior summary note
|
||||
#### Scenario: Summary title parameter is blank
|
||||
- **GIVEN** the current meeting note has an existing title
|
||||
- **WHEN** the summary agent writes the summary with a blank title parameter
|
||||
- **THEN** Meeting Assistant keeps the existing meeting note title
|
||||
- **AND** writes the existing title to the summary note frontmatter
|
||||
|
||||
### Requirement: Meeting screenshots are captured into assistant context
|
||||
Meeting Assistant SHALL expose a configurable screenshot hotkey.
|
||||
|
||||
Reference in New Issue
Block a user