2.3 KiB
Claude QA Report — Full-App QA (living report)
RUN-STATE: Round 1 | Pass B (games lifecycle) | NEXT ACTION: drive each game start→finish on both devices, log issues. (Pass A done: A-001 P1.) Playbook:
ClaudeQAPlan.md. Coverage matrix:ClaudeQACoverage.md. Report-only during passes (no fixes until the fix phase). Devices: emulator-5554 (QA=Y05AKO) + emulator-5556 (Sam=imDjjO), paired (coupleIdXal3Kw3gjSdn0niERYKJ). Build == HEAD64f0a7e.
(Prior games/notifications QA from 2026-06-24 was completed + verified; superseded by this full-app effort.)
Severity summary (Round 1)
| Severity | Open | Fixed |
|---|---|---|
| P0 | 0 | 0 |
| P1 | 1 | 0 |
| P2 | 0 | 0 |
| P3 | 0 | 0 |
Pass A — Couple-shared premium ✅ pass complete
Target: if either partner is premium, all premium features unlock for both. Result: only chat is couple-shared. Every other feature gate is per-user → a free user whose partner paid stays locked.
| ID | Area | Screen/Route | Severity | Description | Repro | Status |
|---|---|---|---|---|---|---|
| A-001 | Premium gating | PlayHubViewModel, DesireSyncScreen, MemoryLaneScreen, ConnectionChallengesScreen, QuestionPackLibraryViewModel, wheel CategoryPicker/SpinWheel/WheelHistory(VMs) | P1 | These gate on per-user EntitlementChecker.isPremium() instead of couple-shared CouplePremiumChecker.coupleHasPremium(partnerId). A free partner of a premium user stays locked — violates couple-shared requirement. |
Set Sam premium, QA free → QA Play hub still shows 🔒 Premium on Desire Sync + Memory Lane (confirmed live). Code: only ConversationViewModel uses CouplePremiumChecker. |
Open |
| A-002 | Premium (control) | ConversationViewModel (chat) | — | Working correctly (couple-shared) — kept as the reference pattern for the A-001 fix. | Verified prior round: partner-premium unlocks chat media/reactions for the free partner. | OK |
Note (by-design, not a bug): SubscriptionScreen uses per-user isPremium() — correct, it reflects the user's own subscription/account state, not a feature gate.
Pass B — Games lifecycle
not started
Pass C — Visual (light + dark)
not started
Pass D — Security & Encryption
not started
Pass E — Notifications
not started