Exercise scoring and quiz state management
Created by: jedmund
Summary
- Exercise redesign: two-column layout with recall context, scoring, progress dots, completion screen with score ring and try again
- Wrong answers advance the prompt instead of looping indefinitely
- QuizState extracted from SplitQuizView into registry-managed observable
- ExerciseStateRegistry renamed to ActivityStateRegistry, now manages both exercise and quiz state
- Shared ProgressDotsView component replaces inline dot implementations
- Exercise copy updated for lesson 1 (titles, context paragraphs, show_labels)
Stacked on #5.
Test plan
-
Complete an exercise, verify score ring and headline match performance -
Wrong answer advances to next prompt (not infinite retry) -
Try Again resets and reshuffles prompts -
Quiz renders questions, tracks answers, shows explanation and results -
Progress dots update correctly for both exercises and quizzes