Public Access
Add meeting workflow automation
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user