[2026-07-10] eagle: work/projects/ios-subscription-day7-promo-pr.md

This commit is contained in:
Alexey Martemyanov
2026-07-10 11:36:15 +06:00
parent 1bf03737b5
commit e0bd307063
@@ -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 #1820.
- **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.