Phase 2 verifies that the three agents hand off correctly to each other across the full automated flow, then exercises a dedicated suite of edge cases that could not be isolated to a single agent in Phase 1. All tests in this phase remain in the sandbox environment.
ID
Scenario
Input
Expected output
Pass criteria
T16
Handoff: Intake Agent to Escalation Agent (non-critical, owner present)
New form submission scores as High; owner Slack ID in register
Intake Agent writes row and sets score; Escalation Agent picks up the review date; Slack nudge sent to owner on review date
No manual intervention; Slack message references the correct risk ID written by Intake Agent
T17
Handoff: Intake Agent to human hold, then release to Escalation Agent
New form submission scores as Critical; manager approves after simulated 10-minute delay
Intake Agent holds row at 'Pending Manager Review'; after approval, row status updates and Escalation Agent begins monitoring the review date
Escalation Agent does not fire Slack nudge until manager approval is recorded; after approval, monitoring begins within 2 minutes
T18
Handoff: Escalation Agent confirms score, Reporting Agent picks up updated row
Owner confirms score update 5 days before scheduled monthly report
Register row updated by Escalation Agent; Reporting Agent reads confirmed score in monthly pull; report reflects updated values
Report Notion page shows confirmed score, not the initial proposed score; reviewer name appears in report data
T19
Handoff: Reporting Agent archives register after report generation
Monthly trigger fires with 10 seeded rows
After Notion page is created and emails sent, Reporting Agent writes a dated snapshot of the register to the archive tab
Archive tab contains a dated copy of all rows as they existed at report generation time; original register rows are unchanged
T20
Handoff: Escalation Gmail triggers for overdue item; Reporting Agent reflects overdue count in monthly report
One register row overdue by more than 48 hours at month end
Escalation Gmail sent by Escalation Agent; Reporting Agent includes overdue count in leadership summary narrative
Notion report narrative references at least one overdue item; overdue count matches register state at time of report generation
T21
Full linear flow: form submission to Slack confirmation, no critical flag
End-to-end sandbox run: form submitted, scored Medium, owner Slack nudge sent, owner confirms, register updated
All five steps complete without manual intervention; register row status transitions from 'Submitted' to 'Scored' to 'Awaiting Confirmation' to 'Confirmed'
Each status transition logged with timestamp; total elapsed time from form submission to 'Confirmed' status under 5 minutes excluding deliberate timer delays
T22
Full linear flow: form submission through monthly report distribution
Three sandbox risk rows seeded; monthly trigger fired manually; all rows in Confirmed status
Notion report created; Gmail and Slack distribution completed; archive snapshot written
Report includes all three rows; distribution list receives Gmail; Slack channel receives excerpt; archive tab updated
ID
Scenario
Input
Expected output
Pass criteria
E01
Duplicate form submission: same risk submitted twice within 5 minutes
Two identical Google Forms payloads (same description, same submitter, same timestamp window)
Second submission detected as a likely duplicate; second row written with status 'Duplicate — Pending Review'; risk manager notified via Gmail
Only one row with status 'Scored' or 'Awaiting Confirmation'; second row flagged; Gmail alert includes both row IDs for manual adjudication
E02
Missing data: risk category field left blank on form submission
Form payload with category field empty; all other fields valid
Row written to register with status 'Incomplete'; category field blank; submitter notified via Gmail to resubmit with category selected; scoring step skipped
No score assigned to incomplete row; Gmail sent to submitter sandbox address; error entry in workflow log
E03
Missing data: owner routing table has no entry for submitted category
Form payload with category 'Unclassified'; routing table contains no mapping for this value
Row written; owner field left blank; risk manager notified via Gmail to assign owner manually; Escalation Agent pauses nudges for this row until owner is populated
Owner field blank in register; Gmail sent to risk manager; Escalation Agent does not fire for this row until owner field is populated
E04
Unavailable tool: Slack API returns 429 rate limit error
Escalation Agent attempts to send 15 simultaneous Slack nudges (stress test)
Agent respects rate limit; queues remaining messages with a 1-second delay between sends; all messages delivered within 30 seconds; no messages dropped
All 15 Slack messages delivered; workflow log shows rate-limit handling; no error surfaced to risk manager for a rate-limit event
E05
Unavailable tool: Gmail SMTP authentication failure
Escalation email triggered; Gmail OAuth token expired mid-run
Workflow catches auth failure; error logged with token expiry detail; FullSpec alert raised; email queued for retry after token refresh; risk manager notified via Slack as fallback
Email not silently dropped; error log entry with auth failure code; Slack fallback message delivered to risk manager sandbox channel
E06
Unavailable tool: Google Sheets API returns 503 Service Unavailable
Reporting Agent attempts register pull; Sheets returns 503
Workflow retries pull up to three times with exponential backoff (30s, 60s, 120s); if all retries fail, risk manager notified via Gmail; report generation deferred
Three retry attempts logged with timestamps; on triple failure, Gmail alert sent; no partial Notion page created; deferral logged
E07
Human timeout: manager does not approve Critical hold within 24 hours
Register row in 'Pending Manager Review' status; 24-hour timer elapsed (simulated)
Secondary escalation Gmail sent to risk manager and an escalation contact (e.g. operations director sandbox address); row remains held; Slack reminder posted in manager sandbox channel
Secondary Gmail delivered; Slack reminder posted; row status remains 'Pending Manager Review'; no automated promotion to Critical without approval
E08
Human timeout: owner does not confirm score and no escalation contact is available (escalation Gmail bounces)
Escalation Gmail bounces with 550 error; owner unresponsive; no department head email in register
Bounce detected; workflow logs bounce error; risk manager notified via Slack with bounce detail; row flagged 'Escalation Failed — Manual Action Required'
Bounce error in workflow log; Slack message sent to risk manager sandbox channel; row status updated to 'Escalation Failed — Manual Action Required'; no further automated sends attempted for this row