From 4fc149b8cca5c9af34359d31e470192001680244 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 11 Sep 2026 23:09:32 +0200 Subject: [PATCH] fix: exam mode's rail is numbers, as a real paper's is MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Study mode reveals each stem in the rail once you have reached it, which is right there — it is how you find the one you want to go back to. Exam mode inherited it, and it should not have: a paper's question-status rail says which items are answered and which are marked, and no more. Reading back the stems of what you have sat, or ahead to what is coming, is not something the exam being rehearsed would allow. So in exam mode no row shows text, including the one you are on, and the numbers are squared off rather than circled to match. Covered by a test, because this is an integrity rule rather than styling and would come back the next time the two modes shared a component. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN --- frontend/src/pages/QuizPage.jsx | 8 ++++++-- frontend/src/pages/QuizPage.test.jsx | 20 ++++++++++++++++++++ frontend/src/pages/QuizPlayer.css | 12 ++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/QuizPage.jsx b/frontend/src/pages/QuizPage.jsx index f74c7be..2551338 100644 --- a/frontend/src/pages/QuizPage.jsx +++ b/frontend/src/pages/QuizPage.jsx @@ -1172,11 +1172,15 @@ const timerStarted = timeLeft !== null const marked = favorites.includes(q.id) // Only questions the learner has reached show their text. Previewing one // they have not opened would give away the case before they read it. - const seen = seenIndexes.has(i) + // + // In exam mode none of them do. A real paper's status rail is a column of + // numbers, and reading the stems of the questions still to come is not + // something the exam being rehearsed would allow. + const seen = !isStudy ? false : seenIndexes.has(i) const excerpt = seen ? questionStem(q).replace(/\s+/g, ' ').trim() : '' return (