# meeting-recording Specification ## Purpose TBD - created by archiving change define-meeting-assistant-v1. Update Purpose after archive. ## Requirements ### Requirement: Recording mode is controlled by a configurable hotkey Meeting Assistant SHALL use normal .NET configuration to define the global hotkey that toggles recording/transcription mode. Meeting Assistant SHALL expose a configurable abort/discard hotkey for an active recording. When aborting an active recording, Meeting Assistant SHALL stop active audio capture and transcription, SHALL remove the meeting note, transcript, assistant context, summary artifact, and linked screenshot attachment files created for that run, and SHALL NOT invoke automatic summary generation. When no recording is active, aborting SHALL leave the current recording status unchanged. #### Scenario: Hotkey starts recording - **WHEN** the configured hotkey is pressed while recording mode is inactive - **THEN** Meeting Assistant starts recording/transcription mode #### Scenario: Hotkey stops recording - **WHEN** the configured hotkey is pressed while recording mode is active - **THEN** Meeting Assistant stops recording/transcription mode #### Scenario: Active recording is aborted and discarded - **GIVEN** a meeting recording is active and has created meeting artifacts - **WHEN** the user aborts the recording - **THEN** Meeting Assistant stops recording - **AND** deletes the meeting note, transcript, assistant context, summary artifact if present, and linked screenshot attachment files for that run - **AND** does not invoke the summary pipeline #### Scenario: Abort does nothing when idle - **GIVEN** no meeting recording is active - **WHEN** the user aborts recording - **THEN** Meeting Assistant remains idle ### Requirement: Recording mode captures microphone and computer output Meeting Assistant SHALL capture microphone input and computer output and combine them into one audio stream for transcription. #### Scenario: Both sources produce audio - **WHEN** microphone and computer output audio chunks are available - **THEN** Meeting Assistant mixes them into one PCM stream before transcription #### Scenario: Device-level capture cannot be verified in tests - **WHEN** automated tests run without live audio devices - **THEN** Meeting Assistant verifies the audio mixer through deterministic source abstractions rather than depending on physical microphone or speaker devices ### Requirement: Stopping recording drains captured audio through transcription Meeting Assistant SHALL stop capturing new audio when recording mode is stopped, but it SHALL allow already captured audio to finish running through the configured speech recognition pipeline before the recording session completes. When a recording is stopped, Meeting Assistant SHALL stop audio capture for that run and MAY continue draining transcription, speaker recognition, and summary generation for that stopped run. Meeting Assistant SHALL allow a new recording to start after the previous run's capture has stopped, even if the previous run is still draining transcription, speaker recognition, or summary generation. Each run SHALL keep its own transcript session, meeting note path, artifact paths, options, audio buffer, live transcript buffer, and speaker mappings isolated from later runs. Rapidly-created meeting note, transcript, assistant context, and summary artifact filenames SHALL be distinct. #### Scenario: Hotkey stops recording with buffered audio - **WHEN** the user presses the hotkey to stop recording while captured audio is still buffered for transcription - **THEN** Meeting Assistant stops capturing new audio and appends transcription output for the already captured audio before reporting the recording stopped #### Scenario: New capture starts while previous run is finalizing - **GIVEN** a recording has been stopped and is still finalizing its transcript or summary - **WHEN** the user starts another recording - **THEN** Meeting Assistant starts the new capture - **AND** final transcription and summary output from the stopped run use the stopped run's files - **AND** live transcription buffers from the stopped run are not written to the new run ### Requirement: Transcripts are written to the configured vault folder Meeting Assistant SHALL write live transcript text to a markdown file in the configured vault folder. #### Scenario: Recording starts - **WHEN** recording mode starts - **THEN** Meeting Assistant creates the configured vault folder if necessary and creates a transcript markdown file #### Scenario: Transcription segment arrives - **WHEN** the speech recognition pipeline emits a live transcript segment - **THEN** Meeting Assistant appends that segment to the active transcript text file ### Requirement: Recording can be launched through named profiles Meeting Assistant SHALL treat the root `MeetingAssistant` configuration as a launch profile named `default`. Meeting Assistant SHALL allow additional named launch profiles to be configured as overrides of the default profile. A named profile SHALL be resolved by binding the default profile first, then binding the named profile override onto the same option object. Meeting Assistant SHALL preserve existing recording endpoint URLs as default-profile URLs and SHALL provide equivalent named-profile URLs that include the profile name. Each launch profile SHALL have a distinct global hotkey. Pressing a profile hotkey SHALL toggle recording using that profile's resolved configuration. Meeting Assistant SHALL use the selected launch profile's vault and recording storage settings when it creates meeting notes, transcripts, assistant context notes, summary notes, temporary recordings, and dictation-word inputs for that meeting. Meeting Assistant SHALL use the selected launch profile's summary-agent settings when it runs the summary pipeline for that meeting. #### Scenario: Default profile keeps existing recording URL - **WHEN** the user calls the existing recording start URL without a profile name - **THEN** Meeting Assistant starts recording with the `default` launch profile #### Scenario: Named profile starts recording - **WHEN** the user calls the named-profile recording start URL for profile `english` - **THEN** Meeting Assistant starts recording using the resolved `english` launch profile configuration #### Scenario: Named profile stores meeting artifacts in profile folders - **GIVEN** launch profile `english` overrides vault folders and summary-agent settings - **WHEN** the user starts and stops a recording with launch profile `english` - **THEN** Meeting Assistant creates the meeting note, transcript, assistant context note, and summary note using the resolved `english` vault folders - **AND** Meeting Assistant runs the summary pipeline using the resolved `english` summary-agent settings #### Scenario: Profile hotkeys must be distinct - **GIVEN** two launch profiles configure the same toggle hotkey - **WHEN** Meeting Assistant resolves launch profiles - **THEN** Meeting Assistant rejects the configuration before registering global hotkeys