# Scenario A: false handoff (observed 2026-10-24 UTC) Scripts: `ops/e2e/a-scenario.mjs` (+ `lib.mjs`). Chatwoot v4.19.0 at https://chatwoot.railsfanatics.com; bot at https://chatwoot-bot.railsfanatics.com. All JSON is UTC-stamped and sanitized (secrets, run tokens, non-example.com emails redacted; leak scan found nothing). Screenshots contain no credentials. ## A broken: observed (evidence/A/broken/, conversation display id 14, visitor name "A Broken ") After the bot fix (token also bound from `additional_attributes.referer`), the armed run bound to the new conversation. All checks passed (`summary.json`): - Run mode `broken_handoff`, operator page state "fault injected: acknowledgement sent, handoff deliberately skipped" (`03-operator-run.json`, `11-operator-runs.png`). - Public acknowledgement from the AgentBot ("A human at Maple Street Repairs will pick this up shortly.") visible in the widget (`10-widget-ack.png`). - Conversation stays `pending`, assignee_type AgentBot, no team, waiting_since empty, same 20 s later; absent from API lists `status=open` (team and inbox scope), present in the pending list (`04-queue-api.json`, `05-readback-after-20s.json`). - Dashboard (`20-*.png`, `21-*.png`, `22-*.png`): not in the Open tab (all conversations, team scheduling); visible under the Pending filter. Pending is reachable by agents through that filter, only absent from the Open queue. ## Earlier A-broken captures: NOT evidence (kept only as a record) - `broken-attempt-1-arm-not-bound/`: armed run did not bind (pre-chat defect, `docs/findings.md` DEFECT 1, now fixed in the bot). - `broken-run-1` .. `broken-run-6`: runs after the bot fix (conversations 8-13). Each bound correctly and the API/widget/operator checks passed, but the dashboard step failed because of problems in my test script or the lab, not the bot: run 1 used a visitor name shared with the earlier attempt and a case-sensitive text match (ambiguous); run 2 a page-navigation timeout; run 3 the case-sensitive match (Chatwoot capitalises names); runs 4-6 dashboard login failures (HTTP 429 login throttle, then HTTP 409 session limit reached: every script run created an admin session and never signed out). Fixes: unique visitor name per run, case-insensitive match, `domcontentloaded` navigation, sign-out at process end (`lib.mjs`), and `ops/e2e/revoke-sessions.mjs` (revoked 24 stale lab-admin sessions). Conversations 8-13 remain pending and untouched. ## A fixed: observed (evidence/A/fixed/, conversation display id 7, visitor "A Fixed Visitor") All 14 recorded checks passed (`summary.json`): - Run mode `correct_handoff`, run state `handed_off` (operator page, `03-operator-run.json`, `11-operator-runs.png`). - Public acknowledgement from the AgentBot visible in the widget (`10-widget-ack.png`); status `open`, team scheduling (id 1), assignee_type cleared, waiting_since populated (`02-brief.json`, `02-conversation.json`, `02-messages.json`; state trace `01-state-trace.json`). - Present in API lists `status=open&team_id=1&assignee_type=all|unassigned`; absent from the pending list (`04-queue-api.json`). Dashboard: visible in team scheduling Unassigned (Open) and the all-conversations Open lists (`20-*.png`, `21-*.png`). - SCRIPTED agent-user reply posted with the human agent user's API token (not a human response) appeared in the widget (`12-widget-scripted-agent-user-reply.png`, `06-after-scripted-agent-user-reply.json`). ## Not observed - A human response (none was sent; the only agent reply is the labelled scripted agent-user reply in A fixed).