- **🚨 P0 — Onboarding CRASHES on slide 3 (and on Skip) — blocks every first-run user from reaching login.** Discovered 2026-06-28 on a fresh `emulator-5558` install (Pixel 7 Pro, API 34, KVM hw accel). Slides 1 + 2 render fine; tapping **Next** on slide 2 → slide 3 → `FATAL EXCEPTION: main` → app dies back to the launcher. Tapping **Skip** (which jumps to a later slide) also crashes. Existing QA emulators (`5554`/`5556`) never hit this because they're past onboarding with logged-in users — **this regression is invisible to recurring QA and hits every new install.**
**Stack:**`java.lang.IllegalArgumentException: Only VectorDrawables and rasterized asset types are supported ex. PNG, JPG, WEBP` at `androidx.compose.ui.res.PainterResources_androidKt.loadVectorResource` from `app.closer.ui.onboarding.OnboardingScreenKt.CtaSlide(OnboardingScreen.kt:246)`.
**Root cause:** line 246 calls `painterResource(R.drawable.ic_launcher_background)`. The XML is a valid `<vector>` (108dp square with 4 gradient paths), but `painterResource` rejects it at runtime on API 34 — likely an aapt/adaptive-icon bundling quirk where the launcher-background resource resolves to something other than `VectorDrawable`/`BitmapDrawable`.
**Fix options** (any one closes it): (a) swap to `Image(painter = ImageVector.vectorResource(...))`, (b) drop the decorative launcher icon entirely and use a solid `Color`/`Brush` matching the brand, (c) rasterize the background to a PNG and `painterResource` that, (d) use `LocalContext.current.getDrawable(R.drawable.ic_launcher_background)` wrapped in `runCatching`.
**Re-introduction risk / regression-prevention:** add an onboarding route to `qa/entrypoint_smoke.sh` (the cold-start/launch-integrity smoke) so the `am kill` → notification path covers the entire onboarding flow, not just the post-login launch. Also consider a `theme-scan.sh` Tier 2 check: flag `painterResource(R.drawable.ic_launcher_*)` outside `BrandIllustration` / `OnboardingScreen` review.
**Verification before close:** fresh AVD → install → tap Next through all onboarding slides + tap Skip from slide 1 → assert no FATAL, login screen reachable. Repeat on `5554` and `5556` (dark + light).
**Note (project convention):**`Future.md`'s header says actual bugs belong in `ClaudeReport.md`. Filing here per explicit user request 2026-06-28 — recommend also adding a `O-ONBOARD-001` row to `ClaudeReport.md` with the same repro + fix options so it shows up in the recurring QA pass sweep. (The current working-tree `ClaudeReport.md` has uncommitted R17 edits — leaving it alone until the user commits/stashes.)
- **Clarify Connection Challenges day-progress when partners are out of step.** If one partner catches up a *missed* day ("Pick it back up") while the other doesn't, the two devices show different **"Day N of 7"** (seen R10: QA Day 4 vs Sam Day 3) even though the 🔥 streak stays in sync on both. Not broken (plausibly individual-pace-through-the-series by design), but two people in the same shared challenge seeing different day numbers is confusing — consider a shared "you're on Day N together" framing or a clearer caught-up/ahead indicator. *Prompted by:* Pass B (R10) Connection Challenges playthrough.
**Cross-platform:** Android-first is fine for MVP; iOS is the strategic gap (couples split devices). Decision + plan live in `ClaudeiOSPlan.md` — don't start before release/trust polish.
## Product polish (consolidated from the old `FUTURE.md`)
- **Skeleton/loading states over bare spinners (P8).** `LoadingState` exists but many screens still use a bare `CircularProgressIndicator`. Add skeletons for question lists, game histories, home modules, paywall offerings, sync/reveal waits. Acceptance: no primary route shows an isolated spinner on an otherwise blank screen.
- **Paywall / store value framing (P12).** Paywall has benefits/restore/legal/RevenueCat; needs stronger value framing, real offering/trial clarity, screenshots/previews, and test coverage before release. (Overlaps Pass K/O.)
- **Content metadata & personalization (P13).** The bank is clean; the next leap is *routing*, not more questions — tag mood/depth/relationship-stage/conflict-safe/intimacy-level/time-needed and extend the selection APIs so prompts adapt to skipped topics, relationship length, and recent answers.
- **Real release config before any store submission.** Confirmed still open: `app/build.gradle.kts``versionCode = 1` / `versionName = "0.1.0"` and `core/navigation/ExternalLinks.kt` legal URLs are placeholder TODOs (`https://closer.app/privacy|terms|subscription-terms`). _Already done:_ a release-blocking Gradle check now fails the build if `RC_API_KEY` is unset/placeholder (`build.gradle.kts:106–110`), so the old "add a gradle guard" sub-item is closed. Remaining: set real version, real legal/support URLs, real RC key + verify offerings/purchase/restore on internal testing. (Tracked by **Pass O** release-readiness.)
## Help & support surface (consolidated — old "Notes to Consider")
A future Help/Support screen could include: contact support · report a bug · send feedback · FAQ · subscription/billing help · pairing help · recovery-phrase/account help · app version + build number · optional "copy diagnostics" button.