Skip to content

Android: Play release tooling, store listing, 1.0, editor fixes - #53

Merged
roznet merged 5 commits into
mainfrom
android-play-release
Oct 19, 2026
Merged

roznet merged 5 commits into
mainfrom
android-play-release

Conversation

@roznet

@roznet roznet commented Oct 17, 2026

Copy link
Copy Markdown
Owner

Summary

Play release tooling

  • scripts/play.py drives the Google Play Developer API, the way asc.py drives App Store Connect. Commands: status, upload (bundle to a track, with release notes), promote, rollout (staged / complete / halt), listing (text and images) and testers (Google Group).
  • Every write is a Play edit. --dry-run makes the changes, has Google validate them, then discards the edit. Writing to production needs --yes-production.
  • Credentials come from ~/.googleplaystore/private_keys/play-service-account.json, alongside the upload key.
  • The /release-android skill wraps it like /archive: pre-flight checks, version bump, signed bundle with a certificate check, the android/{versionName} tag, release notes (Play's 500-character limit), then upload to internal testing.
  • The store listing lives in app/android/play/listing/default/: title, descriptions, icon, feature graphic, 6 phone and 2 tablet screenshots. All data in the screenshots is made up.
  • Version 1.0 (code 1), with release-notes/android-1.0.txt. google-auth is added to the [release] extra.

Android fixes found while taking the screenshots

  • Edit Person opened with Save enabled, and Back left without asking. Save now enables only after a change, and Back with changes asks Save or Discard, as the flight editor does.
  • Crew and passengers with one document showed no document line on a flight. They now show it as a plain label; the picker menu stays for two or more documents.
  • Arrival time zone: before the destination is known, arrival showed UTC (12:00Z) next to a local departure time. It now uses departure's zone until the destination's arrives, unless the pilot has picked a zone by hand.
  • New Flight's route row showed a second "Route" label under the "Route" heading. It now shows the route itself.

iOS behaves the same way for the single-document row and the arrival zone (FlightEditView.personLabel, FlightDateTimeField.preferredZoneId). It's left unchanged here and could follow if wanted. New Flight's Aircraft section has the same heading-plus-label duplication as Route had; it's left as is.

Test plan

  • ./gradlew :core-logic:test :app:testDebugUnitTest and :app:assembleDebug pass.
  • On the emulator, release build:
    • Edit Person: Save is grey when untouched and enabled after an edit. Back asks Save or Discard, and Discard drops the edit.
    • Passengers show their single passport.
    • New Flight with only a departure shows both times in London time, and the route row reads EGLK → ----.
  • play.py was run against a fake API: edits, commit, dry-run discard, production guard, rollout completion, listing images.
  • Not yet run against the real Play API; that needs the service-account key.
  • bundleRelease is signed with the upload key (SHA-256 64:6A:71:40:…:8A:9F).

🤖 Generated with Claude Code

roznet and others added 2 commits October 17, 2026 11:10
scripts/play.py drives the Play Developer API the way asc.py drives App
Store Connect: upload to a track with release notes, promote, staged
rollout, store listing text and images, testers. Every write is a Play
edit; --dry-run has Google validate it and discards it, and production
needs --yes-production. /release-android wraps it like /archive.

Store listing in app/android/play/listing/default (text from listing.md,
icon, feature graphic, phone and tablet screenshots with fictional data).
Version 1.0 (code 1) and its release notes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Edit Person opened with Save enabled and Back left without asking.
  Save is now enabled only after a change, and Back with changes asks
  Save / Discard, as the flight editor does.
- A crew member or passenger with a single document showed no document
  line on the flight; it now shows as a plain label (the menu stays for
  two or more).
- Before the destination is known, arrival used UTC beside a local
  departure time; it now follows departure's zone until the
  destination's arrives. New Flight's route row shows the route rather
  than repeating the "Route" heading.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Oct 17, 2026

Copy link
Copy Markdown

Code Review

Reviewed the Play release tooling (scripts/play.py, /release-android skill, listing assets) and the four Android fixes (person editor dirty tracking, single-document row, arrival zone, route row). No privacy-invariant, CloudKit, form-mapping or snapshot concerns; the new strings are in EN/FR/DE/ES.

Important

  • scripts/play.py:885 — promote (and upload) to production without --rollout goes out as completed, i.e. 100% of users. The skill says production should always be a staged rollout. Consider requiring --rollout (or an explicit --full) when the target is production, even with --yes-production.
  • app/android/app/src/main/kotlin/aero/flyfun/forms/ui/people/PeopleScreens.kt:269 — opened is re-captured by remember(existing) from the current field state. If existing changes while the user has unsaved typed edits (the comment mentions a document/scan save), those edits become the new baseline: Save greys out and Back leaves without asking. Worth confirming the document/scan save also persists the typed fields; if not, this silently loses the dirty state.

Minor

  • scripts/play.py:856 — in --dry-run, upload skips the bundle and never sets the track, so :validate runs on an edit with no changes. It validates little beyond credentials and release notes, which is weaker than the PR description suggests.

1.0 (1) uploaded to internal testing with play.py; drop the claim that
the first upload has to be done in the Console.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Oct 17, 2026

Copy link
Copy Markdown

Code Review

Reviewed scripts/play.py (Play API release tooling), the Android person-editor discard flow, the one-document row, the arrival-zone fallback, the route-row fix, and the new EN/FR/DE/ES strings. Nothing needs fixing before merge.

  • The production guard, edit rollback, dry-run validate and discard, and release-notes and listing limits behave as documented.
  • No PII is logged or persisted, and credentials stay outside the repo.
  • The new strings have FR, DE and ES entries.

Minor

  • app/android/app/src/main/kotlin/aero/flyfun/forms/ui/people/PeopleScreens.kt:326 — opened is re-snapshotted whenever existing changes. If saving a document or scan changes the stored row while there are unsaved field edits, those edits become the new baseline and the discard prompt will not appear. Confirm that path persists the in-progress fields too.
  • designs/future/android-play-release.md — the new design doc is not listed in designs/INDEX.md.

roznet and others added 2 commits October 19, 2026 21:52
Review on #53: promoting or uploading to production without --rollout
went out to 100%. Require --rollout <fraction> or an explicit --full.
Dry-run docs now say what an upload dry run checks.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@roznet
roznet merged commit 4a140ab into main Oct 19, 2026
2 checks passed
@roznet
roznet deleted the android-play-release branch October 19, 2026 20:53
@claude

claude Bot commented Oct 19, 2026

Copy link
Copy Markdown

Code Review

Reviewed scripts/play.py, the /release-android skill, the Android editor fixes (Edit Person unsaved-changes guard, single-document label, arrival zone fallback, route row) and the new FR/DE/ES strings. No privacy impact: the PR adds no server-side data handling, and the listing text matches PRIVACY.md. The Compose state is keyed consistently on existing, so opened and the fields reset together. The production guard and the edit rollback on error look correct. No issues found.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant