Skip to content

Card detail is a pushed screen where the design has a sheet — and the keepsake line never renders #385

Description

@maximsan

From Audit E — rows 26–33, the whole of its §4.

The design has no card-detail screen. A card opens as a bottom sheet over the Cards tab, so the learner never leaves the grid (CardSheet, screens.jsx:2458). The app pushes a route under a bare, title-less AppBar().

And the keepsake line never renders. CoffeeCardModel.fact is assembled (content_assembly.dart:106) and documented in the model as "the keepsake line the reward carries under its summary" — a grep finds it drawn only in the visual-guide sheet. The one line that makes a collectible worth keeping is parsed and dropped.

What ships

Row
26 The sheet, through showAppSheet — the app's one sheet primitive, which a guard test already requires every sheet to use
27 The FACT block: the smallcaps label over the fact, in the display face at the heading step
30 TriedSeal on the header when the card's challenge is done — the state is already modelled (card_stamp_section.dart)
31 The category line goes. The design's header prints no tag under the title
32 The hardcoded path goes. The tile navigates nowhere at all now — it raises a sheet, which is the row's complaint answered rather than its letter
33 The title leaves headlineSmall at w700 for the display face — see the divergence below

The route survives. #171 scopes its universal links to "the card route only", so the deep link keeps its target — it lands on the Cards tab with the sheet already raised, rather than on a screen of its own.

One deliberate divergence — the title's step

The design sets this sheet's title at --t-display. Its sibling sheets do not: the gate, the challenge and the duel all use --t-title, and the app's one sheet primitive draws every title at that shared step. The card keeps the shared step. Forking showAppSheet for a single caller would trade a rule the app enforces for one step of type on one screen. The face is right either way — the fault row 33 names, headlineSmall at w700, is gone.

What defers, and why

The artwork (row 28). CARD_ART is 37 per-kind drawings (screens.jsx:2312) with no counterpart in lib/. The tile needs that same family, and #434 already holds the question open beside the one #87 asks of the grove. One ticket draws them or none does; building half here would only fork the answer.

The meta rows (row 29). CoffeeCardModel carries no meta and the extractor emits none, so this is a content-pipeline gap before it is a layout one — as Audit E says of it.

Acceptance criteria

  • A card opens as a sheet over the grid and closes back onto it unmoved; the pushed screen and its bare AppBar are gone, and the deep-link route still resolves — over the tab's own grid, and only for a card the learner has earned. Seven widget tests, including the two review found: a link to an unearned card opens nothing, and the link's page paints nothing so the grid under the sheet is the tab's own
  • The keepsake line renders under the summary, FACT above it, and the title sets in the display face with no category line beneath — the last asserted inside the sheet, not by counting
  • A card whose challenge is done wears the tried seal, and cardChallengeTried answers that for both it and the stamp block below
  • flutter analyze, metrics gate, tests clean; changelog bullet — 2026 tests

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    design-parityCloses a finding in the app-vs-prototype divergence registerenhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions