per-question review on scored exercises
Created by: jedmund
Summary
- Show a per-question review on the end screen for the three scored interval exercises (Classifier, Trainer, Comparison) so users can see exactly what they picked vs. what was correct, not just how many dots went red.
- Group the three interval exercises first in the home-screen exercises grid so they sit together.
Details
PromptResult now carries two optional display strings (answer, correctAnswer). Each exercise fills them at record time: Classifier uses the category it already passes around, Trainer uses the long interval name it already renders, Comparison translates the A/B pick into the underlying interval's long name so the review reads "Minor 3rd -> Major 3rd" rather than "A -> B".
ScoringOverlay hides the progress dots once state.isComplete and renders a single-column review list between the score label and the Try Again button:
- 20pt colored dot with check/xmark (same tokens as
ProgressDotsView) -
Q{n}in monospaced digits - Correct rows: answer in primary
- Incorrect rows: wrong pick (secondary) -> correct (primary, semibold)
The review VStack is leading-aligned but only as wide as its content, so it sits centered in the card.
The three exercise cards keep their fixed 320pt height during play (Spacers rely on it) but switch to minHeight: 320, maxHeight: nil on completion so long runs (e.g. 16+ prompts) can grow vertically. Width stays at 520pt. Restored completions (empty results) render no review block but still show the score label and Try Again.
Test plan
-
Classifier standalone, 8-question mix: review shows Q1..Q8 with correct/incorrect rows and category names; dots are gone. -
Trainer standalone: review shows interval long names ("Major 3rd", "Perfect 4th"). -
Comparison standalone: review shows interval names, not "A"/"B". -
Long run (Classifier 3 octaves or Trainer 20 questions): card grows past 320pt on completion; width stays 520pt; card is 320pt during play. -
Lesson paths for all three exercises: review appears inside the lesson card too. -
Restored completion (re-enter a previously finished lesson): review block is empty but score + Try Again still render. -
Home grid: interval exercises appear first and together.