## 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