Ordered for testability: get each feature into a state QA can exercise as early as possible, so we collect feedback while there's runway to fix. Keeps the proposed priority order, front-loads the access spine, fills the gaps.
Ship by
Jun 24
Donald back 22nd
Decision locked β Open Testing (public), hard commitment. Push notifications + universal links + waitlist flow are must-ships. App ships to Play Open Testing with an in-app waitlist gate (reuses iOS waitlist infra).
Milestone roadmap
M0 Β· Access spineowner: Rhys Β· parallel
Installable Dev/Alpha/Beta build + Google login + minimal onboarding that reaches the home/call screen. Internal QA confirmed via Firebase App Tester β Alex is in and testing today. M0 now narrows to external/Play distribution for the Open Testing launch.
Exit: Play Open Testing track live; external testers can install via the Play listing.
Bar length = items in that milestone; solid fill = done, faded = remaining. Counts exclude parent epics and stretch items. Longest bars (M1 Calls, M5 Push) carry the most outstanding work.
Gaps the original list was missing
β Add to scope
Distribution / release plumbing β Play tracks (PMF-3175), Firebase suffix builds, signing. The true M0; nothing is QA-able without it.
Onboarding flow β gender, agent audio sampler (CHA-55), greeting. Sits between login and calls/texts.
Universal / deep links β required by Open Testing + push tap-through + sesame.com/beta hand-off.
Profile / character parity β confirm release profiles reach Android (PMF-3194 was canceled β verify it's covered).
β Out of scope for 6/24
Apple Sign-In on Android (PMF-3215) β deferred post-launch. Ticket stays open in Linear as backlog. iOS-user migration via Apple ID will require pickup before that funnel is meaningful.
Android Auto (PMF-2704, PMF-2708) β backlog, Level 4, partner application + production rollout. Separate train.
β Confirm with team
Waitlist promotion cadence (time / count / manual) β sizes the M6 analytics work + M3 admission policy.
Items to validate in Linear
Plan items that don't reference a Linear ticket β confirm whether each needs to be tracked, is already covered by an existing issue, or can be dropped.
Client gate logic + waitlist entry screen (M3) β PMF-3090 covers the Statsig auto-approve side; confirm whether the in-app GET /waitlist/status handling + entry-screen UI need their own ticket(s).
Universal / deep links on Android (M5) β required by Open Testing + push tap-through; no ticket found.
waitlist_joined / waitlist_approved analytics events on Android (M6) β iOS landed in #16428; verify Android wiring is ticketed.
Rudderstack / Bitdrift sink verification on Android (M6) β sink correctness on the events above; may be covered by an existing analytics ticket.