## MODIFIED Requirements ### Requirement: Windows Outlook enrichment is optional Meeting Assistant SHALL gate Outlook Classic COM enrichment behind the Windows compilation target. For standalone metadata lookup, Meeting Assistant SHALL first consider Teams appointments that are in progress with at least five minutes remaining. If exactly one such appointment exists, Meeting Assistant SHALL select it even when another appointment starts within five minutes. If no suitable in-progress appointment exists, Meeting Assistant SHALL consider Teams appointments that start within five minutes after recording starts and SHALL select one only when exactly one such upcoming appointment exists. When the Windows build starts a meeting and Outlook Classic yields one appointment through that selection order, Meeting Assistant SHALL copy the appointment title to the meeting note and copy the appointment agenda and scheduled end time to the assistant-context frontmatter. When more than one appointment exists in the applicable in-progress or upcoming selection group, Meeting Assistant SHALL leave standalone metadata unselected. Meeting Assistant SHALL exclude canceled Outlook appointments from current Teams appointment metadata lookup. Meeting Assistant SHALL copy the appointment attendees to the meeting note only when the raw appointment attendee count is less than or equal to the configured `Recording:MaxMetadataAttendeeImportCount`. The default maximum SHALL be 30 attendees. The agenda SHALL be extracted from the appointment body content before the Teams join separator or Teams join text. #### Scenario: Current Teams appointment enriches meeting artifacts - **WHEN** a Windows build starts a meeting while Outlook Classic selects exactly one Teams appointment through the standalone selection order - **THEN** Meeting Assistant uses the appointment subject as the meeting title - **AND** writes the appointment attendees into meeting note frontmatter when the raw attendee count is within the configured import limit - **AND** writes the appointment agenda into assistant-context frontmatter - **AND** writes the appointment end time as `scheduled_end` into assistant-context frontmatter #### Scenario: Meeting starting within five minutes enriches an early recording - **GIVEN** no suitable Teams appointment is already in progress - **AND** exactly one Teams appointment starts one minute after the recording start time - **WHEN** a Windows build starts the meeting recording - **THEN** Meeting Assistant selects that upcoming appointment's metadata #### Scenario: In-progress meeting takes priority over an upcoming meeting - **GIVEN** exactly one Teams appointment is in progress with at least five minutes remaining - **AND** another Teams appointment starts within five minutes after the recording start time - **WHEN** a Windows build starts the meeting recording - **THEN** Meeting Assistant selects the in-progress appointment's metadata #### Scenario: Canceled appointment is ignored during metadata lookup - **GIVEN** Outlook Classic exposes one canceled suitable Teams appointment - **AND** Outlook Classic exposes one active suitable Teams appointment at the same time - **WHEN** a Windows build starts a meeting - **THEN** Meeting Assistant selects the active appointment metadata #### Scenario: Oversized attendee list is not imported - **GIVEN** the configured metadata attendee import limit is 30 - **WHEN** a Windows build starts a meeting while Outlook Classic exposes exactly one suitable Teams appointment with 31 attendees - **THEN** Meeting Assistant uses the appointment subject as the meeting title - **AND** does not write the appointment attendees into meeting note frontmatter - **AND** writes the appointment agenda into assistant-context frontmatter - **AND** writes the appointment end time as `scheduled_end` into assistant-context frontmatter #### Scenario: Outlook is unavailable or metadata lookup is ambiguous - **WHEN** Outlook Classic is unavailable or more than one Teams appointment exists in the applicable in-progress or upcoming selection group - **THEN** Meeting Assistant starts the recording with the default generated meeting title and empty agenda - **AND** omits `scheduled_end` from assistant-context frontmatter ### Requirement: Outlook Teams meetings can prompt recording start Meeting Assistant SHALL enable scheduled Outlook Classic calendar checks for recording-start prompts by default. When scheduled recording prompts are enabled on Windows, Meeting Assistant SHALL periodically read the user's Outlook Classic calendar appointments for the current local day through COM into an in-memory cache. Meeting Assistant SHALL default the Outlook calendar sync interval to 30 minutes when scheduled recording prompts are enabled. Meeting Assistant SHALL schedule recording-start prompts from the cached calendar appointments rather than querying Outlook for each prompt. Meeting Assistant SHALL consider Teams appointments from Outlook calendar data as initial prompt candidates. The detection MAY be extended later for other meeting providers. Meeting Assistant SHALL exclude canceled Outlook appointments from recording-start prompt candidates. When a Teams appointment reaches its scheduled start window, Meeting Assistant SHALL show a native Windows app notification asking whether to record the meeting, with affirmative and negative actions. When a recording is active and the cached appointment has metadata, the recording-start notification SHALL additionally offer an `Add metadata to current meeting` action after the affirmative and negative actions. The native Windows notification renderer MAY choose the physical button layout. On Windows, the recording-start notification SHALL request reminder-style toast behavior and remain actionable for 5 minutes. Meeting Assistant SHALL prompt at most once per calendar appointment during a local day, regardless of whether the user accepts, declines, ignores, or attaches metadata from the notification. If the user accepts the recording prompt while no recording is active, Meeting Assistant SHALL start a new recording normally. If the user accepts the recording prompt while another recording is active, Meeting Assistant SHALL stop the active recording normally and then start the prompted meeting recording. When stopping an active recording for an accepted prompt, Meeting Assistant SHALL use the normal stop path so empty or too-short recordings are removed according to existing settings and other completed recordings continue normal transcription, speaker recognition, and summary processing. When the user accepts a recording prompt, Meeting Assistant SHALL start the recording with the accepted cached appointment's metadata and SHALL NOT perform a separate current-meeting metadata lookup for that prompted start. Prompted-start metadata SHALL include the accepted appointment title, attendees, agenda, and scheduled end when those values are available from the cached appointment. Prompted starts SHALL run the normal meeting workflow `created` rules before applying the accepted appointment metadata. After `created` rules run, prompted starts SHALL apply the accepted appointment metadata and then run the normal `collecting metadata` to `transcribing` state-transition workflow rules with that metadata available in the meeting note. If the user chooses `Add metadata to current meeting` while that recording is still active, Meeting Assistant SHALL apply the exact cached appointment's title, eligible attendees, agenda, and scheduled end to the active meeting without stopping or starting recording. Attaching prompted metadata SHALL use the normal attendee canonicalization, attendee import limit, and `attendee_added` workflow transformations, SHALL preserve the meeting note body, and SHALL refresh meeting metadata in the meeting note, assistant context, and transcript artifacts. Explicitly attached prompted metadata SHALL take precedence over any standalone Outlook metadata lookup still running for that recording. If no recording is active when the attach action is handled, Meeting Assistant SHALL leave meeting artifacts and recording state unchanged. #### Scenario: Teams meeting start prompts the user - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** Meeting Assistant has synced Outlook Classic Teams appointments for today - **WHEN** the appointment reaches its scheduled start window - **THEN** Meeting Assistant shows a native Windows app notification asking whether to record the meeting - **AND** the notification remains actionable for 5 minutes - **AND** marks that appointment as prompted for the day #### Scenario: Active recording prompt offers metadata attachment - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** a meeting recording is active - **AND** the due cached appointment has metadata - **WHEN** Meeting Assistant shows the appointment's recording-start notification - **THEN** the notification includes `Yes`, `No`, and `Add metadata to current meeting` actions - **AND** orders the metadata action after `Yes` and `No` #### Scenario: Idle prompt omits metadata attachment - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** no meeting recording is active - **WHEN** Meeting Assistant shows an appointment's recording-start notification - **THEN** the notification includes the existing affirmative and negative actions - **AND** does not include `Add metadata to current meeting` #### Scenario: Canceled Teams meeting does not prompt recording - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** Meeting Assistant has synced a canceled Outlook Classic Teams appointment for today - **WHEN** the canceled appointment reaches its scheduled start window - **THEN** Meeting Assistant does not show a recording prompt for that appointment #### Scenario: Back-to-back cached Teams meetings prompt without another Outlook sync - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** Meeting Assistant has synced two Teams appointments for today that start ten minutes apart - **WHEN** each appointment reaches its scheduled start window - **THEN** Meeting Assistant shows a recording prompt for each appointment - **AND** does not require another Outlook calendar sync between the prompts #### Scenario: User accepts prompt while idle - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** no meeting recording is active - **WHEN** the user accepts a Teams meeting recording prompt - **THEN** Meeting Assistant starts recording normally #### Scenario: User accepts prompt while already recording - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** a meeting recording is active - **WHEN** the user accepts a Teams meeting recording prompt - **THEN** Meeting Assistant stops the active recording normally - **AND** starts a new recording normally after the stop request #### Scenario: Accepted prompt supplies meeting metadata - **GIVEN** scheduled Outlook recording prompts are enabled - **AND** Meeting Assistant has cached two current Teams appointments with different metadata - **WHEN** the user accepts the recording prompt for one appointment - **THEN** Meeting Assistant starts the recording with the accepted appointment's metadata - **AND** does not perform a standalone current-meeting metadata lookup for that recording - **AND** runs `created` workflow rules before writing the cached appointment metadata - **AND** runs `collecting metadata` to `transcribing` workflow rules after writing the cached appointment metadata #### Scenario: Prompted metadata is attached to the active meeting - **GIVEN** a meeting recording is active without calendar metadata - **AND** two concurrent appointment notifications carry different cached metadata - **WHEN** the user chooses `Add metadata to current meeting` on one notification - **THEN** Meeting Assistant applies only that notification's appointment metadata to the active meeting - **AND** keeps the current recording and transcription running - **AND** does not start a new recording #### Scenario: Explicit attachment wins over delayed lookup - **GIVEN** standalone Outlook metadata lookup is still running for an active recording - **WHEN** the user attaches metadata from an appointment notification - **AND** the standalone lookup completes later with different metadata - **THEN** the prompted appointment metadata remains on the active meeting artifacts #### Scenario: Attach action becomes stale - **GIVEN** a recording-start notification offered `Add metadata to current meeting` - **AND** the active recording stops before the action is handled - **WHEN** the user activates the metadata action - **THEN** Meeting Assistant does not change completed meeting artifacts - **AND** does not start a recording #### Scenario: Prompt is disabled - **GIVEN** scheduled Outlook recording prompts are disabled - **WHEN** a Teams appointment reaches its scheduled start - **THEN** Meeting Assistant does not query Outlook for recording prompt candidates - **AND** does not show a recording prompt