Phase 2 validates that agents hand off data to each other correctly and that the full chain of tool calls behaves as expected when all sandboxes are connected simultaneously. Integration test IDs continue the T sequence from Phase 1.
ID
Scenario
Input
Expected output
Pass criteria
T17
Full intake-to-assignment handoff: Intake Agent to Slack
New complete asset row created in sandbox Airtable.
Asset Intake Agent validates, generates ID, calls QR API, writes URL to record, then triggers Slack assignment notification in sequence with no manual intervention.
All four steps complete in under 90 seconds. Each step's output is present in the record and Slack workspace.
T18
Intake Agent to Maintenance Scheduler Agent handoff
Asset confirmed in Airtable with maintenance interval set.
On record confirmation, Maintenance Scheduler Agent automatically reads the interval and creates the Google Calendar event without a separate trigger.
Calendar event created within 60 seconds of confirmation; event recurrence matches the interval field value.
T19
Maintenance Scheduler Agent overdue alert to Operations Manager
Asset loan return date set to two days ago; record not updated.
Overdue alert Slack message sent to borrower and copied to Operations Manager (Jordan Mercer). Message contains asset name, ID, and number of days overdue.
Both Slack messages received with correct content. Operations Manager copy confirmed in sandbox Slack.
T20
Intake Agent to Finance Sync Agent handoff on confirmation
Asset record status changed to 'Confirmed' after intake.
Finance Sync Agent detects the confirmation trigger and creates the Xero fixed-asset record without a separate manual step.
Xero demo company shows the new entry within 120 seconds of confirmation. Asset ID in Xero record name matches Airtable.
T21
Monthly audit report generation and Slack post
Scheduler trigger fires (simulated) for monthly audit; Airtable sandbox base contains 15 records, two of which have no status update in 45 days.
Automation exports reconciliation summary, flags the two stale records, and posts the report to the operations Slack channel.
Slack message received in the operations channel; report lists all 15 assets; two stale records are clearly flagged.
T22
Disposal flow end to end: Airtable to Xero to Slack
Asset disposal flag set in Airtable sandbox.
Finance Sync Agent creates write-off in Xero; Airtable record marked inactive; Slack notification sent to Operations Coordinator.
All three outputs present within 120 seconds. Xero disposal entry, Airtable status update, and Slack message all confirmed.
T23
Xero unavailable during Finance Sync Agent handoff
Asset confirmed in Airtable; Xero sandbox endpoint returns HTTP 503.
Finance Sync Agent retries three times; queues the sync job; sends Slack alert to Finance Officer noting the sync will retry automatically.
Three retry attempts logged with timestamps; Slack alert received; sync job re-attempted and succeeds when endpoint recovers in the test.
T24
Parallel asset events: two new records created simultaneously
Two asset rows added to Airtable within 3 seconds of each other.
Both records processed independently; each receives a unique asset ID, QR code URL, and Slack notification. No data cross-contamination.
Two distinct asset IDs; two distinct QR URLs; two distinct Slack messages, each referencing only its own asset.
T25
Maintenance reminder Slack message content accuracy
Asset approaching maintenance due date (simulated to tomorrow).
Slack reminder includes: asset name, asset ID, due date, responsible staff name, and a link to the Airtable record.
All five content elements present in the Slack message. Link resolves to the correct Airtable sandbox record.
T26
Airtable webhook reliability: record update does not double-trigger
Asset record updated twice in rapid succession (within 1 second, simulating a save-and-re-save).
Automation de-duplicates the trigger; only one workflow run initiated; one QR code generated; one Slack message sent.
Automation platform execution log shows exactly one run. Single QR URL in record. Single Slack notification.
Edge-case tests below use the E prefix and cover boundary conditions, malformed data, and external dependency failures. These run within Phase 2 after integration cases T17 through T26 have all passed.
ID
Scenario
Input
Expected output
Pass criteria
E01
Duplicate asset: identical serial number already exists in register
New Airtable row submitted with a serial number that matches an existing active record.
Agent detects the duplicate via serial number lookup; flags the new row with status 'Duplicate detected'; sends Slack alert to Operations Coordinator with the conflicting record link. No new asset ID generated.
Status field shows 'Duplicate detected'; no asset ID created for the duplicate; Slack alert received with link to original record.
E02
Missing data: asset name field is blank
Airtable row submitted with all fields except asset name.
Intake Agent flags record 'Incomplete: asset name required'; no downstream steps run; Slack alert sent to coordinator.
Record flagged correctly; no ID, QR code, or Slack assignment generated; coordinator alert received.
E03
Missing data: cost field contains non-numeric text
Asset record submitted with cost field containing the string 'TBC'.
Finance Sync Agent blocks push to Xero; writes 'Finance sync blocked: invalid cost value' to record; Slack alert sent to Finance Officer (Sam Okafor).
No Xero entry created; record flagged; Finance Officer receives Slack alert specifying the field and the invalid value.
E04
QR Code Generator API unavailable for extended period (all retries exhausted)
Complete asset record submitted; QR sandbox endpoint returns 503 across all three retry attempts.
Agent writes 'QR generation failed: manual label required' to the Airtable record; Slack alert sent to Operations Coordinator; all other downstream steps (Slack assignment, calendar, Xero) continue normally.
Asset ID generated; Slack assignment sent; calendar event created; Xero entry created. Only QR URL field shows failure flag. Coordinator alerted.
E05
Human action timeout: coordinator does not confirm QR label printed within 48 hours
QR URL written to record; 48-hour timer elapses with no 'Label printed' checkbox ticked by coordinator.
Automation sends a Slack reminder to Operations Coordinator asking them to confirm label has been attached.
Slack reminder received exactly once after 48 hours. No repeated spam. Reminder includes asset name and ID.
E06
Slack workspace unavailable during assignment notification
Complete asset record processed; Slack sandbox API returns HTTP 503.
Agent retries Slack notification twice; if both fail, writes 'Slack notification failed: manual assignment required' to record and logs the event.
Two retry attempts in log; record updated with failure flag; no unhandled exception. Process continues to calendar and Xero steps.
E07
Google Calendar API returns invalid scope error (403)
Maintenance Scheduler Agent attempts to create calendar event; API returns 403 insufficient scope.
Agent logs the scope error with detail; sends Slack alert to FullSpec team (support@gofullspec.com) and Operations Manager noting that OAuth re-authorisation is required; no calendar event created.
Detailed 403 error in platform log; Slack alert received at support address and by Operations Manager; no silent failure.
E08
Automation platform outage: workflow does not run at trigger time
Airtable record created during a simulated platform downtime window; platform recovers after 20 minutes.
On recovery, the automation platform processes the queued trigger; all agents run in order; outputs match those expected from a normal run.
Platform execution log shows delayed run with original trigger timestamp. All outputs (ID, QR URL, Slack, Calendar, Xero) present and correct after recovery.