Add meeting workflow automation

This commit is contained in:
2026-05-27 12:55:18 +02:00
parent e85274829a
commit b114071957
29 changed files with 1703 additions and 12 deletions
@@ -0,0 +1,15 @@
# Change: Add meeting automation rules
## Why
Manual meeting-specific adjustments such as adding default attendees, cleaning titles, binding projects, or adding context notes should be configurable without recompiling Meeting Assistant.
## What Changes
- Add a configurable local YAML rules file.
- Evaluate rules on meeting lifecycle events.
- Support a small workflow surface: triggers, conditions, and meeting/context mutation steps.
- Use a real expression engine for conditions and Razor syntax for step values.
## Impact
- Adds a local-only rules file path setting.
- Adds meeting automation runtime code and tests.
- Keeps the initial step surface intentionally small.
@@ -0,0 +1,69 @@
## ADDED Requirements
### Requirement: Meeting automation rules are configurable
Meeting Assistant SHALL allow an optional local YAML rules file path to be configured.
When the configured rules file is missing or blank, Meeting Assistant SHALL continue without applying automation rules.
The local rules file SHALL be ignored by source control.
Rules SHALL be evaluated against the latest meeting note data read from disk for each event.
#### Scenario: Missing rules file is ignored
- **WHEN** Meeting Assistant handles a meeting event and no configured rules file exists
- **THEN** it leaves the meeting note and assistant context unchanged
#### Scenario: Created rule adds default attendee
- **GIVEN** a configured rule that triggers on meeting creation when `meeting.attendees.count = 0`
- **WHEN** Meeting Assistant creates a meeting note without attendees
- **THEN** it adds the configured attendee to the meeting note
### Requirement: Meeting automation rules support lifecycle triggers
Meeting Assistant SHALL support rule triggers for `created`, `state_transition`, and `speaker_identified`.
A `state_transition` trigger MAY filter by `from`, `to`, or both state values.
A `speaker_identified` trigger MAY filter by speaker name.
#### Scenario: State transition rule matches from and to
- **GIVEN** a configured rule that triggers on a state transition from `collecting metadata` to `transcribing`
- **WHEN** Meeting Assistant transitions that meeting from `collecting metadata` to `transcribing`
- **THEN** it applies the rule steps
#### Scenario: Speaker identified rule filters by name
- **GIVEN** a configured rule that triggers when speaker `Ada` is identified
- **WHEN** Meeting Assistant identifies speaker `Grace`
- **THEN** it does not apply the rule
- **WHEN** Meeting Assistant identifies speaker `Ada`
- **THEN** it applies the rule steps
### Requirement: Meeting automation rules support conditions and steps
Meeting Assistant SHALL support rule conditions using an expression engine.
Rules SHALL support nested `and`, `or`, and `not` condition groups.
Step values SHALL support Razor syntax against the current meeting event model.
Meeting Assistant SHALL support these initial rule steps:
- `add_attendee`
- `remove_attendee`
- `set_property`
- `add_context`
- `add_project`
#### Scenario: Nested conditions choose a matching rule
- **GIVEN** a configured rule with nested `and`, `or`, and `not` conditions over meeting title, attendees, and event data
- **WHEN** the condition evaluates to true
- **THEN** Meeting Assistant applies the rule
- **WHEN** the condition evaluates to false
- **THEN** Meeting Assistant skips the rule
#### Scenario: Templated context mentions identified speaker
- **GIVEN** a configured `speaker_identified` rule with an `add_context` step using Razor syntax
- **WHEN** Meeting Assistant identifies matching speaker `Ada`
- **THEN** it appends rendered context text containing `Ada` to the assistant context note
#### Scenario: Rule can clean a meeting title
- **GIVEN** a configured state-transition rule that matches a title containing a configured marker
- **WHEN** the rule runs
- **THEN** Meeting Assistant can update the meeting title through `set_property`
@@ -0,0 +1,12 @@
## 1. Implementation
- [x] 1.1 Add automation options and ignore the local rules YAML file.
- [x] 1.2 Load YAML rules from the configured local file.
- [x] 1.3 Evaluate triggers and nested conditions.
- [x] 1.4 Render step values with Razor syntax.
- [x] 1.5 Apply supported steps to meeting notes and assistant context.
- [x] 1.6 Fire rules from meeting creation, state transitions, and speaker identification.
## 2. Verification
- [x] 2.1 Cover created, state-transition, and speaker-identified paths.
- [x] 2.2 Cover nested condition logic and templated values.
- [x] 2.3 Run relevant tests and strict OpenSpec validation.