Complete sample deliverable · synthetic data only

Booking workflow reliability QA

This is the level and structure delivered for the fixed USD 10 trial. The example is synthetic: no client workflow, credentials, recordings, or customer data were used.

Decision: HOLD before client handoff. The happy path works, but a retry after a slow calendar response can create two appointments for one caller. Fix the idempotency boundary, then rerun the three acceptance tests below.

1. Intended state contract

1 · Call intent
2 · Normalize request
3 · Check availability
4 · Reserve slot
5 · Confirm booking
6 · Log + notify
BoundaryRequired inputSuccess evidenceStable key
Voice → workflowservice, requested time, contact channelvalidated request envelopeconversation_id
Workflow → calendarnormalized UTC interval, service durationone provider event IDbooking_request_id
Calendar → confirmationevent ID plus committed statusone customer confirmationevent_id
Confirmation → CRM/logevent ID, caller reference, audit timestampsrecord points to the same eventevent_id

2. Failure-path audit

PriorityFailureCurrent riskRequired behavior
P0Calendar call times out after the provider created the event.Workflow retries and creates a duplicate.Reuse one idempotency key; reconcile by key before creating again.
P1Two callers request the final slot concurrently.Both availability checks can return free.Make reservation atomic or recheck during the write transaction.
P1Event created but CRM write fails.Caller is booked, team dashboard says unbooked.Persist the event ID in an outbox and replay the CRM update safely.
P2Email/phone is missing or malformed.Booking may succeed without a usable confirmation route.Return a structured clarification request before reserving.
P2Cancellation arrives while confirmation is queued.Customer can receive a stale “confirmed” message.Read the latest booking state immediately before notification.

3. Synthetic acceptance tests

TestStimulusExpected evidenceSample result
Retry idempotencySend the same request twice; first provider response is delayed.One calendar event, one CRM record, one confirmation.FAIL — two event IDs observed
Concurrent slot claimSubmit two different callers for one remaining slot.One confirmed; one receives alternate-slot response.PASS
Partial-write recoveryForce CRM write to fail after calendar success.Calendar event retained; queued replay links CRM to same event.PASS

4. Highest-priority fix

Generate booking_request_id = SHA256(conversation_id + normalized_slot + service) before any external write. Store it with status pending, pass it through the calendar metadata, and on every retry query by that key before creating an event. Promote the record to committed only after receiving one provider event ID. Confirmation and CRM steps must consume the committed record, not the original webhook payload.

5. Re-test gate

A paid review is tailored to one supplied redacted journey. Findings are evidence-based and limited to the provided flow; no claim is made about systems that were not inspected.

Return to the fixed USD 10 audit