verify-ui-actionslisted
Install: claude install-skill idankars/super-design
# Verify UI actions actually work
## The trap this prevents
**"Renders" is not "works."** An HTTP 200, a passing build, green unit tests, an accessibility snapshot, and even a screenshot all prove the page *loaded*. None of them prove a button *does anything*. A `<button>` with no `onClick` renders pixel-perfect and is completely dead.
Canonical failure: a review workspace shipped a **Reject** button — plus Advance / Schedule / Message — as `<button type="button">` with **no handler at all**. Clicking did nothing. It passed ESLint, `tsc`, the unit suite, and a 200 smoke-check, because the *page* was fine. A change that added an "Archive" tab + counts was even built on top of reject "working" and declared done — verified by fetching route HTML (200) and never once clicking the button. The user's report: *"the user rejected someone and nothing happened."*
The lesson: **if a turn's deliverable is a user action, the verification must exercise that action and assert the resulting state change.** If you literally cannot, you must say so out loud instead of implying it works.
## Do this — every time you touch an interactive control
### 1. Static check: no dead controls
Run the scanner (it flags `<button>`s with an action label but no `onClick` / `type="submit"` / forwarded handler):
```
node scripts/find-dead-controls.mjs src --strict
```
If the repo has no `scripts/find-dead-controls.mjs`, use the copy bundled with this skill:
```
node ~/.claude/skills/verify-ui-actions/sc