Generated from: “Show the Q3 delivery plan for the mobile app with dates and dependencies.”
View the Markdown
```meta
title: Q3 delivery plan — mobile app 4.0
subtitle: Dates, dependencies, and the ship gate for the July–September release.
tag: PLAN
```
```callout
tone: note
title: Assumptions
body: "Q3 is 1 Jul – 30 Sep 2026 and status is as of 13 Sep 2026. The release is mobile app 4.0 on iOS and Android from one codebase. Sync API v2 is owned by the platform team and is the only dependency outside the mobile team. Sprints are two weeks and start on 1 Jul."
```
Four workstreams feed one release candidate. Sync API v2 gates the offline cache, and the passkey sign-in gates the push rework, so those two chains set the critical path. Everything else can slip a sprint without moving GA.
## Schedule by sprint
```gantt
periods:
- "S1 · Jul 1–14"
- "S2 · Jul 15–28"
- "S3 · Jul 29–Aug 11"
- "S4 · Aug 12–25"
- "S5 · Aug 26–Sep 8"
- "S6 · Sep 9–22"
- "S7 · Sep 23–30"
tasks:
- { label: Sync API v2 (platform team), start: 0, span: 3, kind: done }
- { label: Passkey sign-in, start: 0, span: 2, kind: done }
- { label: Beta 1 on TestFlight and Play internal, start: 2, span: 1, kind: milestone }
- { label: Offline order cache, start: 1, span: 4, kind: done }
- { label: Design system 2.0 adoption, start: 2, span: 3, kind: done }
- { label: Push notification rework, start: 3, span: 3, kind: active }
- { label: Feature freeze, start: 4, span: 1, kind: milestone }
- { label: Release candidate and store submission, start: 5, span: 1, kind: current }
- { label: Phased rollout, start: 6, span: 1 }
- { label: 4.0 GA, start: 6, span: 1, kind: milestone }
```
The push rework was planned to close at the 8 Sep freeze and now runs into S6. It has a two-week freeze exception because the device-token binding depends on the passkey session, which merged one sprint later than planned. If it is not merged by 22 Sep, 4.0 ships without it and the rework moves to the first 4.1 sprint.
## What blocks what
```flow
variant: dag
dir: LR
nodes:
- { id: sync, col: 1, row: 1, kind: start, label: Sync API v2 }
- { id: passkeys, col: 1, row: 2, kind: start, label: Passkey sign-in }
- { id: ds, col: 1, row: 3, kind: start, label: Design system 2.0 adoption }
- { id: cache, col: 2, row: 1, kind: process, label: Offline order cache }
- { id: push, col: 2, row: 2, kind: process, label: Push notification rework }
- { id: rc, col: 3, row: 2, kind: process, label: Release candidate 4.0 }
- { id: rollout, col: 4, row: 2, kind: process, label: Phased rollout }
- { id: ga, col: 5, row: 2, kind: end, label: 4.0 GA }
edges:
- sync -> cache: delta endpoint
- passkeys -> push: device-token binding
- cache -> rc
- push --> rc: freeze exception
- ds -> rc
- rc -> rollout: store approval
- rollout -> ga
```
## Workstreams, owners, and dates
```table
columns: [Workstream, Owner, Start, End, Depends on, Status]
rows:
- [Sync API v2, Platform team (Rui Costa), 2026-07-01, 2026-08-11, "—", { v: Done, tone: pos }]
- [Passkey sign-in, Mobile core (Ana Lindqvist), 2026-07-01, 2026-07-28, "—", { v: Done, tone: pos }]
- [Offline order cache, Mobile core (Dev Patel), 2026-07-15, 2026-09-08, Sync API v2, { v: Done, tone: pos }]
- [Design system 2.0 adoption, Mobile UI (Mei Tanaka), 2026-07-29, 2026-09-08, "—", { v: Done, tone: pos }]
- [Push notification rework, Mobile core (Ana Lindqvist), 2026-08-12, 2026-09-22, Passkey sign-in, { v: At risk, tone: warn }]
- [Release candidate and store submission, Release (Sam Okoro), 2026-09-09, 2026-09-22, "Offline order cache, Design system 2.0, Push rework", { v: In progress, tone: warn }]
- [Phased rollout, Release (Sam Okoro), 2026-09-23, 2026-09-30, Store approval, { v: Next, tone: muted }]
note: Dates are sprint boundaries. Store approval normally takes 1–3 days on iOS and under 1 day on Android.
```
## Milestones
```timeline
items:
- "[done] 2026-07-01 · Q3 kickoff · Scope locked and the Sync API v2 contract signed off with the platform team."
- "[done] 2026-07-28 · Passkey sign-in merged · One sprint late; the push rework start moved with it."
- "[done] 2026-08-11 · Beta 1 · TestFlight and Play internal track with passkeys and Sync API v2."
- "[done] 2026-09-08 · Feature freeze · Offline cache and design system in; push rework has a two-week exception."
- "[current] 2026-09-22 · Release candidate 4.0 · Submitted to App Store and Google Play."
- "[next] 2026-09-23 · Phased rollout starts · 1% on both stores."
- "[next] 2026-09-29 · 4.0 GA · 100% of users on both stores."
```
## How 4.0 ships
Both stores use their native staged-release controls. Each stage holds until the crash-free sessions gate passes; a failed gate halts the rollout at the current share.
```rollout
strategy: rolling
stages:
- "[next] 1% · Smoke · 24h — crash-free sessions ≥ 99.5%"
- "[next] 10% · Canary · 48h — crash-free sessions ≥ 99.5% and order sync errors < 0.1%"
- "[next] 50% · Half · 48h — no P1 in the release channel"
- "[next] 100% · GA"
rollback: Halt the staged release in App Store Connect and Play Console; users on 4.0 get a 4.0.1 hotfix, not a downgrade.
```