Skip to content

feat(lessons): a card names its format, and the ? explains how to play it (#550) - #565

Merged
maximsan merged 5 commits into
mainfrom
feat/card-cue
Sep 10, 2026
Merged

feat(lessons): a card names its format, and the ? explains how to play it (#550)#565
maximsan merged 5 commits into
mainfrom
feat/card-cue

Conversation

@maximsan

@maximsan maximsan commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Closes #550 — the ten kinds with help open on their cue, and the ? explains them.

Hazards

  • CardShell now reaches for a provider. The ? needs the bundled help bank, so CardCueRow holds a ConsumerWidget. Four existing test files gained a ProviderScope; one of them, the narrow-phone slider test, was failing on an error widget rather than layout.
  • AppTracking.smallcaps (0.14em) is new, so the cue can ask for the smallcaps rule on the support rung, which does not default to it. AppTracking.token was written and then deleted — count(0.06) landed on main mid-branch and the drawer uses that.
  • showAppSheet gained an eyebrow, because the design sets How to play over the drawer's title. One caller today; the design's other one is the duel's SHARE TO, unbuilt.
  • The concept card branches: the Complete the sentence cue only where the card has blanks, keeping its authored eyebrow otherwise — which is the design's own if (card.fill).

Registered rather than ported

Three, all in §11: the drawer ships without its per-kind icon well (marks exist for seven of ten kinds, and seven filled beside three empty is the fault #436 already ruled out); the cue line is taller than the design's, because Flutter cannot reproduce the button's margin: '-13px -8px' bleed without shrinking the 44 target to 28×18; and match's cue says drag to pair where the app's board only taps.

Off-token values

Two, each quoting the design: the drawer's gap: 11 between steps and its marginTop: 20 over them.

Checks

flutter analyze, dart format, the metrics gate, the comment cap and the changelog gate all clean; the full suite passes.

…y it (#550)

The ten kinds the design writes help for open on their cue in the accent, with a ? beside it that opens the how-to-play drawer on the bundled bank. The five kinds carrying an authored eyebrow are untouched.

CardCue's ten values are exactly the ten kinds with help, and its helpKey is the bank's key, so a ? over nothing is unrepresentable rather than guarded against. The concept card branches as the design does: the fill cue only where the card has blanks.

The cue sets smallcaps at the support rung and the drawer numbers its steps at 0.06em, neither of which the tracking axis could say, so it gains those two steps. The sheet primitive gains an eyebrow, because the design puts How to play above the drawer's title.

The drawer's per-kind icon well is not ported: marks exist for seven of the ten kinds, and seven filled wells beside three empty ones is the fault #436 already ruled out. Registered in the design's open items.
…mark that drifted right

AppTracking.token duplicated count(0.06), which landed on main while this branch was open; the drawer's step numbers use count and the duplicate is gone.

The mark sat at the card's trailing edge because the phrase took Expanded, where the design puts it 8px after the last letter. The cue also carries lineHeight: 1, its foot is the ladder's 12 rather than an off-token that equalled it, and the step stack opens at the design's 20.

Two divergences registered rather than left silent: the cue line is taller than the design's, because Flutter cannot reproduce the button's negative-margin bleed without shrinking the 44 target it exists to protect; and match's cue says drag to pair where the app's board only taps.

Also: three doc comments orphaned by deleting the old _cue consts, a test fake that stubbed one method while the other read the real bundle, and phrase assertions covering seven kinds of ten.
…troduced

The cue makes CardShell read a provider, and this file pumps MatchBoardView bare. It sits in test/widget/ rather than test/widget/features/lessons/, so the sweep that scoped the other three card tests missed it and CI caught it.
The match cue was recorded as a divergence to live with. It is not — the design's board drags and draws a line into each answer, and the app's does neither, so the cue is right and the board is the gap (#566). The missing icon well is #567, which draws the three marks that block it.

What is left in the table is the one with no action: the cue line is taller than the design's because Flutter cannot hit-test outside a parent box, so the 44 target wins.
# Conflicts:
#	lib/features/lessons/presentation/cards/concept_card_view.dart
#	lib/features/lessons/presentation/cards/multi_card_view.dart
#	lib/shared/theme/off_token.dart
#	test/widget/features/lessons/content_card_view_test.dart
@maximsan
maximsan merged commit 05b3d67 into main Sep 10, 2026
7 checks passed
@maximsan
maximsan deleted the feat/card-cue branch September 10, 2026 09:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cards never say what kind they are, and the ten with instructions never offer them

1 participant