Files
meeting-assistant/openspec/changes/prioritize-finish-meeting-tray-action/design.md
T
codex 2f12a96688
PR and Push Build/Test / build-and-test (push) Successful in 11m8s
feat: prioritize finish meeting tray action
2026-08-04 09:55:18 +02:00

2.5 KiB

Context

The tray-menu builder currently returns a flat list of semantic actions, while the Windows renderer infers separators from item indexes and the Exit action. During an active recording, the normal stop action is added after the microphone submenu and uses a long implementation-oriented label. This makes the primary meeting-completion action look equivalent to cancel, profile switching, and device selection.

Goals / Non-Goals

Goals:

  • Give normal meeting completion the concise label Finish meeting.
  • Make that action the only item in the section immediately below Open agent while recording.
  • Keep fine-grained recording controls in a distinct following section.
  • Make section boundaries observable in platform-independent menu behavior tests.

Non-Goals:

  • Change what normal stop, abort, profile switching, or microphone selection does.
  • Change idle-menu actions, hotkeys, endpoints, or recording state transitions.
  • Add icons, confirmation prompts, or nested submenus.

Decisions

Represent section starts in the menu model

Add a section-start flag to MeetingTaskbarMenuItem. The Windows renderer will insert a separator before items carrying the flag instead of deriving layout from array indexes and action types.

This keeps layout intent in the platform-independent builder where behavior tests can observe it. Keeping another renderer-only special case was rejected because it would leave the requested prominence untestable without Windows UI automation.

Build prioritized and fine-grained controls as separate groups

While recording, the builder will add Open agent, then Finish meeting as a new section, then collect microphone, cancel/discard, and profile-switch actions into a fine-grained group whose first item starts another section. Exit remains the final section.

The action continues to use the existing normal-stop command so transcription, speaker processing, OCR, and summarization semantics do not change.

Risks / Trade-offs

  • A section flag could produce adjacent separators if assigned carelessly → The builder marks only the first item of each non-empty group, and the renderer follows those explicit starts.
  • Menu ordering changes while recording → Limit reordering to the active-recording state; idle and processing actions retain their existing relative order.

Migration Plan

No configuration or data migration is required. Deploying the updated executable changes only tray-menu presentation. Rollback restores the previous label and grouping.

Open Questions

None.