From f8dc8119cb0272752de9a931f20ef70d2c2dfc37 Mon Sep 17 00:00:00 2001 From: null Date: Wed, 24 Jun 2026 22:42:18 -0500 Subject: [PATCH] qa(round2-B2): This or That PASS (user-nav, 5/5, results match); B-001 escalated P3->P1 (Back to Play doesn't close finished session -> blocks next game); B-002 P2 (Play now lands on hub) --- ClaudeQACoverage.md | 2 +- ClaudeReport.md | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ClaudeQACoverage.md b/ClaudeQACoverage.md index c5cfe68b..5b384322 100644 --- a/ClaudeQACoverage.md +++ b/ClaudeQACoverage.md @@ -24,7 +24,7 @@ superseded — redo every game cleanly. (Prior result for reference: This or Tha | Game | starts | plays | finishes/results | no crash | Status | |---|---|---|---|---|---| -| 1. This or That | todo | todo | todo | todo | todo (redo, user-nav) | +| 1. This or That | pass | **pass (full, user-nav)** | **pass** | pass | **R2-B2: 5/5 via Play hub, answers synced, results match both (4/5 "Two peas in a pod", Q2 Differ correct), no crash ✅. Session-lifecycle bug B-001 (P1) hit on exit.** | | 2. How Well Do You Know Me | todo | todo | todo | todo | todo (redo, user-nav) | | 3. Desire Sync | todo | todo | todo | todo | todo (premium; couple has premium) | | 4. Connection Challenges | todo | todo | todo | todo | todo (premium) | diff --git a/ClaudeReport.md b/ClaudeReport.md index acdd0c9a..f05a7453 100644 --- a/ClaudeReport.md +++ b/ClaudeReport.md @@ -14,17 +14,21 @@ _(Prior games/notifications QA from 2026-06-24 was completed + verified; superse --- -## Severity summary (Round 1) +## Severity summary (current — R1 fixed + R2 findings) | Severity | Open | Fixed | |---|---|---| | P0 | 0 | 0 | -| P1 | 0 | 2 | -| P2 | 0 | 1 | -| P3 | 4 | 0 | +| P1 | 1 | 2 | +| P2 | 1 | 1 | +| P3 | 3 | 0 | -**Round 1: all P0–P2 found were FIXED** (A-001 premium P1, E-001 notif-routing P2). Open = P3 cosmetics only -(A-003 badge, B-001 stale-session guard, E-002 informational notif routing). Deferred for a clean "flawless" -certification: exhaustive deep/stateful screens (Pass C), full live notification matrix + D3 live non-member test. +**Round 1: all P0–P2 found were FIXED** (A-001 premium P1, E-001 notif-routing P2). +**Round 2 (Pass B play-as-user restart) new/changed:** **B-001** escalated **P3→P1** (a finished game never closes its +session via any normal path — proven: both tapped "Back to Play", session stayed `active` 12s later — so every game +blocks the next, recoverable only via the destructive "End their game"; breaks the core loop); **B-002 (P2, new)** Home +"Play now / your partner is waiting to play" lands on the generic Play hub instead of resuming/indicating the waiting +game (confirmed with a live session too). Open P3: A-003 (badge), E-002 (informational notif routing), F-OBS +(load-fail handling). Deferred for "flawless": exhaustive deep/stateful screens (Pass C), full live notif matrix + D3. --- @@ -43,7 +47,8 @@ certification: exhaustive deep/stateful screens (Pass C), full live notification ## Pass B — Games lifecycle (launch/crash sweep done; full two-device lifecycle partial) | ID | Area | Screen/Route | Severity | Description | Repro | Status | |---|---|---|---|---|---|---| -| B-001 | Games / sessions | couples/{id}/sessions | **P3** (observe) | A stale `active` wheel session (startedBy QA, `createdAt` missing/undefined) blocked **all** games ("Waiting for Sam"). In-app **"End their game" recovery works** (session→completed, games unblocked). Likely a prior-test artifact, but: sessions appearing without a timestamp + one stale session blocking every game is worth a guard. | Open This or That → "Waiting for Sam… Sam is playing a Wheel game"; tap End their game → unblocked. | Open | +| B-001 | Games / sessions | couples/{id}/sessions | **P1** (was P3→P2→P1) | **A finished game NEVER closes its session — there is no normal-user path to complete it — so every game leaves a dangling `status=active` session that blocks ALL other games.** Definitively proven on the R2-B2 restart: played This or That fully through on BOTH devices → both reached the results screen → **BOTH tapped the intended "Back to Play" button** → both navigated back to the Play hub, **but the session stayed `active`** (re-checked at +0s and +12s; no cloud-function cleanup; `completedAt` never set). So neither "Back to Play" nor leaving to Home completes a finished session — the ONLY thing that does is the **destructive "End their game"** (which the next game offers as "Sam is playing a … game", misleading copy since nobody is actually playing). Net: a couple **cannot cleanly play two games in a row** — after every game, the next one is blocked until one partner kills the (already-finished) session. This breaks the core game loop for every session → **P1**. **Fix:** mark the session `completed` when both players reach results (or on "Back to Play"); don't let a completed/stale session block new games; fix the misleading "is playing" / "End their game" copy. | Play This or That to results on both → both tap "Back to Play" → Firestore `couples/{id}/sessions` still has that this_or_that doc `status=active` (12s later) → open any other game → "Waiting for Sam — Sam is playing a … game", only "End their game" unblocks. | Open | +| B-002 | Home → Play nav (play-as-user) | HomeScreen "Your partner is waiting to play" card → "Play now" | **P2** | The Home card explicitly promises resuming the specific waiting game — "**Your partner is waiting to play. A game is ready for the two of you. Jump back in and keep the ritual going.**" → **"Play now"** — but tapping it just lands on the **generic Play hub** (the game list). It does NOT open/resume the waiting game, and the Play hub shows **no indication of which game is waiting** nor any "resume" affordance. A user told to "jump back in" cannot tell what to tap or how to rejoin. (Also: BOTH partners' Home cards say "**your** partner is waiting to play" for the same session, so each thinks the other is mid-game.) **Fix:** "Play now" should deep-link into the active session (its play/results screen), or the Play hub should surface a "Resume — How Well" entry; the Home copy should reflect whose turn it actually is. | Cold start → Home → tap "Play now" → lands on Play hub, no waiting-game indicator. | Open | **Launch/crash sweep (QA, free):** This or That ✅ (mood/length select), How Well Do You Know Me ✅ (intro), Connection Challenges ✅, Spin the Wheel ✅ — all render, **no FATAL**. Desire Sync + Memory Lane are premium-gated (covered in Pass A; gameplay needs premium toggle). Date Match: todo. Full two-device start→finish + results not exhaustively re-run this round (the prior round verified `onGameSessionUpdate` start/finish end-to-end).