# Capability Verification
This directory holds the **user-level capability verification** artifacts for agent-deck:
the checklist that tracks whether each capability in the
[v2 Capability Spec](../../) (229 stable `CAP--NNN` IDs) has been verified
**as a user would experience it** — by driving the real binary on each surface it
supports and capturing visual evidence — not merely by unit tests.
## Files
- **`CAPABILITY-CHECKLIST.md`** — human-readable matrix: capability × surface, with
status (`verified` / `broken` / `partial` / `untestable-locally` / `deferred` /
`pending`), the date it was user-verified, and a link to the evidence.
- **`CAPABILITY-CHECKLIST.json`** — the same matrix, machine-trackable, so the next
verification run can resume exactly where the last left off.
## Verification philosophy
A passing `go test` proves a *function* works. It does not prove the *product* works
for a user. This checklist owns the second claim. A row is only marked `verified` when
the binary was actually **driven** — real CLI commands, real TUI keystrokes, real web
clicks — and the resulting behavior was **visually evidenced**:
| Surface | How it's driven as a user | Evidence form |
|---|---|---|
| **CLI** | real subcommand in a sandbox; assert output shape, `--json` keys, exit codes, persistence side-effects | command transcript (`.txt`) |
| **TUI** | the real binary run in a tmux pane, driven with `send-keys`, captured with `capture-pane` | terminal snapshot (`.txt`) |
| **WEB** | headless `agent-deck web --no-tui` (or the in-memory fixture) driven via browser + REST | screenshot (`.png`) + REST JSON |
| **daemon / remote / LLM** | no safe local user path → `untestable-locally` with a stated reason | — |
## Safety
Every verification run executes in a **fully sandboxed environment** — throwaway
`HOME`, sandboxed `XDG_*`, and an isolated `tmux -L ` server inside a sandboxed
`TMUX_TMPDIR` — so it can never touch a real `~/.agent-deck`, the real `$HOME`, or the
user's tmux server. Sessions under test use a `bash` stub tool; no real LLM is ever
invoked. The repeatable method (bootstrap script + per-surface recipes + orchestration)
is packaged as the `capability-verification` skill.
## Re-running
Regenerate the skeleton from the spec and fold in new wave results with the skill's
scripts (`gen_checklist.py`, `merge_results.py`). The checklist is append-and-update:
`pending` / `deferred` rows are what the next run picks up.