tatmapper-app

Stabilization evidence — 2026-07-21

Scope and revisions

Reproduced pre-fix failures

GitHub Actions run 29807165757 reproduced both release blockers:

  1. :app:minifyReleaseWithR8 failed because Flutter Play deferred-component classes referenced unavailable com.google.android.play.core.* classes. The app does not configure deferred components. The classes were retained by blanket -keep class io.flutter.** and io.flutter.plugins.** rules.
  2. config_ads_integration_test.dart timed out after 30 seconds while invoking the complete asynchronous production main() path under a widget-test binding.

The repository also contained .github/workflows/web-preview.yml and scripts/deploy_web.sh even though AGENTS.md and RELEASE.md define the project as Android/iOS-only.

Toolchain observed

The Windows Dart 3.12.2 AOT snapshot rejected itself in both the Flutter engine artifact and the official Dart SDK archive. Flutter analysis/tests therefore ran with the same pinned SDK in Ubuntu WSL. This is a local host-tool issue, not a repository failure.

Local verification after fixes

Command Result
flutter pub get PASS; lockfile reconciled for pinned SDK
focused config/app-shell test PASS; 8 passed, 0 failed
flutter analyze --fatal-warnings PASS; no issues (161.2 s)
flutter test PASS; 140 passed, 6 skipped, 0 failed
yamllint .github/workflows PASS
git diff --check PASS

The six skipped cases are pre-existing explicit manual probes/golden or native integration cases. They are not counted as executed evidence.

Hosted verification after fixes

Device evidence

The Medium_Phone_API_36.0 AVD booted as sdk_gphone64_x86_64 on API 36. Bundletool 1.18.3 validated the hosted AAB. A local test keystore was used only to derive installable APKs from the unsigned AAB; it is outside the repository and is not a production credential. A clean install succeeded, com.tatmapper.app/.MainActivity reached the resumed state, and the app process remained alive without a TatMapper fatal exception or ANR.

Observed device limitations remain product work rather than stabilization success criteria: first render took roughly 24 seconds while billing and ads initialized, the home screen has unusably low dark-theme contrast, and the emulator’s Pixel Launcher produced an unrelated system ANR overlay. The planar beta branch must remove monetization startup and replace this screen before its screenshots can be used publicly.

Hosted AAB inspection

Bundletool 1.18.3 validated the unsigned hosted artifact from run 29830589100. Manifest and archive inspection reported:

The merged manifest also proves the stabilization binary still contains ad, billing, Sentry, audio, and legacy-storage contributions from its plugin graph. That is not treated as acceptable free-beta privacy evidence. The stacked planar branch must remove the monetization SDKs and unjustified merged permissions, then repeat this artifact inspection before any store upload.

Evidence boundaries