From e0bd307063a831a8819aefc413ab9fa6faafbbe2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 10 Jul 2026 11:36:15 +0600 Subject: [PATCH] [2026-07-10] eagle: work/projects/ios-subscription-day7-promo-pr.md --- work/projects/ios-subscription-day7-promo-pr.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/work/projects/ios-subscription-day7-promo-pr.md b/work/projects/ios-subscription-day7-promo-pr.md index a50cdd3b..445648ed 100644 --- a/work/projects/ios-subscription-day7-promo-pr.md +++ b/work/projects/ios-subscription-day7-promo-pr.md @@ -33,7 +33,7 @@ Contextual onboarding then starts on the browser. The *"Ready to get started? Tr 1. **"Try a Search" dialog visible; stop app; wait ≥1 min; cold launch** On the *"Ready to get started? Try a search!"* dialog, do not tap any chip → force-quit → wait ≥1 min → cold launch - → **Day-7 promo sheet appears** (`subscriptionPromotionPending = false`, `hasSeenOnboarding = false`, cooldown passed) + → **No promo sheet** 2. **"Try a Search" dialog visible; hide app; reopen (foreground)** Same as above → press home button instead of quitting → switch back to DuckDuckGo @@ -41,7 +41,7 @@ Contextual onboarding then starts on the browser. The *"Ready to get started? Tr 3. **Select a search chip; "That's DuckDuckGo Search!" appears; tap "Got it!"; "Try Visiting a Site" appears; stop app; cold launch** On *"Ready to get started? Try a search!"* select a search suggestion chip → SERP loads → *"That's DuckDuckGo Search!"* dialog → tap **"Got it!"** → *"Next, try visiting a site!"* dialog appears → force-quit → wait ≥1 min → cold launch - → **Day-7 promo sheet appears** (fire tutorial not yet done; `subscriptionPromotionPending = false`) + → **No promo sheet** 4. **"Try Visiting a Site" dialog visible; hide app; reopen (foreground)** Same as above (up to *"Next, try visiting a site!"* dialog visible) → press home button → switch back to DuckDuckGo @@ -53,7 +53,7 @@ Contextual onboarding then starts on the browser. The *"Ready to get started? Tr 6. **Complete "Try Visiting a Site"; fire button tutorial shows; stop app; cold launch** Visit a site from the *"Try Visiting a Site"* step → tracker dialog → **"Got it!"** → fire button is highlighted by tutorial → force-quit without tapping fire → wait ≥1 min → cold launch - → **Day-7 promo sheet appears** (not yet in EOJ flow; `subscriptionPromotionPending = false`) + → **No promo sheet** 7. **Press 🔥 fire button; contextual subscription promo "Oh, before I forget..." appears; stop app; cold launch** Follow fire tutorial → tap the 🔥 **Fire button** → fire confirmation → contextual subscription promo *"Oh, before I forget..."* appears → force-quit without interacting → wait ≥1 min → cold launch @@ -81,7 +81,7 @@ Contextual onboarding starts with *"Ready to get started? Try a search or AI cha 11. **Select a search chip; "Try Visiting a Site" appears; stop app; cold launch** On *"Ready to get started? Try a search or AI chat!"* select a **search suggestion chip** → SERP loads → *"That's DuckDuckGo Search!"* → *"Next, try visiting a site!"* dialog → force-quit → wait ≥1 min → cold launch - → **Day-7 promo sheet appears** (before fire step; `subscriptionPromotionPending = false`) + → **No promo sheet** 12. **Select a search chip; complete contextual onboarding to fire step; contextual promo pending; stop app; cold launch** Select a search chip → complete *"Try Visiting a Site"* → fire tutorial → tap 🔥 Fire button → *"Oh, before I forget..."* appears → force-quit → cold launch @@ -174,7 +174,7 @@ Contextual onboarding starts with *"Ready to get started? Try a search or AI cha 29. **Upgrade from pre-feature build; contextual onboarding incomplete; promo shown on first launch after update** Install build at commit `0f064b1e66` → complete linear onboarding only (stop before completing contextual dialogs) → update to `alex/subscription-day7-promo` → cold launch (install date ≥1 min ago) - → **Day-7 promo sheet appears** (`subscriptionPromotionPending = false` since user never reached fire step; cooldown passed) + → **No promo sheet** --- @@ -184,7 +184,7 @@ Contextual onboarding starts with *"Ready to get started? Try a search or AI cha #### What could go wrong? -- **Promo appears during active contextual onboarding** — would create two overlapping subscription-related sheets. Mitigated by the `isEligibleToPresent` gate checking `subscriptionPromotionPending`; covered by testing flows #7, #12, #16. +- **Promo appears during active contextual onboarding** — would create two overlapping subscription-related sheets. Partially mitigated by the `isEligibleToPresent` gate checking `subscriptionPromotionPending` (covers the EOJ/fire step; flows #7, #12, #16). **Known gap**: earlier contextual dialogs (*"Try a Search"*, *"Try Visiting a Site"*, fire tutorial) are not yet guarded — the promo currently appears on top of them on cold relaunch. This needs to be fixed before shipping (flows #1, #3, #6, #11, #29 are marked ⚠️). - **Promo shown twice** — duplicate impression if `subscriptionPromotionDialogSeen` is not persisted correctly. Mitigated by setting the flag in `markLaunchPromptPresented()` before presenting; covered by flows #18–20. - **Other modal prompts regressed by gate refactor** — existing providers could break if the per-provider default gate behaves differently from the removed global gate. The default `isEligibleToPresent` returns `isOnboardingComplete`, which is functionally equivalent; covered by flow #27. - **Cooldown bypassed by date manipulation** — low risk for production; the debug override (1-min) must be reverted before shipping.