Split the sequential deploy-playstore job into two parallel jobs:
- deploy-playstore: publishes AAB to Play Store only
- deploy-apk: builds and deploys APK to server (new, runs in parallel)
Both jobs share the same Dagger remote engine cache for the Android
toolchain and pub-get layers, so the second job hits cache and the
overall wall-clock time drops from T_publish + T_deploy_apk to
max(T_publish, T_deploy_apk).
Also reduce fetch-depth from 50 to 1 across all jobs — CI never needs
git history (changelog generation is a local task, not a CI step).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Issue #166 exposed that the retry budget in _resolveDatabasePath() was too
small for slow Android devices, but no unit test exercised that code path.
Expose two testing helpers (resolveDatabasePathForTesting /
resetDatabasePathForTesting) and add two new tests using fake_async:
- verifies the retry loop eventually succeeds after transient failures
(a _SucceedAfterNPathProvider that fails N times then returns a path)
- verifies the function throws PlatformException with the right message
after exhausting all retries
Both tests advance fake time instead of waiting real-world milliseconds,
so they run in < 1 ms each.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>