Skip to content

Commit 644a909

Browse files
docs(ahbg): restore complete Play release blockers
1 parent d186fb9 commit 644a909

1 file changed

Lines changed: 64 additions & 27 deletions

File tree

ahbg/submission/GOOGLE_PLAY_RUNBOOK.md

Lines changed: 64 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ default), and a signed AAB.
1010
- RevenueCat `purchases:10.19.1` only (no Galaxy module); ordinary
1111
`PurchasesConfiguration` is the correct Play configuration.
1212
- Package `org.interdependency.ahbg`; entitlement `benchmark_lab` unchanged.
13-
- Entitlement lookup is wired, but **purchase initiation and explicit restore
14-
controls are not yet implemented**. Do not call the Play billing gate complete
15-
until the app can fetch the offering, launch the purchase, and call
16-
`restorePurchases` through a user-visible path.
13+
- Entitlement lookup exists, but the Android/WebView surface currently reads a
14+
synchronous Boolean while RevenueCat refreshes customer info asynchronously.
15+
- Purchase initiation and explicit restore controls are not yet implemented.
16+
- Verified client-to-runtime entitlement transport and enforcement of the
17+
premium operations are not yet implemented.
18+
- `BuildConfig.RUNTIME_URL` points at the intended production host, but a source
19+
constant is not deployment evidence. Production TLS/reachability and the
20+
AHBG runtime service still require end-to-end acceptance.
21+
22+
Do not call the Play billing or publication gate complete until those repository
23+
boundaries and the live-account boundaries below have been verified.
1724

1825
## 1. Play Console
1926

@@ -23,13 +30,17 @@ default), and a signed AAB.
2330
testers for at least 14 days before production access.
2431
2. Create the app (`org.interdependency.ahbg`) and complete the store listing
2532
with `STORE_LISTING.md`, `PRIVACY_POLICY.md`, icon, and screenshots.
26-
3. Complete the mandatory **App content** declarations before production:
33+
3. Complete the mandatory **App content** declarations before production,
34+
including the applicable "none" declaration when the app has no such
35+
features:
2736
- Data safety;
2837
- public privacy-policy URL;
2938
- ads declaration;
3039
- app-access declaration/instructions;
31-
- target audience and content declarations; and
32-
- content-rating questionnaire.
40+
- target audience and content declarations;
41+
- content-rating questionnaire;
42+
- Financial features declaration; and
43+
- Health apps declaration.
3344

3445
## 2. Release artifact (Play-native AAB)
3546

@@ -71,14 +82,34 @@ provisioned). Upload the signed AAB as the first internal/closed test release.
7182
activate.
7283
6. In RevenueCat, map product `ahbg_benchmark_lab` → entitlement
7384
`benchmark_lab` → default offering.
74-
7. Copy the Google Play app's RevenueCat **public SDK API key** (`goog_...`)
75-
into the Android build. `rc_...` identifies RevenueCat project resources;
76-
it is not the Google Play Android SDK key.
85+
7. Record the RevenueCat project ID exactly as shown by RevenueCat; v2 project
86+
IDs use the `proj...` form. This is project metadata, not an Android SDK key.
87+
8. Copy the Google Play app's RevenueCat **public SDK API key** (`goog_...`)
88+
into the Android build.
7789

78-
## 5. Sandbox purchase + restore + persistence verification
90+
## 5. Repository billing and entitlement gate
7991

80-
This gate is **repository-blocked until purchase and restore controls are
81-
wired**. Once that code exists:
92+
Sandbox verification is **repository-blocked** until all of these are real:
93+
94+
1. fetch the current RevenueCat offering/package and initiate purchase of
95+
`ahbg_benchmark_lab` from a user-visible control;
96+
2. expose an explicit restore control using RevenueCat restore and handle
97+
success/cancel/error outcomes;
98+
3. notify/refresh the WebView when asynchronous customer-info refresh changes
99+
`benchmark_lab`, including on cold start rather than relying on one early
100+
synchronous read;
101+
4. carry a server-verifiable entitlement claim to the runtime and enforce it at
102+
the premium operations instead of changing only a local status label; and
103+
5. deploy the production runtime and verify TLS, `board.html`, session creation,
104+
plan/state calls, entitlement checks, and the premium gate through the exact
105+
production URL.
106+
107+
Do not replace these with a local Boolean, a documentation assertion, or an
108+
unverified client field.
109+
110+
## 6. Sandbox purchase + restore + persistence verification
111+
112+
Once section 5 exists:
82113

83114
1. Play Console → Settings → License testing: add the Google account that will
84115
perform the billing test. Test-track membership alone does not make a
@@ -87,19 +118,24 @@ wired**. Once that code exists:
87118
install the Play-delivered test release.
88119
3. Verify free tier: basic play and external harness connectivity work.
89120
4. Fetch the current RevenueCat offering and initiate purchase of
90-
`ahbg_benchmark_lab`; confirm `benchmark_lab` unlocks.
121+
`ahbg_benchmark_lab`; confirm the verified runtime premium surface unlocks.
91122
5. Invoke the app's explicit restore path; confirm the entitlement re-activates
92-
for the same store account.
93-
6. Force-stop and relaunch; confirm the entitlement remains correct.
94-
95-
## 6. Production
96-
97-
1. Complete the required closed test if the account is subject to it.
98-
2. Complete all App content declarations and resolve every Play Console
123+
for the same store account and the WebView receives the refreshed state.
124+
6. Force-stop and relaunch; confirm asynchronous customer-info refresh restores
125+
the correct state without requiring a page reload or second app start.
126+
7. Exercise one premium operation and prove the runtime rejects it without a
127+
valid entitlement and accepts it with the verified entitlement.
128+
129+
## 7. Production
130+
131+
1. Deploy the production AHBG runtime at the exact configured HTTPS URL and run
132+
the end-to-end health checks in section 5 from a release-equivalent client.
133+
2. Complete the required closed test if the account is subject to it.
134+
3. Complete all App content declarations and resolve every Play Console
99135
publication blocker.
100-
3. Apply for production access, promote the release, obtain the public Play
136+
4. Apply for production access, promote the release, obtain the public Play
101137
Store URL.
102-
4. Use that URL as the Devpost entry.
138+
5. Use that URL as the Devpost entry.
103139

104140
## Galaxy (deferred/optional)
105141

@@ -109,7 +145,8 @@ and follow the archived Galaxy notes.
109145

110146
## hmmm
111147

112-
The repository can prepare the AAB and entitlement boundary, but Play account
113-
approval, live service credentials, store policy declarations, and the real
114-
billing transaction remain external. Purchase/restore UI is still repository
115-
work and must be completed before sandbox verification.
148+
The repository can build the AAB and observe an existing RevenueCat entitlement,
149+
but acquisition, asynchronous UI refresh, verified runtime enforcement, and
150+
production-runtime acceptance remain repository work. Play account approval,
151+
live service credentials, policy declarations, and the real billing transaction
152+
remain external.

0 commit comments

Comments
 (0)