What the app does not have yet. Scope from prototype/v1 Readiness Audit.html: v1 is ~32 of the prototype's ~55 screens .
Siblings: design → #365 · content → #369 . no ticket means exactly that — the backlog, visible instead of implied.
Dictionary drills
Foundations purchase
Paywall — Plus gate sheet and the paywall pitch #89 (gate sheet and counted pitch shipped, PR feat(monetization): the Plus gate — one sheet, a derived pitch, one way out #449 ) · onboarding paywall — Paywall screen at the end of the onboarding flow #242 (PR The intro ends on the Plus offer, and a purchase is celebrated #579 ) · entitlement seam — Entitlement is a seam: swap monetization models without rewriting access logic #176 (PR feat: the store names the arm, and the SKU list becomes config #568 : the store names the arm, offeringFor says what it sells, and a guard test keeps the arm out of every access check)
Content gate — The content gate: lessons lock by tier, and Today sells the locked lesson #215 · daily allowance — Daily allowance enforcement: two activities a day on free #216 · dictionary depth by tier — Dictionary depth by tier: short for free, full for Plus, reference invisible #217
Purchase welcome done — every sale lands on it: the onboarding offer (d5a07d03) and now the in-app gate sheet too, wired by A purchase from the Plus gate sheet lands on the Plus welcome, and Back to learning returns to the lock #576 in PR #598 (6a5082e), where Back to learning returns to the screen the lock was raised on. The box stays open for Purchases below · Purchases (restore/manage) — the Settings screen is a frame with a placeholder; Make the purchase real, through RevenueCat #421 makes the purchase real and unblocks it. Design parity 8: the lesson player goes immersive, and Settings gets its sections #395 built the frame and is closed
Studio and the grove
Studio — both halves are done : the grove's door and chooser shipped in PR The Studio door and the grove chooser #451 (054fa6b), closing The Studio door and the grove chooser #140 , and the Roasty wardrobe in PR #590 (a0a029af), closing Roasty Studio: dress the mascot, and every screen shows him wearing it #367 . Four axes over a live preview, worn on every screen through one ambient scope, both doors behind the entitlement in the router — the wardrobe's route was not gated until that PR, which a deep link reached. Studio: the grove's three species, four lights, and the tree they compose over #135 , the spec for both halves, closed 3 Sep with the grove delivered.
Tree motion — The coffee tree's motion: all five pieces ship, single-stage only #88 decided (all five pieces ship, single-stage crossfade only; ADR-0011) · grove illustrations — The grove's twenty missing illustrations: who draws them, and do they block v1? #87 closed, none owed (species are Transform.scale + ColorFilter.matrix over the one Arabica set) · mascot poses — Four mascot poses, three of them unwired: does Roasty react in a lesson or not? #219 shipped · dress the mascot — Roasty Studio: dress the mascot, and every screen shows him wearing it #367 shipped in PR #590
The Coffee Tree's own screen — The Coffee Tree's own screen: stage name, ladder and the sway #420 . Shipped: tapping the Profile tree opens it, and the sway was ported into CoffeeTree with it.
Rewards and completion
Module Reward — The module reward is the back of the flip, not a screen after it #230 decided and shipped . One route: Roasty beat, celebration face, then the whole screen turns over to the card. ModuleRewardCardScreen does not ship — its route is unreachable, and both "two phases over two routes" and Audit C's "four beats over two routes" counted a second route that never runs (ADR-0017). Built by Module summary lost the 3D flip, the tree and the reward card #384 .
Completion-moment stats — Completion-moment stats: longest streak and the Module Reward count, once derivable #149
Mini-game complete — shipped as DrillResultsView (score, Roasty reaction, encouragement at every band, Play again / Done); verified by Mini-games: seven playable formats, the streak they feed, and the practice screen they replace #102 's closing audit
Module Coffee Challenge — The module ending never offers its Coffee Challenge #464 shipped in PR #499 (1a4a7a1). The module ending's reward face offers the challenge above the exit CTA while it is live — every lesson done, and the brew neither in play nor already logged. It reuses Coffee Challenges land: the bank, the lifecycle, and an active brew on Today #143 's gate rather than re-deriving eligibility. There is no Not now : the design gives the row one affordance, and leaving the screen is the not-now, because the challenge waits on the Path either way.
Settings and help
App Guide — Rebuild the guide layer: the four-step Today tour, and App Guide in Settings #341 done : the screen and its Replay row shipped with Tour: the missing controls — Skip, end on tab change, App Guide in Settings #338 , and the tour it replays was rebuilt by Rebuild the guide layer: the four-step Today tour, and App Guide in Settings #341 in PR Rebuild the guide layer: the four-step Today tour, drawn by hand #538 — a travelling frame drawn in tree, with showcaseview dropped. · streak surfaces — Streak surfaces: screen, week strip, freeze token and the system share sheet #169 (all four surfaces shipped via Streak screen: the route, the Profile tap-through, and the freeze status line #232 –Share: the presenter seam and the fixed-size streak card through the system sheet #237 ; closed 3 Sep)
Help and support — Help and support: the FAQ that answers for this app, and the way to reach a human #531 (PR feat: Help answers its four questions, and the fine print gets one home #591 ) · About — About: acknowledgements and the open-source licenses #532 (its fine-print links are Terms and Privacy have no destination, and the paywall now needs them #448 , its title The About page is titled About, where the design titles it BrewPath #527 ) · Account and sync — Sync and the Account and sync screen: does it ship in v1? #575 , ruled 11 Sep: sync defers to v2 and the row is removed , so nothing is drawn for what does not ship. Sync scope and the persisted data model #14 's CloudKit commitment is superseded by that ruling. The snapshot merge stays built and proven, unused until a transport exists
Daily reminder — The daily reminder actually fires: scheduling behind the two Settings rows #443 (ruled 8 Sep: not in the v1 launch, built next ; ready-for-agent, scope and copy on the ticket). The two Settings rows are hidden until it ships — PR #559 , 9 Sep
Core-loop mechanics
Sequence and slider renderers — The last two formats play: calibrate and sequence #124 , Spec: slider and sequence render — two real widgets, four games, and the first two-stage commit (#124) #333 — done , shipped in PR The last two formats play: calibrate and sequence #417 (1b93092). Every kind of the card union now draws, and all 13 mini-games play.
Mini-game formats and the streak — Mini-games: seven playable formats, the streak they feed, and the practice screen they replace #102 · format gating — Two free, five locked in place: format gating in the mini-game catalog #125 (both closed 3 Sep; the closing audit verified every ruling on main — what is left lives at Prototype: the free tier is three lessons, not all of Module 1 #225 and the purchase line Make the purchase real, through RevenueCat #421 /Paywall screen at the end of the onboarding flow #242 )
Flavor / bagpick / tastefix — Spec: flavor, bagpick and tastefix render — three kinds, five games, and the free tier's missing 7 rounds (#123) #302 , Flavor plays: Name the flavor notes, and the free tier's Name the origin #324 , Tastefix plays: Fix the cup, and Fix the shot #325 , Bagpick plays: Read the green bean #326 , Fix the cup: the symptoms are a line of text where the design draws reacting chips #332 (shipped — Fix the cup: the symptoms are a line of text where the design draws reacting chips #332 gave the cup its chips and its reaction) · left: cherry section — The cherry cross-section becomes interactive, in both of its hosts #323
Snapshot migration — Progress moves onto the progress snapshot #115 shipped in PR #529 (progress writes and reads both on the snapshot) · The old store is dropped, and the restart is proven #116 shipped in PR #547 (the three tables and total_xp dropped at schema v13; the smoke walk plays m1l1, relaunches and reads back the completion, its points and its card, and CI's smoke (simulator) job runs it) · (Drift v6: destructive rebuild onto the snapshot #79 folded into them) · m1l1 end to end — m1l1 plays and persists end to end #82 and Slice 1 — m1l1 plays and persists: extractor, ContentCard union, five renderers, snapshot rebuild #75 have every criterion met and are the owner's to close
Linkify glossary terms — Glossary terms in lesson copy are tappable links to the term peek sheet #99
Universal links — the app half is done : a shared /card/<id> opens the app on that card, an unearned one shows its face and withholds its payload (ADR-0015), and a link survives onboarding instead of being lost at Welcome — shipped in PR #483 (1b5112d). Universal links: the dedicated subdomain, the AASA file, and the card route #171 stays open for the one part no agent can do: DNS and the AASA file on brewpath.maximsan.dev, without which no link opens anything. What is also left under this line is sharing a collectible — Sharing a collectible: the affordance that mints a /card link #477 , net-new design, and the only thing that can mint a /card link.
Privacy manifest — PrivacyInfo.xcprivacy: the privacy manifest the store now requires #166 — done , shipped in PR The privacy manifest the store requires #474 . PrivacyInfo.xcprivacy declares no tracking and no collected data, plus the one required-reason API SQLite actually uses; iOS build now fails if it stops reaching Runner.app. Left behind: four Google frameworks that ship no manifest of their own, which only an upload can judge — recorded against Launch telemetry: what ships on, what stays dark, and which events exist #165 , whose answer also decides whether the empty declaration stays true.
Launch telemetry — Launch telemetry: what ships on, what stays dark, and which events exist #165 · localization — BrewPath speaks several languages — the localization map #345 , Language is more than text: term matching, search, and the voice #346 , The translation step: from English master to a reviewed language folder #347 , Stale and missing translations: what the reader sees, and how the pipeline knows #348
Deferred to v2 — do not ticket
Atlas (10 screens) · Duel (13) · rewarded ads (3) · mood player (1) · the onboarding question flow (6) · the Courses catalogue. Ruled by the readiness audit; app.jsx gates Duel and the Store behind !isV1.
What the app does not have yet. Scope from
prototype/v1 Readiness Audit.html: v1 is ~32 of the prototype's ~55 screens.Siblings: design → #365 · content → #369.
no ticketmeans exactly that — the backlog, visible instead of implied.Dictionary drills
Flashcards — Dictionary: Flashcards over saved terms #97·Guess the term + setup — Dictionary: the Vocab game, and whether reference-only terms are fair quiz material #98·Term of the Day — Dictionary: Term-of-Day, and the second frozen clock it unfreezes #96(all three shipped; Term of the Day landed in PR Dictionary: Term of the Day, and the clock it unfreezes #484)Foundations purchase
Plus gate sheet and the paywall pitch #89(gate sheet and counted pitch shipped, PR feat(monetization): the Plus gate — one sheet, a derived pitch, one way out #449) ·onboarding paywall — Paywall screen at the end of the onboarding flow #242(PR The intro ends on the Plus offer, and a purchase is celebrated #579) ·entitlement seam — Entitlement is a seam: swap monetization models without rewriting access logic #176(PR feat: the store names the arm, and the SKU list becomes config #568: the store names the arm,offeringForsays what it sells, and a guard test keeps the arm out of every access check)Purchase welcomedone — every sale lands on it: the onboarding offer (d5a07d03) and now the in-app gate sheet too, wired by A purchase from the Plus gate sheet lands on the Plus welcome, and Back to learning returns to the lock #576 in PR #598 (6a5082e), where Back to learning returns to the screen the lock was raised on. The box stays open for Purchases below · Purchases (restore/manage) — the Settings screen is a frame with a placeholder; Make the purchase real, through RevenueCat #421 makes the purchase real and unblocks it. Design parity 8: the lesson player goes immersive, and Settings gets its sections #395 built the frame and is closedStudio and the grove
054fa6b), closing The Studio door and the grove chooser #140, and the Roasty wardrobe in PR #590 (a0a029af), closing Roasty Studio: dress the mascot, and every screen shows him wearing it #367. Four axes over a live preview, worn on every screen through one ambient scope, both doors behind the entitlement in the router — the wardrobe's route was not gated until that PR, which a deep link reached. Studio: the grove's three species, four lights, and the tree they compose over #135, the spec for both halves, closed 3 Sep with the grove delivered.The coffee tree's motion: all five pieces ship, single-stage only #88decided (all five pieces ship, single-stage crossfade only; ADR-0011) · grove illustrations —The grove's twenty missing illustrations: who draws them, and do they block v1? #87closed, none owed (species areTransform.scale+ColorFilter.matrixover the one Arabica set) · mascot poses —Four mascot poses, three of them unwired: does Roasty react in a lesson or not? #219shipped · dress the mascot —Roasty Studio: dress the mascot, and every screen shows him wearing it #367shipped in PR #590CoffeeTreewith it.Rewards and completion
The module reward is the back of the flip, not a screen after it #230decided and shipped. One route: Roasty beat, celebration face, then the whole screen turns over to the card.ModuleRewardCardScreendoes not ship — its route is unreachable, and both "two phases over two routes" and Audit C's "four beats over two routes" counted a second route that never runs (ADR-0017). Built by Module summary lost the 3D flip, the tree and the reward card #384.DrillResultsView(score, Roasty reaction, encouragement at every band, Play again / Done); verified by Mini-games: seven playable formats, the streak they feed, and the practice screen they replace #102's closing auditThe module ending never offers its Coffee Challenge #464shipped in PR #499 (1a4a7a1). The module ending's reward face offers the challenge above the exit CTA while it is live — every lesson done, and the brew neither in play nor already logged. It reuses Coffee Challenges land: the bank, the lifecycle, and an active brew on Today #143's gate rather than re-deriving eligibility. There is no Not now: the design gives the row one affordance, and leaving the screen is the not-now, because the challenge waits on the Path either way.Settings and help
App Guide — Rebuild the guide layer: the four-step Today tour, and App Guide in Settings #341done: the screen and its Replay row shipped with Tour: the missing controls — Skip, end on tab change, App Guide in Settings #338, and the tour it replays was rebuilt by Rebuild the guide layer: the four-step Today tour, and App Guide in Settings #341 in PR Rebuild the guide layer: the four-step Today tour, drawn by hand #538 — a travelling frame drawn in tree, withshowcaseviewdropped. ·streak surfaces — Streak surfaces: screen, week strip, freeze token and the system share sheet #169(all four surfaces shipped via Streak screen: the route, the Profile tap-through, and the freeze status line #232–Share: the presenter seam and the fixed-size streak card through the system sheet #237; closed 3 Sep)Help and support — Help and support: the FAQ that answers for this app, and the way to reach a human #531(PR feat: Help answers its four questions, and the fine print gets one home #591) · About — About: acknowledgements and the open-source licenses #532 (its fine-print links are Terms and Privacy have no destination, and the paywall now needs them #448, its title The About page is titled About, where the design titles it BrewPath #527) · Account and sync — Sync and the Account and sync screen: does it ship in v1? #575, ruled 11 Sep: sync defers to v2 and the row is removed, so nothing is drawn for what does not ship. Sync scope and the persisted data model #14's CloudKit commitment is superseded by that ruling. The snapshot merge stays built and proven, unused until a transport existsready-for-agent, scope and copy on the ticket). The two Settings rows are hidden until it ships — PR #559, 9 SepCore-loop mechanics
1b93092). Every kind of the card union now draws, and all 13 mini-games play.Mini-game formats and the streak — Mini-games: seven playable formats, the streak they feed, and the practice screen they replace #102·format gating — Two free, five locked in place: format gating in the mini-game catalog #125(both closed 3 Sep; the closing audit verified every ruling on main — what is left lives at Prototype: the free tier is three lessons, not all of Module 1 #225 and the purchase line Make the purchase real, through RevenueCat #421/Paywall screen at the end of the onboarding flow #242)Spec: flavor, bagpick and tastefix render — three kinds, five games, and the free tier's missing 7 rounds (#123) #302,Flavor plays: Name the flavor notes, and the free tier's Name the origin #324,Tastefix plays: Fix the cup, and Fix the shot #325,Bagpick plays: Read the green bean #326,Fix the cup: the symptoms are a line of text where the design draws reacting chips #332(shipped — Fix the cup: the symptoms are a line of text where the design draws reacting chips #332 gave the cup its chips and its reaction) · left: cherry section — The cherry cross-section becomes interactive, in both of its hosts #323Progress moves onto the progress snapshot #115shipped in PR #529 (progress writes and reads both on the snapshot) ·The old store is dropped, and the restart is proven #116shipped in PR #547 (the three tables andtotal_xpdropped at schema v13; the smoke walk plays m1l1, relaunches and reads back the completion, its points and its card, and CI'ssmoke (simulator)job runs it) · (Drift v6: destructive rebuild onto the snapshot #79folded into them) · m1l1 end to end — m1l1 plays and persists end to end #82 and Slice 1 — m1l1 plays and persists: extractor, ContentCard union, five renderers, snapshot rebuild #75 have every criterion met and are the owner's to close/card/<id>opens the app on that card, an unearned one shows its face and withholds its payload (ADR-0015), and a link survives onboarding instead of being lost at Welcome — shipped in PR #483 (1b5112d). Universal links: the dedicated subdomain, the AASA file, and the card route #171 stays open for the one part no agent can do: DNS and the AASA file onbrewpath.maximsan.dev, without which no link opens anything. What is also left under this line is sharing a collectible — Sharing a collectible: the affordance that mints a /card link #477, net-new design, and the only thing that can mint a/cardlink.PrivacyInfo.xcprivacydeclares no tracking and no collected data, plus the one required-reason API SQLite actually uses;iOS buildnow fails if it stops reachingRunner.app. Left behind: four Google frameworks that ship no manifest of their own, which only an upload can judge — recorded against Launch telemetry: what ships on, what stays dark, and which events exist #165, whose answer also decides whether the empty declaration stays true.Deferred to v2 — do not ticket
Atlas (10 screens) · Duel (13) · rewarded ads (3) · mood player (1) · the onboarding question flow (6) · the Courses catalogue. Ruled by the readiness audit;
app.jsxgates Duel and the Store behind!isV1.