Closer/ClaudeQACoverage.md

8.6 KiB
Raw Blame History

Claude QA Coverage Matrix

Resume anchor. Status: todo | pass | fail(→id) | n/a. See ClaudeReport.md run-state header for current position. Round 4 (fix phase + re-QA) COMPLETE 2026-06-25, build 6f6f76a: E-003 + B-004 (P2) + A-OBS (P3) FIXED + verified live + committed. 0 open P0P2. Only E-OBS (P3, bg push channel) open — deferred (server change + user-gated functions deploy). Regression smoke clean (launch, This-or-That end-to-end + B-001 auto-close, chat enc:v1: at rest, C-NAV-001 back→launcher).

Pass A — Couple-shared premium (states: neither / partner-only / self)

Feature neither→locked partner→both unlock self→unlock Status
Chat media + reactions pass pass pass pass (couple-shared)
Play: Desire Sync pass fail→A-001 pass fail→A-001
Play: Memory Lane pass fail→A-001 pass fail→A-001
Play: Connection Challenges pass fail→A-001 pass fail→A-001
Question Packs (premium) pass fail→A-001 pass fail→A-001
Wheel: Category Picker / Spin / History pass fail→A-001 pass fail→A-001
Date Match / Plan Date pass fail→A-001 pass fail→A-001
Subscription screen (own status) n/a n/a n/a pass (by-design per-user)

Pass A: complete (1 systemic P1). A-001 FIXED (e8892a9) — couple-shared everywhere; re-verify each feature in re-QA. New cosmetic A-003 (P3, badge). Subscription screen by-design. R3 re-verified LIVE (2026-06-25): neither→paywall ("Go deeper together"), partner→couple-shared unlock (Sam free entered Desire Sync + Memory Lane), self→unlock; A-003 badges hidden under premium / shown when free (count 0↔2). New A-OBS (P3): paywall plan-load shows raw "credentials issue" error (env: no RevenueCat sandbox).

Pass B — Games lifecycle (start / play / finish + results)

RESTARTED 2026-06-24 (R2-B2): full re-run from game #1 with the PLAY-AS-THE-USER mindset (navigate only via the real in-app path; report-first-then-workaround on any broken flow). Prior R2 This or That / How Well passes are superseded — redo every game cleanly. (Prior result for reference: This or That 5/5 , How Well 5/5 .) R2-B2 COMPLETE — all 7 games played one full time through on both devices via real user nav; gameplay all PASS. Findings surfaced by playing-as-user: B-001 (P1) finished session never closes → blocks next game; C-NAV-001 (P1) back from Home resurfaces onboarding/auth; B-002 (P2) Home "Play now" → generic hub; C-CC-001 (P2) Connection Challenges dup header/double-back; C-DS-001 (P2) Desire Sync dark-mode low contrast; B-003 (P3) confusing Desire Sync counts. Sam reverted to free (baseline). date_match push verified live (Pass E bonus).

