@@ -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.
24312 . 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.
72836 . 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
831141 . 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.
881193 . Verify free tier: basic play and external harness connectivity work.
891204 . 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.
911225 . 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