# UJ-107 Verify audit trail for staff actions

Audience: AI coding agents first.

- Actor + entry point: Authorized auditor; new dashboard `/audit`.
- Priority: MUST-HAVE.
- Preconditions: Execute UJ-104, UJ-105, and UJ-106 via UI; never create audit rows directly.
- Test layer: L3.

## Steps

1. Open `/audit` → rows render for refund, credit grant, and suspension.
2. Filter by actor/account/action → each row shows staff identity, target account, action, timestamp, result, and correlation/idempotency identifier.
3. Open row → before/after or immutable action payload renders without secrets.
4. Reload → entries persist and ordering remains deterministic.

## Failure branches

- Auth failure/unauthorized role → `401/403`; no audit metadata disclosed.
- Rate limit `429` → visible retry state.
- Failed staff action → audit row records failed result without claiming mutation.

## Backend touchpoints

Locked-v1 audit list/detail endpoints (routes UNKNOWN; INDEX uncertainty); all staff mutation endpoints.

