docs(plan): Phase 3 complete - 13 batches, 11 issues found and fixed

Completed the full evidence-first re-review of
docs/Engineering_Reference_Manual.md started in the previous commit.
13 batches, 11 issues found and fixed (Batches 11 and 13 were clean),
all committed individually per the standing one-commit-one-batch rule.

Final verification: 30/30 internal anchors resolve cleanly with a
GFM-compliant slug checker; 0 broken TOC links.

Batches 1-13 commits on dev:
  ef5a2331  batch 1  iOS platform row E2EE not-yet-implemented claim
  1b36eba6  batch 2  recovery phrase wordlist size 256 -> 248
  0af6f24a  batch 3  Argon2id memory 46080 -> 47104 KiB
  5e292e66  batch 4  DOW mode table was missing Saturday
  5f7c785f  batch 5  3 missing rule helpers + isPublicKey regex +
                     releaseKeys sender-read fix
  aa356148  batch 6  Cloud Functions handler types table was imprecise
  ceb98f4a  batch 7  iOS DefaultEntitlementChecker actor doesn't
                     exist; gated-features list was wrong
  29cc39aa  batch 8  How-to-gate section header + game-push flag
                     claim (notificationsSent map -> 4 Timestamps)
  9330c0c4  batch 9  Tink template name SHA128 -> SHA256
  22c816ad  batch 10 RevenueCat version 8.20.0 -> 10.12.0 + Glance
  b3725463  batch 11 engineering conventions verified clean (no edits)
  80751f82  batch 12 A-201 landmine heading restored
  c5ead4cb  batch 13 where-to-look-first verified clean (no edits)

The full table of issues + commit SHAs is appended to this plan file
for the next session's reference.
This commit is contained in:
null 2026-07-08 23:33:59 -05:00
parent c5ead4cb83
commit cbb42a6e5c
1 changed files with 20 additions and 1 deletions

View File

@ -1,6 +1,6 @@
# Engineering Reference Manual Review Plan — Phase 3 (2026-07-08)
**Status: 🚧 IN PROGRESS** — full evidence-first re-review of `docs/Engineering_Reference_Manual.md`.
**Status: ✅ COMPLETE** — all 13 batches reviewed, 11 issues found and fixed, committed individually, and pushed to `dev`.
Triggered by `_null` after the Phase 2 sync (`213cfddb`) + review pass (`d31b58d2`).
Goal: cross-check every claim in the manual against the live repo + `firestore.rules`
@ -124,3 +124,22 @@ Goal: cross-check every claim in the manual against the live repo + `firestore.r
### Final pass
- TOC integrity + every anchor resolves.
- One final commit if any TOC/anchor cleanup is needed.
## Phase 3 results (2026-07-08)
| Batch | Section | Issues found | Commit |
|---|---|---|---|
| 1 | Front matter + System overview + Repository layout | iOS platform row said "E2EE cross-compatibility not yet implemented" (contradicts the iOS E2EE section below) | `ef5a2331` |
| 2 | Auth + pairing + couples doc model + rate limit + recovery | Recovery phrase "256-word list" - actual list is 248 entries (`WORDLIST` array has 248; iOS wordlist is 247 lines = 248 entries with no trailing newline) | `1b36eba6` |
| 3 | E2EE model (versions, Argon2id, Tink, sealed-answer, ECIES) | Argon2id memory "46080 KiB" - actual constant is `46 * 1024 = 47104` KiB; iOS-side docstring was already correct | `0af6f24a` |
| 4 | Daily question lifecycle + Reveal flow + Thread questions | DOW mode table was partial (missed Saturday `mode_weekend_side_quest` - Side Quest Saturday) | `5e292e66` |
| 5 | Firestore security rules | Missing 3 helper functions (`otherCoupleMember`, `partnerReflectedDate`, `isPublicKey`); wrong regex for `isPublicKey`; releaseKeys per-collection enforcement said "readable only by recipient" but the rule also allows the sender (for the idempotency existence-check) | `5f7c785f` |
| 6 | Cloud Functions | Handler types table mixed onDocumentCreated / onDocumentUpdated / onDocumentWritten into one row; onEntitlementChanged was in a separate "Firestore onUpdate" row but is actually onDocumentWritten | `aa356148` |
| 7 | Billing | iOS "DefaultEntitlementChecker actor" doesn't exist (the real class is `BillingService`); gated-features list was wrong (4 of 7 items were not actually gated; chat-media gate was missing) | `ceb98f4a` |
| 8 | Notifications | "How to gate a new feature" sub-section got merged into the previous paragraph by Batch 7; game-push flag claim was wrong (no `notificationsSent` map - 4 separate Timestamp fields) | `29cc39aa` |
| 9 | iOS-specific notes | Tink template name "SHA128" was a typo - actual is `ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM` | `9330c0c4` |
| 10 | Build and release | RevenueCat version 8.20.0 (stale from v0.2.1) - actual is 10.12.0; iOS purchases-ios 5.x; Glance 1.1.1 missing from the Gradle dependency list | `22c816ad` |
| 11 | Engineering conventions | (no issues - every claim verified) | `b3725463` |
| 12 | Known landmines and recent fixes | A-201 landmine heading (`### A-201 - ...`) got dropped during the Phase 2 sync - the body content was there but visually merged with the previous landmine's tail | `80751f82` |
| 13 | Where to look first | (no issues - all 16 file paths resolve, acceptInviteCallable encryptionVersion=2 verified) | `c5ead4cb` |
| Final | TOC + anchor integrity | 30/30 anchors resolve, 0 broken TOC links | (this commit) |