Game starts plays finishes/results no crash Status
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 pass pass (full, user-nav) pass pass R2-B2: QA answered 5 (incl. a 1-5 scale Q5); Sam predicted via Play hub — 3 correct + 1 deliberate miss (Kind tone vs Specific examples) + scale match → results show 4/5 "You really know each other" with the wrong one marked ✗ on BOTH devices, scoring accurate, no crash
3. Desire Sync pass pass (full, user-nav) pass pass R2-B2: QA(free) entered w/o paywall (A-001 live ); both answered 5 Yes/No → exactly 3 mutual desires revealed, mismatches hidden (privacy correct), results match both, no crash . Findings: B-003 (P3 confusing counts), C-DS-001 (P2 dark-mode low contrast on revealed list).
4. Connection Challenges pass pass (day-cycle, user-nav) pass pass R2-B2: opened (D-001 rules hold ); started Gratitude Week → both completed Day 1 → day ✓, 🔥1 streak, advanced to Day 2 "Both of you showed up today", synced on both, no crash . (7-day series is time-gated; full per-day cycle verified.) Finding: C-CC-001 (P2 duplicate header + double back). Minor: first partner's view shows next-day content + "waiting for partner" before the day is mutually done (self-resolves).
5. Memory Lane pass pass (create+seal, user-nav) pass (sealed) pass R2-B2: loads clean (D-001 , no hung heart); QA wrote a capsule (title+body), picked "1 month" → sealed "Opens in 29 days"; encrypted at rest (title+content enc:v1:, unlockAt=+30d, status=sealed); Sam sees the same sealed capsule cross-device; no crash / no PERMISSION_DENIED . Unlock/reveal is future-dated (can't test w/o time-travel). Single header (no C-CC-001 here).
6. Spin the Wheel pass pass (full, user-nav) pass pass R2-B2: QA(free) entered (A-001 ); spun → "Date Night" category → both answered all 10 prompts (multi-select) → reveal "Here's how you each answered" with per-Q You/partner breakdown matching on BOTH devices, no crash . Wheel session synced (Sam joined QA's active session). Dark answer text a bit dim (C-OBS pattern, readable).
7. Date Match pass pass (full, user-nav) pass pass R2-B2: QA(free) entered (A-001 , in Play hub below Question Packs); both swiped date-idea deck (//💗); QA + Sam both liked the same 3 → 3 date_matches created (sunrise_hike/kayak/rock_climbing); Sam got "It is a match!" modal + LIVE "It's a match!" push notification; "Your Matches" shows all 3 "Mutual love"; no crash / no PERMISSION_DENIED . (Premium-badged ideas accessible via couple premium.)

Note: stale active session blocked games (B-001); cleared via in-app "End their game" (recovery verified). Exit each game via Back to Play between games so the session closes. REQUIREMENT (updated): each game must be played ONE COMPLETE time through on both devices (every step → finish/ reveal/results), not just launched. All rows above are currently launch ok / partial only → full playthrough still owed for every game in Round 2 (premium games need a premium toggle). A launch-only row counts as partial, not pass.

Pass C — Visual (light + dark), all ~50 routes

R3 (2026-06-25): ~14 screen-types swept in Dark (5554), several in Light (5556 during A/B) — all render clean, readable, no FATAL, no new dark-mode contrast issues; 0 enc:v1: leaked to conversation UI. Covered: Home, Play hub, all 7 game screens (setup/play/reveal), Paywall, Settings (+Subscription +Appearance), Today/daily-question (+answer detail), Messages inbox, Conversation (image+voice+text+reaction). C-DS-001 dark-contrast fix holds. Back-stack deep→hub→Home→launcher clean (no double-back; C-NAV-001 holds). C-OBS resolved (debug menu gated). Deferred (nav-drift; standard list/detail, lower-risk): Question Packs detail, Bucket List, Past Games, Wheel History, Answer Reveal (sealed), Date Builder/Plan Date, fresh-account auth/onboarding/pairing.

Pass D — Security & Encryption (D1D6)

R3: D2 deployed rules re-audited (B-001 sessions + D-001 capsules/challenges fixes present; hasPremium + entitlements server-only; ciphertext enforced; no catch-all). D1 at-rest (chat text + lastMessagePreview = enc:v1:; how_well answers + capsules = enc:v1:). D4/D5/D6 unchanged since R1 (code identical) → hold. D3 live non-member: deferred (needs a 3rd fresh account; only 2 emulators, both couple members; rule logic statically member-scoped). No P0/P1 security findings.

Pass E — Notifications (17 types × {foreground, background, killed} + tap-to-open)

R3 live: FCM tokens valid for both. chat_message full chain (bg deliver + content-free + tap→exact conversation w/ content). partner_started_game: bg deliver + content-free ; tap→Play hub (not the game) = E-003 (P2). E-OBS (P3): bg pushes use fcm_fallback channel. date_match live-verified R2-B2. E-001/E-002 fixes present in code. Full 17×{fg/bg/killed} matrix not exhaustively run; routing centralized + code-verified for the rest.

Pass F — Resilience / lifecycle / concurrency / time

R3: offline (airplane mode) → Today renders from cache, no crash ; rotation/config-change → landscape renders, state preserved, no crash ; process-death/restore → ~6 cold restarts all clean to Home (auth persists) ; concurrency → both devices played games simultaneously, sessions synced + B-001 auto-complete on concurrent finish . Time-gated content (capsule "Opens in 29 days", challenge day-gating) can't be time-traveled — noted.