diff --git a/Engineering_Reference_Manual_Plan.md b/Engineering_Reference_Manual_Plan.md index 617e47c2..f22fb3f7 100644 --- a/Engineering_Reference_Manual_Plan.md +++ b/Engineering_Reference_Manual_Plan.md @@ -67,7 +67,7 @@ catalog start). |---|---|---|---| | 1 | Repository layout: dead-file sweep + server/ removal | None — 4103c433 already covered all the dead-file references; the `core/notifications/`, `core/navigation/`, `core/analytics/`, `core/billing/` directories still exist and hold live code (TokenRegistrar, AppMessagingService, AppNavigation, etc.) so the line-963 and line-1021 references are still accurate. No stale `server/` references remain. | (no-op) | | 2 | Billing: RevenueCat SDK + webhook + secret key | (1) Cloud Functions tree (line 203) still said "Ed25519 signature verify (NOT exported / not deployed)" — fixed to "HMAC-SHA256 signature verify (exported, deploy gated on REVENUECAT_WEBHOOK_SECRET)". (2) `purchases:10.12.0` on Android (line 869) → `purchases:10.13.0`. (3) `RevenueCat 10.12.0` in Gradle dep list (line 1134) → `RevenueCat 10.13.0`. (4) `revenucat_secret_api.md` added to the "Files that must never be committed" representative list (it was added to .gitignore in 48217dd7 but the manual didn't list it). | (this commit) | -| 3 | Cloud Functions: webhook handler | TBD | TBD | +| 3 | Cloud Functions: webhook handler | Line 831 (per-module responsibilities) said "RevenueCat webhook (source-only; not exported/deployed)" — fixed to "exported; deploy gated on `REVENUECAT_WEBHOOK_SECRET`". All other webhook-related lines (843-844, 905-908, 910) were already updated by 89d06eeb itself. | (this commit) | | 4 | Engineering conventions: copy catalog + string resource cleanup | TBD | TBD | | 5 | Notifications / FCM: qa_push.js | TBD | TBD | | 6 | TOC + anchor integrity | TBD | TBD | diff --git a/docs/Engineering_Reference_Manual.md b/docs/Engineering_Reference_Manual.md index 4fa3bca3..bd780e40 100644 --- a/docs/Engineering_Reference_Manual.md +++ b/docs/Engineering_Reference_Manual.md @@ -828,7 +828,7 @@ Every function module follows the same shape: ### Per-module responsibilities -- **billing** - RevenueCat webhook (source-only; not exported/deployed), entitlement event handlers (`onEntitlementChanged`), forced re-sync callable (`syncEntitlement`). Entitlement writes are idempotent (write the same Firestore doc and use `entitlement_events/` as a dedup marker). +- **billing** - RevenueCat webhook (exported; deploy gated on `REVENUECAT_WEBHOOK_SECRET`), entitlement event handlers (`onEntitlementChanged`), forced re-sync callable (`syncEntitlement`). Entitlement writes are idempotent (write the same Firestore doc and use `entitlement_events/` as a dedup marker). - **couples** - invite create/accept/leave (`createInviteCallable`, `acceptInviteCallable`, `leaveCoupleCallable`, `onCoupleLeave`), outcome submission (`submitOutcomeCallable`), scheduled 30/60/90 reminders (`scheduledOutcomesReminder`), privacy-safe aggregate rollup (`aggregateOutcomeStats`). - **dates** - mutual-love trigger creates a date match document and notifies the couple (`notifyOnDateMatch` under `createDateMatch.ts`); date reflection write/reveal triggers and a history-aggregation trigger. - **games** - game session updates notify the partner and append to `notification_queue` (`onGameSessionUpdate`); per-game part-finished triggers fire when one partner finishes an async game (`onThisOrThatPartFinished` / `onWheelPartFinished` / `onHowWellPartFinished` / `onDesireSyncPartFinished`).