Quality Gates
These gates are the evidence checklist for AI-assisted Android work. Passing them matters more than a polished explanation.
Required Gates
| Gate | Required Evidence |
|---|---|
| Build | assembleDebug passes and release artifact task is attempted |
| Unit tests | ViewModel, repository, parser, and policy logic tests pass |
| Compose UI | At least one screen-level UI test or documented physical-device smoke path |
| Room | Schema export is enabled and migration tests cover version bumps |
| WorkManager | Worker unit/integration test and one enqueue observation path |
| Permissions | Granted, denied, and permanent denial states are tested |
| Play policy | Restricted permissions have a policy source, declaration plan, and fallback |
| Budget device | Smoke test on 2-4GB RAM physical device or constrained emulator |
| Release | Signed or signable AAB/APK built; debug testOnly install is not accepted as release evidence |
| Secrets | No keystore, key password, upload key, API secret, or Play credential is committed |
Definition Of Done Note
Every Android implementation handoff should include:
Build: <command and result>
Tests: <commands and result>
Release artifact: <path or blocker>
Device smoke: <device, Android version, result>
Permissions: <grant/deny/permanent-deny result>
Policy: <restricted permissions and declaration status>
Known gaps: <what was not tested>
Budget-Device Minimum
For the first app in this stack, test at least:
| Scenario | Why |
|---|---|
| Cold start after force stop | Startup and database initialization issues |
| Scroll a long list | Compose list keys, recomposition, memory pressure, jank |
| Low or no network | Offline-first correctness and fallback copy |
| Low storage | Room writes, exports, and backup failure handling |
| Battery saver | WorkManager and background expectations |
| Permission denial | Privacy trust and Play review behavior |
What Does Not Count
- A screenshot with no command output.
- A debug run from Android Studio as release proof.
- A unit test that mocks away the code path being changed.
- A policy claim without the current Play policy URL.
- A Room version bump without migration proof.
- A WorkManager job that was enqueued but never observed.