Skip to content

migrate interval trainer, new app icon

jedmund requested to merge jedmund/exercise-architecture into main

Created by: jedmund

Summary

  • Rebuilds Interval Trainer on the shared exercise architecture from #26 — ExerciseState + ScoringOverlay + PickerWidget, matching Interval Classifier's visual language (glass card, material picker, centered feedback with inline bold answer + semitones + note labels, capsule Next).
  • First exercise with procedural prompt generation. ExerciseState handled it unchanged, confirming the state model is generation-agnostic. Streak-based interval unlocks preserved (silent, no toast); that bookkeeping stays local to the exercise.
  • PickerWidget grid columns now adaptive (2 / 3 / 4 based on choice count) so the picker stays readable as intervals unlock.
  • IntervalTrainerConfig gained a context field that was already in lesson JSON but being silently dropped.
  • New app icon (waveform on cream). Dark/tinted slots registered but unfilled, fall back to default. Build number bumped to 3.

Test plan

  • Standalone Interval Trainer: Exercises grid → tap → listen, pick, advance. After 3 correct, new intervals silently appear in the picker. Complete all 12, retry from completion resets dots.
  • Lesson with Interval Trainer (music-theory week 1, 3-ex2): context text renders above card; progress survives navigation away and back; completion records an attempt and allows scrolling past the gate.
  • App icon renders in Springboard and passes App Store Connect upload.

Merge request reports

Loading