Skip to content

release: add read-only Play status fallback [skip mobile-release] - #294

Closed
0xSero wants to merge 1 commit into
mainfrom
codex/v201-play-status-fallback
Closed

release: add read-only Play status fallback [skip mobile-release]#294
0xSero wants to merge 1 commit into
mainfrom
codex/v201-play-status-fallback

Conversation

@0xSero

@0xSero 0xSero commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Summary

Read-only fallback for the Google Play store-status read, so the play-status
job can still report track/versionCode state when the service account holds
read access but not edit access.

  • Authoritative edit reader preserved. Edits.insertEdits.tracks.list
    Edits.delete (delete in finally) remains the primary path.
  • Direct GET fallback only on edits.insert 403 PERMISSION_DENIED. Falls back
    to applications.tracks.releases.list, probing production, beta, qa,
    alpha, and the legacy internal alias; per-track 404 (not-found) is recorded
    separately from 200-empty; the canonical track field is recorded as the
    resolved name.
  • The fallback cannot prove staged rollout or userFraction (the direct method
    excludes obsolete releases, caps at 20 per track, and exposes no rollout
    fraction) — and it does not bypass a missing Play Console grant: it only
    succeeds when the service account has read permission on the app. If access is
    missing entirely, the read also 403s.

Self-test transcript

$ python3 tools/scripts/list-play-tracks.py --self-test
self-test: OK (edit path, 403 direct fallback, non-403 no-fallback, 404 vs empty, raw-state, mapping, source, null fraction, resolved names)

Deterministic in-process mock covers: edit happy path (POST→GET→DELETE order),
403 fallback, non-403 no-fallback, per-track 404 vs empty, raw
releaseLifecycleState preservation, DRAFT→draft/PUBLISHED→completed mapping,
source marker (edit/direct-get), null userFraction in direct path, and
resolved track names.

Verification

  • python3 -m py_compile tools/scripts/list-play-tracks.py — OK
  • git diff --name-only HEAD~1 HEAD — exactly one file: tools/scripts/list-play-tracks.py
  • git status --porcelain — clean

Approval

  • Fable exact-diff approval marker: FABLE_APPROVE_PLAY_REPAIR_PUSH_PR_HEAD_F675FB24

Commits / scope

  • Base: 193944cb0a98256ca598d53f5243024a7818edb9 (origin/main)
  • Head: f675fb2441071229483e319aa56d50648d0a4eb1
  • Patch-id: 95785c21c9cb502d3f8bed97397d27920b084c9d
  • Scope: one file, tools/scripts/list-play-tracks.py (+304/−94); no workflow/docs/secrets/permissions changes.

Do not merge.

@0xSero

0xSero commented Aug 14, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #295 (v2.0.1 mega convergence). Equivalent mega commit: 12a7cbb1 — release: add read-only Play status fallback [skip mobile-release] (patch-id 95785c21, blob-verified). Closing; not merging.

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