qa-featurelisted
Install: claude install-skill NarekManukyan/flutter-mobx-kit
# QA gate
Governed by [ADR-0015](../../../docs/adr/0015-mandatory-test-coverage-and-qa-gate.md). This is the exit criterion of the delivery loop ([ADR-0016](../../../docs/adr/0016-plan-first-delivery-workflow.md)). A feature that has not passed this gate is not done, regardless of how complete the diff looks.
## Step 1 — AC traceability
Take the AC checklist from the plan. Every line gets a row, and every row names a **specific file** that proves it.
| AC | Proof | Status |
|---|---|---|
| AC1 tapping + opens the modal | `.maestro/flows/home/home_add_todo_happy.yaml` | ✅ passing |
| AC2 non-empty title creates the todo | `home_store_test.dart` + happy flow | ✅ passing |
| AC3 empty title shows inline error | `add_todo_modal_state_test.dart` | ✅ passing |
| AC4 5xx keeps modal open with retry | `home_add_todo_failure.yaml` | ❌ missing |
"Manually verified" is not a proof. An AC with no automated proof is an open item; list it and say so plainly rather than marking the gate passed.
## Step 2 — the three categories
### Happy
- [ ] The primary journey completes end to end on a device.
- [ ] The success state is visibly distinct — the user can tell it worked.
- [ ] Data persists across a kill-and-relaunch where the AC implies it should.
### Failure
- [ ] **Server 5xx** → recoverable error surface, spinner stopped, retry actually re-runs the request.
- [ ] **Server 4xx** (validation, conflict) → the specific message, not the generic one.
- [ ] **Expired / missing auth** →