Release notes

VoxGuard 4.8.18

Android internal testing release for post-4.8.17 reliability, data-consistency, map-cache, admin-access, migration-guard, and release tooling fixes.

Release date: June 27, 2026
Runtime version: 4.8.18+26062701
Prepared on branch: codex/android-release-4-8-18-2026-06-27

Release focus

VoxGuard 4.8.18 packages the current master line after 4.8.17 for Google Play Internal testing. The release includes reliability, data-consistency, map-cache, admin-access, migration-guard, coverage-gate, and cleanup fixes merged after the 4.8.17 release preparation.

iOS upload is intentionally not included in this release window because App Store Connect requires the release owner to accept updated Apple terms first.

User-visible changes

  • Admin state is refreshed more defensively on auth changes and sign-out, so stale admin grants do not leak between sessions.
  • Map marker handling and tile cache behavior are more stable under repeated map updates.
  • Presence, unread badge, group-switch, offline-location, and PTT cooldown reliability fixes from the post-4.8.17 reliability cleanup batch are included.

Technical changes

  • AdminAccess.refresh() is auth-gated and rechecked on auth changes.
  • Read receipts now persist through the add_read_receipt RPC.
  • Client-side reaction_count writes were removed; the database trigger owns the counter.
  • Operational-event providers were moved to autoDispose, and old-group conversations are invalidated on group switch.
  • Reliability cleanups covered offline location data-loss, presence reactivity, bulk-RPC guardrails, PTT cooldown timer behavior, and unread-badge reset.
  • Migration-drift guard was replaced with a testable version and self-test, with a follow-up crash fix for empty or malformed migration tables.
  • Tile cache disk and memory accounting fixes were added.
  • Coverage regression gate was tightened to the current CI baseline.
  • Dead PTT helpers, misleading comments, and stale docs were cleaned up.
  • Android-only store-upload artifact preflight now supports VOXGUARD_STORE_UPLOAD_PLATFORM=android, so Android can be released while iOS upload is blocked by external App Store Connect terms.

Test and build evidence

  • flutter analyze: PASS, no issues found.
  • flutter test: PASS, 2344 passing / 0 failing / 25 skipped.
  • Simulator E2E health check: PASS.
  • Quick simulator smoke, first full run: 6/7 PASS. The final two_user_cross_group_isolation scenario hit a Maestro selector flake where the send button was visible in the failure screenshot but not matched by the accessibility selector.
  • Immediate isolated rerun of two_user_cross_group_isolation: PASS. The rerun verified that the receiver did not see the cross-group message in the UI and that Supabase visibility returned zero receiver-visible rows.
  • Android store-upload artifact, environment, and Fastlane preflights: PASS.

Android artifact

  • The Android artifact was built with ENVIRONMENT=production.
  • Android App Bundle: app-release.aab
  • AAB size: 111775295 bytes
  • Android SHA-256: 47b542e832caa3db2484be2c8325dc300019fed84d4fb7a90cb84a950fa8595b
  • Production build metadata was reviewed before upload.

Internal store upload

  • Google Play Internal testing: PASS. AAB uploaded to the internal track with release status completed.
  • Read-only Fastlane verification confirmed versionCode 26062701 on the internal track.
  • Store-upload evidence was recorded and reviewed.
  • iOS TestFlight: intentionally skipped. App Store Connect terms must be accepted by the release owner before the next iOS upload.

Known limits

  • The Android upload uses Google Play Internal testing only. Wider rollout, open testing, or production release remains a separate release-owner decision.
  • The quick smoke result includes one documented Maestro flake followed by a passing rerun of the exact failed scenario.