docs: add R23-DQ-001 reconcile check to QAPlan Pass N

This commit is contained in:
null 2026-06-30 19:06:20 -05:00
parent 968ab563a0
commit 96fdd67e1a
1 changed files with 11 additions and 1 deletions

View File

@ -968,7 +968,10 @@ open**. No duplicates; rate limiter (20/day, 100/week) doesn't drop legit ones.
- **Install/update/migration lifecycle:** fresh install, update over an existing signed-in install, app data retained,
Room/DataStore/SharedPreferences migrations, notification channel migration, cached encryption/key material,
pending deep links/notifications across update, and version-skew between partners if one device updates first. No
sign-out loops, stale build routing, lost local state, broken permissions, or migration crashes.
sign-out loops, stale build routing, lost local state, broken permissions, or migration crashes. **When local state
is lost but Firestore is intact (fresh device / cleared data), already-answered content must reconcile back rather
than re-prompt** — see the **R23-DQ-001** daily-question reconcile check in Pass N (a re-answer offered against an
immutable `secure/payload` is silent data loss).
- **Crash reporting:** confirm crashes/ANRs are actually captured (Crashlytics) so field issues surface.
### Pass H — Branding & artwork (every screen: could it carry more of the brand? where would art help?)
@ -1213,6 +1216,13 @@ The non-game interactive surfaces that have no functional home (Pass B is games
**Discuss** thread (Pass L) → **Answer History****streak** increment + milestone celebration (`streak_milestone`)
→ reveal `isRevealed` retry (the `onAnswerRevealed` push). Verify the premium daily-question fallback
(`DailyQuestionResolver` per-user) does **not** desync the couple's shared daily Q.
- **R23-DQ-001 — fresh-device / cleared-local-DB reconcile (data-loss guard):** after answering, simulate the
Room↔Firestore desync (new device, reinstall with data cleared, or a wiped local answer store) so Firestore holds
the answer but local Room/prefs don't. Home must **not** show a stale "your turn", and opening the daily question
must show the **submitted/reveal** state (NOT an editable re-answer form) — because the `secure/payload` doc is
immutable (`allow update:false`), so a re-answer would be silently rejected and a *changed* pick lost. The guard is
`reconcileLocalAnswerFromFirestore` (Room-first; rebuilds from the read-gated couple-key payload) wired into
`DailyQuestionViewModel` + `HomeViewModel`; covered by `ReconcileLocalAnswerTest`.
- **Relationship check-ins / Your Progress (outcomes):** baseline check-in (gated to show once), 30/60/90-day
follow-ups, slider inputs persist (`submitOutcomeCallable`), the progress view renders patterns/milestones,
`scheduledOutcomesReminder` fires, "No baseline yet" → check-in dialog (C-DARK-UI-002 area). Submit + Skip both work.