Phase 2 validates the full handoff chain between agents (T16 through T24) and then runs a dedicated edge-case battery (E01 through E08) covering real-world failure conditions that span multiple agents or involve unexpected data states.
ID
Scenario
Input
Expected Output
Pass Criteria
T16
Full chain: Critical alert — Triage to Notification to Documentation
Defender sandbox webhook; risk score 92; domain admin account affected
Triage Agent creates CRITICAL Jira ticket with logs; Notification Agent posts Slack message and opens PagerDuty incident; after ticket resolution, Documentation Agent creates Notion report and posts Slack summary
All three agents fire in sequence; Jira ticket, PagerDuty incident, Notion page, and two Slack messages all present; total elapsed time under 3 minutes from webhook receipt to Slack alert
T17
Full chain: Medium alert — Triage to Notification to Documentation
Defender sandbox webhook; risk score 48; standard user account affected
MEDIUM Jira ticket created; Slack alert posted; no PagerDuty; Notion report and Slack summary on resolution
No PagerDuty incident; all other artefacts present; elapsed time under 3 minutes
T18
Handoff delay: Triage Agent completes; Notification Agent delayed by 45 seconds
Valid CRITICAL Jira ticket; artificial 45-second delay injected before Notification Agent trigger poll
Notification Agent fires on next poll cycle; Slack message and PagerDuty incident created despite delay
Slack message delivered within 120 seconds of Jira ticket creation; no duplicate notifications; delay logged
T19
IT Manager review step: manual approval recorded in Jira
CRITICAL ticket in Jira; IT Manager sandbox user adds a comment 'Approved: isolate device' and transitions ticket to IN PROGRESS
Workflow continues; Documentation Agent monitors ticket and will fire on RESOLVED transition
Jira audit log contains IT Manager comment; ticket status = IN PROGRESS; no premature Documentation Agent trigger
T20
IT Manager review step: override with manual action recorded
HIGH ticket; IT Manager sandbox user adds override comment 'False positive: no action required' and closes ticket
Documentation Agent fires on RESOLVED; Notion report reflects override note and false-positive determination
Notion report contains the override comment text; resolution status = false positive; Slack summary reflects same
T21
Notification Agent: correct Slack channel routing by severity
CRITICAL ticket routes to #it-critical-incidents; MEDIUM ticket routes to #it-incidents
Each severity level delivers to the correct sandbox channel
Message present in the correct channel only; no cross-posting
T22
Documentation Agent: Jira ticket with multiple updates produces single Notion report
Jira ticket updated 4 times before resolution (status changes and comment additions)
Single Notion page created on resolution; page body reflects the most recent ticket state; no duplicate pages
Exactly one Notion page per Jira ticket; content reflects final ticket state
T23
Triage Agent: alert with no affected user field populated
Defender payload where the affected user field is null; asset field populated
Triage Agent creates Jira ticket with asset information; affected user field in Jira set to 'Unknown'; Microsoft 365 log query scoped to asset instead
Ticket created; affected user = 'Unknown'; log query uses asset identifier; no unhandled null reference exception
T24
Concurrent alerts: two Defender alerts arrive within 5 seconds of each other
Two distinct Defender sandbox webhook payloads, both with HIGH severity, arriving 5 seconds apart
Two separate Jira tickets created; two Slack notifications sent; two PagerDuty incidents opened; no data from one alert bleeding into the other ticket
Two distinct Jira tickets with unique IDs; ticket bodies contain only their respective alert data; two Slack messages posted; two PagerDuty incidents visible
ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate alert: same Defender alert ID received twice within 60 seconds
Identical Defender webhook payload sent twice; same alert ID
Automation platform detects duplicate alert ID; second payload is suppressed; no second Jira ticket created; deduplication log entry recorded
Exactly one Jira ticket per unique alert ID; deduplication log entry present with suppressed payload timestamp
E02
Missing data: Defender payload arrives with empty alert body
Defender webhook fires; alert body is an empty JSON object
Triage Agent logs a structured parse error; no Jira ticket created; fallback Slack DM sent to IT Manager alerting that an alert arrived with no parseable data
No Jira ticket created; parse error in platform log; Slack DM delivered to sandbox IT Manager user within 90 seconds
E03
Unavailable tool: Jira is unreachable for 3 minutes (simulated outage)
Valid Critical Defender alert; Jira sandbox endpoint returns 503 for 3 minutes
Platform retries with back-off; if Jira remains unavailable after 3 minutes, alert details are written to a fallback queue and a Slack DM is sent to the IT Manager with full alert detail
Fallback queue entry present; Slack DM contains full alert summary; Jira ticket created automatically when Jira recovers (within 5 minutes of service restoration)
E04
Unavailable tool: PagerDuty is unreachable during Critical alert escalation
CRITICAL Jira ticket created; PagerDuty sandbox returns 500 for the escalation call
Notification Agent logs PagerDuty failure; Slack message still delivered; a secondary Slack DM is sent directly to the on-call contact defined in the runbook as a fallback escalation path
Slack message to #it-critical-incidents delivered; secondary DM to on-call contact present; PagerDuty failure logged with HTTP 500 and timestamp
E05
Unavailable tool: Notion is unreachable when Documentation Agent fires
Resolved Jira ticket; Notion sandbox returns 503
Documentation Agent logs error; Slack post-incident summary still delivered with note that the Notion report is pending; retry queued for 10 minutes
Slack summary delivered with pending-report note; retry queue entry present; Notion page created on successful retry
E06
Human timeout: IT Manager does not action the Jira review within 30 minutes
CRITICAL Jira ticket in OPEN state; no IT Manager comment or status change for 30 minutes
Automation platform sends a reminder Slack DM to the IT Manager; after a further 15 minutes with no action, a second escalation DM is sent to the Operations Lead (Priya Nair)
First reminder DM at T+30 min; second escalation DM at T+45 min; both visible in sandbox Slack; no automated containment action taken without human approval
E07
Severity misclassification: alert scores at the MEDIUM/HIGH boundary (risk score 65 to 70)
Defender payload; risk score = 67; affected asset: shared mailbox
Triage Agent classifies as MEDIUM based on asset type weighting in the rubric; Jira ticket tagged MEDIUM; no PagerDuty escalation
Severity = MEDIUM in Jira; no PagerDuty incident; classification log entry shows rubric scoring breakdown for the boundary decision
E08
Missing data: Microsoft 365 log query times out (30-second timeout threshold)
Valid Defender alert; Microsoft 365 sandbox log endpoint does not respond within 30 seconds
Triage Agent creates Jira ticket with severity classification based on available Defender data only; log attachment field set to 'Log retrieval timed out — manual investigation required'; no agent halt
Jira ticket created; severity populated; log field contains timeout note; no unhandled exception; platform log records timeout event with timestamp