## ADDED Requirements

### Requirement: Approval gate pauses execution
An ApprovalNode SHALL pause workflow execution and send a message for human review. Execution SHALL only continue when the user approves or rejects.

#### Scenario: Approval pauses workflow
- **WHEN** an approval node executes
- **THEN** the workflow status SHALL transition to `paused`
- **THEN** a message SHALL be sent with the approval message text

#### Scenario: Approve resumes execution
- **WHEN** the user approves a paused workflow
- **THEN** the workflow SHALL resume with the next node in the DAG

#### Scenario: Reject fails the node
- **WHEN** the user rejects a paused workflow
- **THEN** the node SHALL be marked as failed
- **THEN** downstream nodes SHALL evaluate their trigger rules

### Requirement: Capture response from approval
An approval node MAY support `capture_response: true` to store the user's comment as `$nodeId.output`.

#### Scenario: Approval with captured response
- **WHEN** an approval node has `capture_response: true` and the user provides a comment during approval
- **THEN** the comment SHALL be stored as the node's output, available via `$nodeId.output`

### Requirement: On-reject retry
An approval node MAY specify `on_reject` with a `prompt` and optional `max_attempts` for re-presenting after rejection.

#### Scenario: Reject with retry prompt
- **WHEN** an approval node has `on_reject: { prompt: "..." }` and the user rejects
- **THEN** the on_reject prompt SHALL be executed (typically the AI revises based on feedback)
- **THEN** the approval gate SHALL be re-presented to the user

#### Scenario: Max attempts exceeded
- **WHEN** the number of rejections exceeds `on_reject.max_attempts`
- **THEN** the node SHALL fail permanently
