Public Access
78 lines
3.7 KiB
Markdown
78 lines
3.7 KiB
Markdown
## 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.
|
|
|
|
Meeting Assistant SHALL expose a diagnostic endpoint that reloads application configuration so workflow automation configuration changes can be picked up without restarting the application.
|
|
|
|
#### 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
|
|
|
|
#### Scenario: Workflow configuration is reloaded diagnostically
|
|
- **GIVEN** the workflow automation configuration has changed on disk
|
|
- **WHEN** the diagnostic workflow reload endpoint is called
|
|
- **THEN** Meeting Assistant reloads application configuration without restarting
|
|
- **AND** future workflow events use the reloaded workflow automation configuration
|
|
|
|
### 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`
|