Phase 2 tests cover the handoffs between agents and verify that data is passed correctly across the full pipeline. IDs continue from Phase 1. A separate edge case table follows, using the E01 sequence, covering failure scenarios that do not fit a single agent but arise from real operating conditions.
ID
Scenario
Input
Expected output
Pass criteria
T15
Content Intake Agent to Approval Routing Agent: full handoff
Airtable record moves to 'Ready for Review' with all required fields populated.
Content package assembled by Intake Agent is received by Approval Routing Agent without data loss. Slack approval message contains all fields from the Airtable record.
Slack message fields (caption, image URL, channels, scheduled time) match the source Airtable record exactly. No field truncation or encoding errors.
T16
Approval Routing Agent to Publishing Agent: approve path handoff
Reviewer clicks Approve in Slack.
Publishing Agent receives the same content package that was delivered to the Approval Agent. No field mutation between agents.
Buffer scheduling call uses the exact caption, image URL, channel list, and timestamp from the original Airtable record. Diff between intake package and publishing input is zero.
T17
Reject and resubmit cycle
Reviewer rejects a post with feedback. Coordinator updates the Airtable record and resets status to 'Ready for Review'.
The pipeline re-triggers from the beginning. The updated caption or asset is retrieved from Google Drive. A fresh Slack approval request is sent.
New Slack approval message reflects the updated content. Previous rejection feedback remains in the Airtable notes field and is not overwritten. Cycle completes without duplicate records.
T18
Multi-channel scheduling: three or more channels from one Airtable record
Airtable record specifies three target channels (e.g. Instagram, Facebook, LinkedIn). Single caption and asset URL provided.
Publishing Agent makes a separate Buffer API call per channel, all using the same caption and image. All three Buffer posts created with the correct channel identifiers.
Three Buffer posts visible in sandbox queue, each assigned to the correct channel profile ID. Airtable record shows all three Buffer URLs logged.
T19
Airtable webhook fires twice for the same record (duplicate trigger)
Status field updated to 'Ready for Review' triggers two webhook events within a 5-second window (common in Airtable webhook behaviour).
Deduplication logic detects the second event matches an already-in-flight record ID. Second trigger is suppressed. Only one Slack approval message sent.
Exactly one Slack message appears in the approvals channel for the record. Execution log shows the second event was detected and discarded. No duplicate Buffer posts created.
T20
Handoff latency: Approval Agent response time under load
Ten Airtable records moved to 'Ready for Review' simultaneously.
All ten records processed in sequence without queue overflow. Each generates a Slack approval message within 2 minutes of the trigger.
All ten Slack messages received within the 2-minute window. No records stuck in an intermediate state. Execution log shows queue processing order.
T21
Publishing Agent Airtable write confirms Buffer post URL is valid
Buffer API returns a post URL for a scheduled item.
Agent writes the URL to the Airtable record. The URL is accessible and resolves to the correct Buffer post in the sandbox account.
Airtable record's Buffer URL field contains a non-empty string beginning with 'https://buffer.com'. HTTP GET to the URL returns 200 or 301 (redirect to post).
Edge case tests cover failure and boundary conditions that span agent boundaries or depend on external tool behaviour.
ID
Scenario
Input
Expected output
Pass criteria
E01
Duplicate Airtable record with identical caption and asset URL
Two separate Airtable records with identical caption and image URL are both moved to 'Ready for Review' within the same minute.
Both records are treated as independent items. Each receives its own Slack approval message and its own Buffer scheduling call. No merging or suppression occurs.
Two distinct Slack messages in the approvals channel, each referencing a different Airtable record ID. Two Buffer posts created. Deduplication logic does not suppress legitimate distinct records.
E02
Google Drive asset deleted between trigger and retrieval
Airtable record triggers; in the time between trigger and asset retrieval, the Google Drive file is deleted.
Content Intake Agent catches a 404 from the Drive API. Record set to 'Error: Asset Not Found'. Coordinator notified via Slack DM with the deleted file name.
No package assembled. Airtable error status set within 30 seconds of the failed retrieval. Slack DM includes the file name extracted from the original asset URL.
E03
Buffer API is unavailable (503 or timeout)
Publishing Agent attempts to schedule a post; Buffer returns 503 or the connection times out after 10 seconds.
Agent retries up to 3 times with exponential backoff (15s, 30s, 60s). If all retries fail, Airtable record set to 'Error: Buffer Unavailable'. Coordinator and FullSpec monitoring webhook alerted.
Three retry attempts logged with timestamps. On final failure, Airtable record status updated. Monitoring webhook receives payload with record ID, channel list, and attempted post time for manual retry.
E04
Slack approval message receives no response within the configured timeout window (default: 48 hours)
Approval Routing Agent sends a Slack message. No button interaction is received within 48 hours.
Agent sends a reminder DM to the configured reviewer after 24 hours. After 48 hours with no response, Airtable record set to 'Pending: Approval Timeout'. Coordinator notified. Post not scheduled.
Reminder DM sent at the 24-hour mark (verified by execution log timestamp). Record status updated to 'Pending: Approval Timeout' at the 48-hour mark. No Buffer API call made.
E05
Airtable field schema mismatch (field renamed or removed by workspace admin)
A required Airtable field (e.g. 'Scheduled Publish Time') has been renamed by a workspace admin after the automation was configured.
Content Intake Agent cannot resolve the field. Execution halts with a schema error. Alert sent to the FullSpec monitoring webhook with the missing field name and record ID.
Monitoring webhook receives alert within 60 seconds. Error message includes the expected field name. No downstream agents triggered. Coordinator receives a Slack DM advising of the configuration issue.