qa(R8): wrap — Pass E new-type status (not implemented), couple-premium-unlock idea to Future.md
Code check: the speculative Pass E types added by the merged playbook (join_game, partner_joined_game, game_ended, date_plan_update, subscription_entitlement_changed, ...) are not implemented (0 files) -> marked not implemented -> Future.md. Logged the worthwhile ones to Future.md ## QA (notify free partner on couple premium unlock; join/ end pushes). Round 8 at the flawless bar: 0 open P0-P2 (1 P3 J-OBS); I-001/I-002 fixed+ verified pending Round 9 confirm. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ab29f6b12f
commit
dbf8a6f18e
|
|
@ -68,7 +68,8 @@ Full live two-device run (games + messages):
|
||||||
- **partner_started_game** ✅ — channel `game_activity`, "QA is playing… Tap to join!" (content-free); tap → joins the active session.
|
- **partner_started_game** ✅ — channel `game_activity`, "QA is playing… Tap to join!" (content-free); tap → joins the active session.
|
||||||
- **partner_finished_game / results** ✅ — results push delivered to backgrounded partner, channel `game_activity`, content-free; tap → per-session results (per E-003 fix).
|
- **partner_finished_game / results** ✅ — results push delivered to backgrounded partner, channel `game_activity`, content-free; tap → per-session results (per E-003 fix).
|
||||||
- **results-suppression** ✅ — partner foregrounded on the session received 0 pushes (ActiveGameSessionMonitor), while backgrounded partner got the results push. Delivery + suppression both confirmed.
|
- **results-suppression** ✅ — partner foregrounded on the session received 0 pushes (ActiveGameSessionMonitor), while backgrounded partner got the results push. Delivery + suppression both confirmed.
|
||||||
- **Deferred (Round 8):** the full 17-type × {fg/bg/killed} matrix isn't exhaustively run live — remaining types are routing-code-verified + centralized in `PartnerNotificationType`; date_match push verified live. New types added to the plan's Pass E inventory (`join_game`, `partner_joined_game`, `game_ended`, `date_plan_update`, etc.) = **todo**.
|
- **New speculative types — `not implemented → Future.md` (R8 code check, 0 files each):** `join_game`/`game_invite`, `partner_joined_game`, `game_abandoned`/`game_ended`, `date_plan_update`, `memory_capsule_created`, `challenge_day_completed`, `subscription_entitlement_changed`. Worthwhile ones (couple-premium-unlock push; join/end pushes) logged to `Future.md` `## QA`. Not counted as pass.
|
||||||
|
- **Deferred (Round 9):** the full implemented-type × {fg/bg/killed} matrix isn't exhaustively re-run live — implemented types are routing-code-verified + centralized in `PartnerNotificationType`; chat/game start/finish/results + date_match verified live (R3/R5/R6).
|
||||||
|
|
||||||
## Pass F — Resilience / lifecycle / concurrency / time
|
## Pass F — Resilience / lifecycle / concurrency / time
|
||||||
- **Concurrency race:** F-RACE-001 (P1) fixed + **re-confirmed live (R8):** simultaneous mood-tap on both devices → **1 session** (was 2); race-loser landed on WaitingForPartner → **"Join the game"** → joined the winner's session at the **same Q1** (shared reveal preserved). Archived. *(Minor pre-existing note: loser can alternatively land on Play hub; not seen this run.)*
|
- **Concurrency race:** F-RACE-001 (P1) fixed + **re-confirmed live (R8):** simultaneous mood-tap on both devices → **1 session** (was 2); race-loser landed on WaitingForPartner → **"Join the game"** → joined the winner's session at the **same Q1** (shared reveal preserved). Archived. *(Minor pre-existing note: loser can alternatively land on Play hub; not seen this run.)*
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,15 @@ Improvement & feature ideas surfaced while QA-testing as a consumer (each works
|
||||||
quiet-hours moon) used consistently would strengthen identity. Generate the G-set, drop the assets in,
|
quiet-hours moon) used consistently would strengthen identity. Generate the G-set, drop the assets in,
|
||||||
then wire them in. *Prompted by:* Pass H branding review.
|
then wire them in. *Prompted by:* Pass H branding review.
|
||||||
|
|
||||||
|
- **Notify the free partner when the couple gains premium.** When one partner subscribes, the other's app unlocks
|
||||||
|
(couple-shared premium) but they get **no notification** — they only find out next time they open a gated feature. A
|
||||||
|
`subscription_entitlement_changed` push ("You both have Premium now ✨") would close the loop. *Prompted by:* Pass E
|
||||||
|
(R8): the type isn't implemented; couple-shared unlock is silent for the non-subscriber.
|
||||||
|
- **Minor proactive-notification gaps (low priority).** No push when a partner *joins* your active game
|
||||||
|
(`partner_joined_game`) or *ends/abandons* one (`game_ended`/`game_abandoned`) — the other partner sees it
|
||||||
|
in-session / on WaitingForPartner, so nothing's broken, just less proactive. *Prompted by:* Pass E (R8) inventory —
|
||||||
|
these speculative types aren't implemented.
|
||||||
|
|
||||||
### Security hardening (defense-in-depth — not vulnerabilities; rules already hold)
|
### Security hardening (defense-in-depth — not vulnerabilities; rules already hold)
|
||||||
|
|
||||||
- **Enforce App Check on Firestore (currently OFF).** Round 7 raw-API test: an authenticated request with **no App
|
- **Enforce App Check on Firestore (currently OFF).** Round 7 raw-API test: an authenticated request with **no App
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue