Unit-test deterministic code, then add datasets for semantic behavior. Cover model availability, offline state, cancellation, malformed output, device performance, and accessibility.
Record prompt and model identity with results. Compare quality, latency, memory, and energy—not quality alone. Re-run evaluations after OS or model updates, and turn TestFlight failures into permanent regression cases.