# MVP Acceptance Checklist ## API - [x] `GET /v1/health` returns version/build/uptime and active sprite pack. - [x] `GET /v1/state` requires bearer token. - [x] `POST /v1/command` requires bearer token and returns `202` for valid command. - [x] `POST /v1/commands` accepts batch in-order. - [x] malformed JSON returns `400`, server remains alive. ## Command Pipeline - [x] duplicate command IDs are ignored within dedupe window. - [x] `SetState` updates state and default animation mapping. - [x] transient state with `ttl_ms` returns to durable state. - [x] `SetTransform` persists x/y/scale. - [x] `SetFlags` persists click-through/always-on-top/visible. ## Config - [x] first run bootstraps `config.toml`. - [x] `auth_token` generated and reused across restarts. ## Sprite - [x] selected sprite pack loads when present. - [x] missing selected pack falls back to `default`. - [x] runtime `SetSpritePack` successfully switches pack without restart. - [x] failed runtime `SetSpritePack` keeps current visuals and reports error in state snapshot. ## Platform - [x] capability flags are exposed in `/v1/health`. - [x] non-supported platform operations do not crash the process. ## Evidence - `cargo test --workspace` passes. - API auth coverage exists in `crates/sprimo-api/src/lib.rs` tests. - Config bootstrap and roundtrip coverage exists in `crates/sprimo-config/src/lib.rs` tests. - Sprite fallback coverage exists in `crates/sprimo-sprite/src/lib.rs` tests.