docs: add R23-DQ-001 reconcile check to QAPlan Pass N
This commit is contained in:
parent
968ab563a0
commit
96fdd67e1a
|
|
@ -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,
|
- **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,
|
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
|
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.
|
- **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?)
|
### 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`)
|
**Discuss** thread (Pass L) → **Answer History** → **streak** increment + milestone celebration (`streak_milestone`)
|
||||||
→ reveal `isRevealed` retry (the `onAnswerRevealed` push). Verify the premium daily-question fallback
|
→ reveal `isRevealed` retry (the `onAnswerRevealed` push). Verify the premium daily-question fallback
|
||||||
(`DailyQuestionResolver` per-user) does **not** desync the couple's shared daily Q.
|
(`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
|
- **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,
|
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.
|
`scheduledOutcomesReminder` fires, "No baseline yet" → check-in dialog (C-DARK-UI-002 area). Submit + Skip both work.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue