Data Check Agent — complexity: Moderate. Estimated build time: 20 hours.
ID
Scenario
Input
Expected output
Pass criteria
T01
Happy path: scheduled trigger fires, clean dataset
PostgreSQL sandbox table with 500 rows, all fields valid. Airtable sandbox base up to date.
Agent completes run, returns structured issue list with zero issues found. Execution log shows all rule checks ran.
Issue list length = 0; all 12 rules logged as executed; no exceptions thrown; run duration recorded.
T02
Null value detection in required field
100 rows in sandbox; 8 rows have NULL in the required 'customer_email' field.
Issue list contains exactly 8 entries for null_required_field on customer_email, severity scored as critical.
issue_count = 8; error_type = 'null_required_field'; field = 'customer_email'; severity = 'critical'.
T03
Email format validation failure
50 rows; 5 rows have malformed email strings (missing '@' or domain).
5 issues returned, type = 'format_mismatch', field = 'customer_email', severity = 'high'.
issue_count = 5; error_type = 'format_mismatch'; regex pattern applied matches configured rule.
T04
Duplicate key detection
200 rows; 3 pairs of duplicate 'order_id' values (6 affected rows).
3 duplicate issues returned, affected_row_count = 2 per issue, severity = 'high'.
issue_count = 3; error_type = 'duplicate_key'; field = 'order_id'; affected_row_count = 2 each.
T05
Numeric range violation
80 rows; 4 rows have 'quantity' value of -1 or 0, below the configured minimum of 1.
4 issues returned, type = 'out_of_range', field = 'quantity', severity = 'moderate'.
issue_count = 4; error_type = 'out_of_range'; severity = 'moderate'; min_threshold = 1 reflected in output.
T06
Import event trigger (non-scheduled path)
Synthetic import event payload sent to the trigger endpoint. Dataset contains 2 critical issues.
Agent fires immediately on event receipt, not waiting for scheduled time. Issues detected and list produced.
Trigger source = 'import_event' in run log; issue_count = 2; run completes within 60 seconds of event receipt.
T07
Database connection failure
PostgreSQL sandbox connection string deliberately misconfigured.
Agent catches the connection error, logs a 'source_unavailable' error entry, and does not crash the workflow.
No unhandled exception; error_type = 'source_unavailable' in error log; no partial issue list emitted.
T08
Empty dataset returned by query
PostgreSQL sandbox table truncated to zero rows. Query returns empty result set.
Agent logs a 'no_records_returned' warning, produces an issue list with zero entries, and completes without error.
issue_count = 0; warning logged = 'no_records_returned'; run status = 'completed_with_warning'.
T09
Ruleset config missing or malformed
Quality ruleset config file in Google Sheets sandbox deliberately emptied.
Agent halts run, logs 'ruleset_load_failed' error, and does not proceed to evaluation.
Run status = 'failed'; error = 'ruleset_load_failed'; no issue list emitted; error surfaced in run log.
Issue Routing and Notification Agent — complexity: Moderate. Estimated build time: 16 hours.
ID
Scenario
Input
Expected output
Pass criteria
T10
Happy path: critical and high issues routed correctly
Issue list with 2 critical and 3 high severity entries from Data Check Agent output.
2 Jira tickets created (one per critical issue); all 5 issues written to Airtable log; Slack message posted with severity summary and Jira links.
Jira ticket count = 2; Airtable rows added = 5; Slack message contains issue count breakdown and at least 2 ticket URLs.
T11
Moderate and low issues: no Jira ticket, log only
Issue list with 4 moderate and 6 low severity entries only.
Zero Jira tickets created; 10 Airtable rows written; Slack message posted noting no critical issues.
Jira ticket count = 0; Airtable rows = 10; Slack message indicates 'no critical issues this run'.
T12
Jira API unavailable
Issue list with 1 critical issue. Jira sandbox endpoint returns 503.
Agent logs 'jira_unavailable' error; Airtable row still written; Slack alert still posted with note that ticket creation failed.
Airtable row written = 1; Slack message includes 'ticket creation failed' notice; error log entry = 'jira_unavailable'; no unhandled exception.
T13
Slack API unavailable
Issue list with 2 high severity issues. Slack sandbox webhook returns 500.
Agent logs 'slack_notification_failed'; Jira tickets created successfully; Airtable rows written. Alert failure recorded but run completes.
Jira tickets = 2; Airtable rows = 2; error log = 'slack_notification_failed'; run status = 'completed_with_errors'.
T14
Empty issue list received
Issue list from Data Check Agent contains zero issues.
No Jira tickets created; no Airtable rows added for this run (or a zero-issue run row is written per config); Slack message confirms clean run.
Jira ticket count = 0; Slack message = 'No issues detected in this run'; run completes without error.
Reporting and Metrics Agent — complexity: Simple. Estimated build time: 12 hours.
ID
Scenario
Input
Expected output
Pass criteria
T15
Happy path: weekly aggregation and Datadog push
Airtable sandbox log contains 14 issue rows across the week: 3 critical, 5 high, 4 moderate, 2 low. 9 rows marked resolved.
Datadog sandbox receives a metric push with total_issues = 14, critical = 3, high = 5, moderate = 4, low = 2, resolved = 9, resolution_rate = 64%.
All five metric fields present in Datadog payload; values match Airtable source data; push timestamp within 5 minutes of weekly trigger.
T16
Week with zero issues logged
Airtable sandbox log contains zero rows for the current week.
Datadog push sent with all counts = 0 and resolution_rate = 100% (or N/A per config). Run completes without error.
Datadog payload present; total_issues = 0; no exception; run status = 'completed'.
T17
Datadog API key invalid or endpoint unreachable
Datadog sandbox endpoint returns 403.
Agent logs 'datadog_push_failed'; aggregation data retained in memory or written to a fallback Airtable row for retry. Run does not crash.
Error log = 'datadog_push_failed'; run status = 'completed_with_errors'; no data silently discarded.