Skip to content

The graded cards' two shared spacings: the verdict block's room per placement, and the gap above the button #594

Description

@maximsan

Two spacings on the graded cards where the app uses one token and the design sets its own value, found while porting the predict card in #587 and left out of it because each reaches every card kind.

Rewritten 11 September 2026 at triage: every design call of the verdict block was compared against every app host, and the inventory below replaces the one first filed.

Corrected 21 September 2026: the two dictionary rows were the wrong way round. prototype/dictionary-extras.jsx sets marginTop={18} on the vocab drill and prototype/dictionary.jsx sets marginTop={14} on a term entry's check, not the other way about.

The verdict block's room

The design's block takes marginTop = 22 as its default and four callers override it. The app spaces it in each host's own SizedBox or Padding, with no host at the design's value.

Host Design App today
concept fill, mcq, true/false, flavor, multi, match, slider, predict, decision, recall's first block 22 16 (concept 24)
sequence 22 12
bagpick 20 16
tastefix 20 16
recall's payoff (no mascot, rule on top) 18 16
dictionary vocab quiz 18 16
dictionary self-check 14 12

VerdictPlacement already tells the block apart per host (card, conversational, held guess, opening guess, reference), so the room above it belongs there rather than in twelve hosts. Two placements hold hosts at different values — bagpick and tastefix share card with the 22 cards, and the two dictionary hosts share reference — so the enum grows, or the picker's copy carries the value the way it carries the placement.

The gap above a card's button

The shell pads the button AppSpacing.xl (32) off the content for every kind. The design sets 32 on every card but three: predict and decision paddingTop: 30, recall paddingTop: 26. All three go through the shell; decision and recall through the graded picker.

Agent Brief

This was generated by AI during triage.

Category: enhancement
Summary: The verdict block's room comes from its placement, at the design's value per host; the shell's button gap takes a per-card value for predict, decision and recall.

Current behavior:
Twelve hosts each set their own spacer above AnswerFeedback, none at the design's value (table above). CardShell hard-codes 32 above the button for every kind.

Desired behavior:

  • The room above the verdict block is set in one place, keyed by placement, and every host in the table lands on its design value. Hosts stop carrying a spacer of their own.
  • The shell takes the button gap as a value with a default of 32. Predict and decision pass 30, recall 26; every other kind is unchanged.
  • The mini-games' values (bagpick 20, tastefix 20) and the dictionary's (vocab quiz 18, self-check 14) are quoted from the design as OffTokens, not folded into a lesson-card constant.

Key interfaces:

  • VerdictPlacement — gains the room above the block, or is split where one placement now holds two values (card for the 22 cards against the 20 mini-games; reference for the vocab quiz against the self-check).
  • PickerCopy — the picker-drawn kinds (mcq, true/false, flavor, recall, decision, tastefix) already pass their placement through it; the button gap for decision and recall travels the same way.
  • CardShell — a button-gap parameter defaulting to AppSpacing.xl.

Acceptance criteria:

  • The verdict block sits at the table's value on every host, from the placement rather than the host, with a unit test that pins the number per placement — verdict_placement_test.dart pins the number per placement, and rendered-box tests measure mcq, multi, concept, bagpick, predict and sequence from the last thing drawn above the block
  • Predict and decision open their button block at 30 and recall at 26, through the shell, with the other kinds unchanged at 32 (widget test on one of each) — content_card_view_test.dart, five kinds
  • dart format, flutter analyze, the metrics gate and the suite pass, with a changelog bullet and a screenshot of the predict card after its verdict — all four gates green locally and in CI, the bullet is under Unreleased, and the card was driven to its held guess on a simulator and read against the design

Out of scope:

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