Quality Gates

These gates are evidence, not ceremony. Mobile bugs often appear only after native build, install, permission, or store steps.

Required Gates

GateRequired evidence
Dependency compatibilitynpx expo install --check or documented equivalent review
Type and lintProject-specific TypeScript/lint commands pass, or missing commands are documented
Unit and screen testsJest tests pass for changed API hooks, stores, screens, and route behavior
Router smokeNew/changed route opens, params resolve, links are typed when enabled, not-found path behaves
Native rebuildNative-boundary changes have a development/preview rebuild or a clear blocker
Android installAPK/dev build installed on emulator or device for user-visible native changes
iOS installSimulator, device, or TestFlight path checked for iOS-facing changes
Release artifactAndroid AAB or iOS IPA build attempted before release claims
OTA safetyRuntime version, branch/channel target, rollout percentage, and rollback path documented
PermissionsAndroid and iOS permission prompts, denied paths, config strings, and store rationale checked
SecretsNo EAS token, service account key, Apple credential, keystore, provisioning profile, or API secret committed

Definition Of Done Note

Every Expo implementation handoff should include:

Expo SDK: <version>
Native changes: <none/list>
Commands run: <commands and results>
Tests: <commands and results>
Development build: <installed/not needed/blocker>
Android release: <AAB/APK status or blocker>
iOS release: <IPA/TestFlight/simulator status or blocker>
OTA: <not applicable/runtime/branch/channel/rollback>
Permissions: <grant/deny/store-policy status>
Known gaps: <what was not tested>

Release Minimums

StageMinimum proof
PrototypeApp starts, one main route works, no unexplained dependency warnings
Development buildDev client installed and JavaScript reloads against Metro
Preview/internalSigned installable build works on at least one Android and one iOS path when both platforms matter
Store releaseProduction Android AAB and iOS IPA/TestFlight path built; store metadata and privacy blockers listed
OTA releasePreview branch smoke passes on a compatible binary; production update has rollback plan

What Does Not Count

  • Expo Go only, when the change touches native code, config, permissions, or release behavior.
  • A passing Jest run as proof of store readiness.
  • A screenshot without command output or build identifier.
  • An OTA update that changes behavior requiring new native permissions.
  • A release claim without package name, bundle identifier, version, build number, runtime version, and target track/channel.

Warning: If an AI agent cannot run iOS locally from Linux, it must say so. EAS can build iOS remotely, but that is not the same as local simulator verification.