Quality Gates
Run the smallest check set that proves the claim you are making.
Always Required
dart format lib test
flutter analyze
flutter test
These gates prove static quality and local unit/widget behavior. They do not prove native plugins, release builds, store readiness, or performance.
Target Smoke Gates
| Target | Minimum smoke |
|---|---|
| Android | flutter run -d <android-device> plus release APK/AAB build before release |
| iOS | Run on simulator/device from macOS/Xcode path; archive before release |
| Web | flutter build web, serve build/web with a static server, smoke in target browsers |
| Windows | Build/package on Windows, validate MSIX/AppX path if store-bound |
| macOS | Build/archive on macOS with signing path understood |
| Linux | Build and package through the chosen distribution route, often Snap for official docs |
Release Gates
| Area | Evidence |
|---|---|
| Build mode | Profile-mode measurement for performance, release-mode artifact for deployment |
| Platform APIs | Permission denied/granted paths and plugin failure paths tested |
| Local data | Migration, export, restore, and wipe behavior tested |
| Accessibility | Screen reader smoke, labels, tap targets, contrast, scaling |
| Performance | Real device or representative hardware, not only emulator/debug |
| Store | App ID, version, signing, icons, privacy/data declarations, screenshots |
Agent Done Statement
When an AI agent claims done, it should include:
Validated: flutter analyze, flutter test
Smoke target: Android emulator Pixel_7 API_35
Not validated: iOS release, web build, desktop packages
Known blockers: Apple signing unavailable on this machine
Gotcha: “All tests pass” usually means
flutter testonly. Ask which target, which build mode, and which artifact.