ID
Scenario
Input
Expected Output
Pass Criteria
T15
Handover Collector Agent passes a correctly formed trigger payload to Handover Compiler Agent
Collector completes the response window with three rows in the Sheets log; window-status set to 'COMPLETE'
Compiler receives a trigger event containing the correct sheet ID, shift ID, and row count; begins compilation within 15 s
Compiler trigger event logged with shift_id, sheet_id, and row_count matching the collector output; compilation starts within 15 s
T16
Handover Collector Agent passes a 'PARTIAL' payload and compiler handles missing rows gracefully
Collector sets window-status to 'PARTIAL'; trigger payload includes a non-responder list with one entry
Compiler reads the non-responder list, includes the 'Incomplete Responses' section, and does not fail or skip the report
Compiled report contains the non-responder name; report delivery proceeds normally; no unhandled exceptions in compiler logs
T17
PagerDuty alert raised correctly when compiler flags a high-priority incident
Compiler output payload contains pagerduty_trigger: TRUE and incident details including severity HIGH and description text
PagerDuty event API receives a POST request with routing_key, payload.severity 'critical', and the incident description in payload.summary
PagerDuty sandbox receives the event within 20 s of compiler completion; event status is 'triggered'; severity and summary fields match the compiler output
T18
No PagerDuty alert raised when compiler finds no unresolved incidents
Compiler output payload contains pagerduty_trigger: FALSE; all tasks marked as resolved
No PagerDuty API call made; workflow proceeds directly to Slack post and Gmail send
PagerDuty API call count is zero for this run; Slack and Gmail steps execute normally; compiler log shows pagerduty_trigger evaluated as FALSE
T19
Notion database page created with correct shift-date title and all report sections
Compiler output ready; Notion integration token valid; target database ID configured
New Notion page created in the shift archive database with title matching 'Handover — [YYYY-MM-DD] [Shift]'; all report sections written as toggle blocks
Page exists in the Notion sandbox database; title format matches expected pattern; toggle block count equals four (Tasks, Equipment, Incidents, Open Items)
T20
Full end-to-end handoff: collector to compiler to all four delivery channels
Three staff respond to the form; one low-priority equipment note present; no incidents
Collector writes log, triggers compiler; compiler posts to Slack, sends Gmail, files to Notion, does not trigger PagerDuty
All three delivery channels confirmed in staging within 90 s of trigger; PagerDuty call count is zero; Notion page created; no errors in workflow log
T21
Collector agent handles a Google Forms webhook delivery delay of more than two minutes
Form submitted at T+0; webhook delivery delayed to T+2m 15s due to simulated latency
Agent detects the delayed response, accepts it within the extended tolerance window, and appends the row correctly to Sheets
Row is appended correctly; no duplicate row created; agent does not mark the staff member as 'NO_RESPONSE' before the tolerance window expires
T22
Compiler agent produces a consistent report format regardless of which staff member submitted data
Two separate runs with different staff subsets providing different combinations of completed and incomplete tasks
Both compiled reports follow the identical section structure with the same heading labels and field order
Section headers in both reports match exactly; field order within each section is identical; no format drift between runs
ID
Scenario
Input
Expected Output
Pass Criteria
E01
Duplicate Google Form submission from the same staff member
Staff member submits the form twice within the response window; both submissions have the same staff_id and shift_id
Second submission detected as a duplicate; only the first submission is written to the Sheets log; a deduplication note is appended to the audit tab
Sheets log contains exactly one row for that staff_id in that shift; audit tab contains a 'DUPLICATE_SUBMISSION' entry referencing the staff_id
E02
Form submission missing a mandatory field (task_status left blank)
Staff member submits the form with the task_status field empty; all other fields populated
Row written to Sheets with task_status marked as 'MISSING'; compiler includes the row in the report with a 'Missing status' note against that staff member
Row present in Sheets log with 'MISSING' in the task_status column; compiler report includes the staff member name with 'Missing status' note; workflow does not abort
E03
Slack API unavailable during the staff message dispatch step
Slack API returns HTTP 503 on all three dispatch attempts
Agent retries three times with exponential backoff (30 s, 60 s, 120 s); after three failures, logs 'SLACK_UNAVAILABLE' and sends an alert to the FullSpec monitoring webhook
Three retry attempts logged with correct backoff intervals; 'SLACK_UNAVAILABLE' error entry present; monitoring alert fired; workflow is paused, not aborted
E04
PagerDuty API returns an authentication error during alert creation
PagerDuty routing key is invalid; API returns HTTP 403
Agent logs 'PAGERDUTY_AUTH_FAILED'; Slack and Gmail delivery are not blocked; an alert is sent to the FullSpec monitoring channel with the error details
Error log entry present with code and routing key reference; Slack and Gmail steps complete normally; monitoring channel receives the alert within 60 s
E05
No staff respond to the form within the response window
Response window expires with zero form submissions; all staff Slack DMs were delivered
Agent sets window-status to 'PARTIAL'; all staff marked 'NO_RESPONSE'; compiler generates a report noting zero responses received; report delivered via Slack and Gmail
Window-status is 'PARTIAL'; all staff rows contain 'NO_RESPONSE'; compiled report contains 'Incomplete Responses' section listing all staff; delivery confirmed to Slack and Gmail
E06
Shift-end trigger fires twice for the same shift ID due to a scheduling misconfiguration
Two trigger events fired with the same shift_id within five minutes of each other
Second trigger detected as a duplicate by the idempotency check on shift_id; second workflow instance is suppressed; a deduplication log entry is created
Only one workflow instance runs for the shift_id; deduplication log entry present referencing the suppressed trigger event timestamp