You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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
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.
The verdict block's room
The design's block takes
marginTop = 22as its default and four callers override it. The app spaces it in each host's ownSizedBoxorPadding, with no host at the design's value.VerdictPlacementalready 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 sharecardwith the 22 cards, and the two dictionary hosts sharereference— 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 decisionpaddingTop: 30, recallpaddingTop: 26. All three go through the shell; decision and recall through the graded picker.Agent Brief
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).CardShellhard-codes 32 above the button for every kind.Desired behavior:
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 (cardfor the 22 cards against the 20 mini-games;referencefor 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 toAppSpacing.xl.Acceptance criteria:
verdict_placement_test.dartpins the number per placement, and rendered-box tests measure mcq, multi, concept, bagpick, predict and sequence from the last thing drawn above the blockcontent_card_view_test.dart, five kindsdart 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 designOut of scope:
marginTop={20}), which is v2