# Full-duplex voice-agent event-sequence checklist

Use this checklist to review what happened during overlap, interruption, playback, and tool activity. A tidy transcript is not enough. The events must agree with what the caller heard and what the business system did.

The examples below are fictional. Replace every timing budget, workflow rule, and fixture with values approved for your product.

## Before the run

- [ ] Give the release candidate an immutable build, prompt, model, voice, and tool version.
- [ ] Use one monotonic session clock for audio, recognition, model, playback, tool, and system events.
- [ ] Assign stable event IDs. Link derived events to the event that caused them.
- [ ] Record the caller audio and the audio actually played to the caller, where your consent and retention policy permits it.
- [ ] Sanitize fixtures. Do not place secrets or live customer data in replay cases.
- [ ] Write the expected final system state before running the case.

## Events to capture

| Event | Minimum fields | What to check |
| --- | --- | --- |
| User voice activity | start, end, confidence, channel | Did speech continue after the agent started? |
| Recognition | partial/final, timestamp, revision ID | Did a correction replace an earlier guess? |
| Agent audio | generation ID, playback start, playback stop | What did the caller actually hear? |
| Interruption | detected at, source event, policy | Was this caller speech, echo, or background noise? |
| Cancellation | requested at, completed at, target IDs | Did obsolete audio and work really stop? |
| Tool request | name, arguments, idempotency key, parent event | Was the intent complete and current? |
| Tool result | status, timestamp, authoritative state | Did spoken status match the result? |
| Handoff or timeout | reason, destination, context version | Did the next owner receive useful context? |

## Scenario cards

### Caller interrupts a long answer

- [ ] Place the interruption before the agent reaches the key fact.
- [ ] Confirm playback stops inside your approved lane budget.
- [ ] Verify unheard words are not treated as delivered disclosure.
- [ ] Check that any work tied to the abandoned answer is cancelled or made safe.

### Caller corrects an entity during playback

- [ ] Preserve both versions of the entity and the correction link.
- [ ] Invalidate stale tool arguments.
- [ ] Read back the corrected value before any irreversible action.
- [ ] Verify the final record contains the corrected value once.

### Backchannel, not confirmation

- [ ] Use a short listening cue while the caller still holds the floor.
- [ ] Confirm the cue does not arm payment, consent, or another protected action.
- [ ] Check that the cue does not leak into the caller transcript.

### Horn, television, or another speaker

- [ ] Add a non-caller sound while agent audio is playing.
- [ ] Confirm there is no false barge-in or false approval.
- [ ] Review the mixed audio, not only VAD labels.

### Tool returns after the caller changes intent

- [ ] Delay the tool result until after a correction or cancellation.
- [ ] Confirm the late result cannot overwrite the newer state.
- [ ] The agent must not announce the stale result as current.

### Playback stops but generation continues

- [ ] Separate playback cancellation from model-generation cancellation.
- [ ] Confirm unused output cannot trigger a downstream action.
- [ ] Track the abandoned generation ID through the trace.

### Failed transfer

- [ ] Simulate busy, no-answer, rejected, and media-failure outcomes.
- [ ] Return to the caller with an accurate explanation.
- [ ] Preserve the verified context for the next route or callback.

## Release record

```text
Workflow and lane:
Build / prompt / model / voice / tool versions:
Phone and network conditions:
Session clock source:
Cases and repeat count:
Playback-stop p50 / p95 / p99:
Late or stale tool results:
Spoken-status mismatches:
Incorrect final states:
Open exception, owner, and expiry:
Release decision:
Approver and date:
Rollback trigger and owner:
```

Block the release when a hard-policy rule, authorization rule, or verified final-state rule fails. Do not let a fast average hide a stale action.
