| 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 | 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 | None — the manual already references `docs/copy-guide.md` (line 1063) as the source of voice; the new `CloserCopy` Kotlin catalog is internal implementation tracked in `docs/CopyMigration.md` and doesn't change the voice contract. The 55 purged string resources were already off-grid (no manual references to `strings.xml`). | (no-op) |
| 5 | Notifications / FCM: qa_push.js | None — the manual documents the production FCM token pipeline (TokenRegistrar → onAnswerWritten → fcmTokens subcollection fan-out, line 963+) but does not reference the `qa/qa_push.js` helper script. The c60fa958 fix only changes how the QA helper picks a token (newest instead of `docs[0]`); the production path is unchanged. | (no-op) |
| 6 | TOC + anchor integrity | 1 broken anchor: `### iOS → Android sealed-answer bridge (...)` had a `→` in the heading text; the auto-generated slug was `ios--android-sealed-answer-bridge-wrapreleasekeycallable` (double dash) but the TOC + the in-text link both pointed to `ios-android-sealed-answer-bridge-wrapreleasekeycallable` (single dash). Fixed by adding an explicit `{#ios-android-sealed-answer-bridge-wrapreleasekeycallable}` anchor. Re-run: 62/62 TOC + 62/62 in-text anchors resolve. | (this commit) |