| Tab navigation |
| nav-open | open witr screen, tab strip paints | green |
| nav-1234 | keys 1/2/3/4 switch tabs | green |
| nav-each-paints | each of 4 tabs renders its body | green |
| Target entry |
| tgt-enter | t -> type -> Enter commits target | green |
| tgt-backspace | Backspace deletes a char | green |
| tgt-cancel | Backspace on empty buffer cancels | green |
| Refresh |
| refresh-r | r on Ready re-execs witr + repaints | green |
| refresh-coalesce | concurrent r presses coalesce via ScanGate | green |
| Detail overlay |
| detail-open | / opens detail overlay | green |
| detail-close | q closes detail overlay | green |
| Empty states |
| empty-missing | missing-witr empty state + install commands | green |
| empty-redetect | r re-detect transitions Missing -> Ready | green |
| empty-outdated | outdated-witr upgrade hint | green |
| Capability gate |
| cap-denied | capability denial is a host-runtime concern (spawn_subprocess is audit-only in v1; event_bus publish is fire-and-forget) — covered by runtime/CTS tests, not witr-specific | n/a |
| CLI + slash + event |
| cli-text | ainb witr <pid> text output | green |
| cli-json | ainb witr --format json <pid> | green |
| slash-witr | /witr <target> slash command | green |
| event-snapshot | witr.snapshot published on fresh scan | green |
| Edge cases |
| edge-timeout | witr exec timeout -> stale banner | green |
| edge-nonzero | witr non-zero exit -> error in tab | green |
| edge-malformed | malformed JSON -> parse-error state | green |
| edge-tiny | tiny viewport no panic | green |
| Integration |
| rpc-lifecycle | JSON-RPC init->render->cli_dispatch->shutdown | green |
| real-witr-smoke | real witr scans self-pid -> shell->ainb ancestry | green |