πŸ“± Android Early Access β€” Sequencing Plan

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, fills the gaps.
Ship by
Jun 24
Donald back 22nd

Milestone roadmap

M0 Β· CallsSinger / Amos / Rhys

Highest-risk, highest-value, mostly there. Reconnect on drop, session resume, network handover, 5001 recovery.

Exit: QA places a call, survives wifi↔LTE handover, recovers from drops.
M1 Β· TextsAmos (focused)

Chat reconnect, character-switch history UX, send-button stall recovery.

Exit: QA holds a text conversation, switches characters, recovers from stalls.
M2 Β· Push + universal linksRhys / Donald

In-scope per the Open Testing commitment. FCM plumbing β†’ permission prompt β†’ text/waitlist push β†’ deep-link tap-through. + gap: universal links.

Exit: QA receives a push and deep-links into the right screen.
M3 Β· Waitlist flowDonald / Rhys

Confirmed launch requirement. In-app gate (GET /waitlist/status β†’ app-or-waitlist-screen) + waitlist entry screen + Statsig waitlist_auto_approve for early-adopter admission + Google Play tracks (closed β†’ open β†’ production) so external testers can install. Reuses iOS waitlist infra end-to-end.

Exit: Play Open Testing track live; non-allowlisted users hit the waitlist screen; Statsig auto-approve admits early adopters.
PMF-3175 Play tracksPMF-3090 Statsig gateClient gate logicWaitlist entry screen
M4 Β· SDUI cardsRhys

Framework, shell, carousel, Search card all done. Finish card content + post-call rendering.

Exit: QA sees cards in-call and in the post-call activity sheet.
M5 Β· AnalyticsDonald

Final polish: verify waitlist_joined / waitlist_approved events fire on Android, web→app funnel from sesame.com/beta, Rudderstack + Bitdrift sinks. Mostly-built framework needs Android wiring + verification.

Exit: joined/approved events verified; web β†’ in-app funnel intact.
PMF-3089 beta opt-inwaitlist_joined/approvedRudderstack/Bitdrift

Progress by milestone

M0 Calls Β· 8/14
M1 Texts Β· 14/29
M2 Push + links Β· 1/6
M3 Waitlist flow Β· 0/4
M4 SDUI cards Β· 9/12
M5 Analytics Β· 0/6
Bar length = items in that milestone; solid fill = done, faded = remaining. Counts include leaf tickets only (parent epics + stretch items excluded). M1 Texts is by far the heaviest open bucket (15 items remaining) β€” added agent-file menu work (PMF-3231/32/33/36/38) this pass. M4 SDUI closest to done at 75%; M0 Calls mid-way; M5 Analytics now has the analytics-parity sub-tree (PMF-3096 family).

QA β€” what to test, what to ignore

Per-milestone breakdown of what QA should exercise vs. known gaps to skip. Currently detailed for M1 Texts β€” other milestones will get the same treatment as they near QA-readiness.

M1 Β· Texts

βœ“ Ready to test

If any of these regress, file a bug.

  • Sending / receiving messages
  • Streaming-text animation (smooth append)
  • Markdown rendering β€” bold, italics, lists, inline code
  • Typing indicator while agent is responding
  • Jump-to-bottom button when scrolled away from latest
  • Send button enable/disable on empty input + character-count enforcement
  • Date separators + tap-to-reveal timestamps
  • User message pins to top while agent reply streams in
  • Text selection inside messages
  • Character switching (basic case β€” pick a different agent and chat)
  • Extended Thinking bottom sheet opens from chat row
  • Grounding pills (inline source citations) on grounded agent responses

⏭ Known gaps β€” skip

Tracked in Linear; don't file bugs.

  • No unread badges on characters with new messages β€” mark-as-read wire protocol not wired Β· PMF-2795
  • Long-press menu only shows Retry β€” Copy / Share / Delete missing Β· PMF-2796
  • URLs in chat render as plain text β€” no link-preview cards Β· PMF-2799
  • Scroll-to-bottom from deep history uses UI layout instead of querying server Β· PMF-3068
  • Chat history can fail to load on cold-start when socket isn't connected; tap-to-retry loops Β· PMF-3047
  • Character-switch loading UX β€” no spinner, weak error state, no "no messages yet" empty state Β· PMF-3048
  • Send button can stay disabled after a stream stall or reconnect Β· PR #17369
  • Chat typography + colors don't fully match iOS β€” earlier alignment pass shipped but visual drift remains; follow-up scoped Β· PMF-3254

Gaps the original list was missing

βž• Add to scope

  • Onboarding flow β€” gender, agent audio sampler (PMF-3211), greeting. Sits between login and calls/texts.
  • Profile / character parity β€” confirm release profiles reach Android (PMF-3194 was canceled as duplicate β€” 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 M5 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.