# Done-Test Checks: Bots and Conversational Interfaces

**Check library, version 1.** Rows to lift into the [done-test template](https://mangrove.co.uk/templates/done-test-template.md). Take what applies, delete the rest, and put a number in every threshold.

For anything model-driven, pair this with the [AI agent library](https://mangrove.co.uk/templates/checks/ai-agent-checks.md), which carries accuracy, reproducibility and cost.

## Platform

A bot lives inside somebody else's product, and that product sets rules you do not control. Most bot acceptance disputes are really platform disputes.

| ID | Check | Evidence | Pass |
|---|---|---|---|
| T1 | Installs into [named workspace/tenant] following the written instructions, performed by the client | Live install by client | |
| T2 | Requests only the permission scopes listed in the spec, and the consent screen is shown and approved | Live install screen | |
| T3 | Behaves correctly against platform rate limits: backs off, queues, and never drops a user message silently | Live under throttling | |
| T4 | Works in every context the spec names: [direct message, channel, thread, group], including where it must stay silent | Live in each | |

## Conversation

| ID | Check | Evidence | Pass |
|---|---|---|---|
| K1 | Completes the [named] journey end to end, in one conversation | Live | |
| K2 | Conversation state survives a service restart mid-journey; the user is not sent back to the beginning | Live, restarted mid-flow | |
| K3 | A user can abandon, correct or restart at any point, using [named commands or affordances] | Live | |
| K4 | Unrecognised input produces a useful reply and a route forward, never silence and never a loop | Live with three unrecognised inputs | |
| K5 | Handover to a human works, carries the conversation context, and tells the user it has happened | Live | |

**On K2.** Bots are restarted constantly, by deploys and by the platform. A conversation model that only works in a single uninterrupted process will fail in its first week and pass every demo.

## Boundaries

| ID | Check | Evidence | Pass |
|---|---|---|---|
| G1 | The bot only acts on behalf of a user entitled to that action; identity is verified rather than assumed from the channel | Live with two accounts | |
| G2 | Actions with irreversible effect require explicit confirmation in the conversation | Live | |
| G3 | The bot does not repeat personal or confidential data into a shared channel | Live attempt, shown refused | |
| G4 | Every action taken is logged with the requesting user, the action, and the result | Live query | |
