Round Mode: deleting the score
The biggest change this session was subtraction. Round Mode had points, a running total, and a combo multiplier. All three are gone.
The argument against them was simple once I said it out loud. The headline number was the run time, and the fastest route through a round is to answer everything wrong immediately. So the number leading the results screen rewarded exactly the behaviour the app exists to catch. Points and combos were no better: computed from how fast and how often you were right, then displayed next to how fast and how often you were right.
What replaced them is a rating that weights every answer by how little help it had. Warm up counts once, Round 1 three times, Round 2 five times, Round 3 six times, and explaining a concept in your own words in Round 4 is worth 150. Harder questions weigh more. Speed is not in the formula at all, and two tests pin that down: identical answers at wildly different speeds produce an identical rating, and fast-and-wrong scores below slow-and-right. It shows as “+615 of 2,120”, because a bare number says nothing when a short session and a long one have different ceilings.
That is the thesis of the app as one number. The rating only goes up when the hint comes off.
Round 3 lost its distractors too. The chip tray used to include wrong words, making it a hunt for what to avoid rather than the assembly of a right sentence. Now the tray holds the sentence’s own pieces. Grading there stopped being pedantic about list order, with seven tests, four of which are cases that must still fail: “sugar traps light” for “light traps sugar”, a scrambled non-list, a missing chip, a changed verb.
Round 4 can no longer be skipped. There was a “stop here and see the results” button sitting immediately before the only unscaffolded moment in the session, which is exactly where bailing is most tempting and least useful.
The interface stopped hiding itself. The header used to empty during a round, on the theory that peripheral chrome competes with retrieval. True for one person at a desk, wrong for a room watching one screen. Locking the page to the viewport exposed two bugs, including a verdict that clipped off the bottom on short windows. The one line telling you the right answer was the line you could not read.
The run clock was a good bug. It measured wall-clock time since the run started, so it counted loading and between-round screens and disagreed with the final reported time. The header once read 3:20 against a reported 1:08. It is now built from the same splits the results use.
Trimmed the cold-open prompt after finding it asked the model to write explanation lines nobody reads. A/B against the real proxy across 10 topics cut median completion tokens from 397 to 266, a 33 percent reduction, on the one call every student waits on.
One method note worth keeping: I overrode setTimeout in the test harness to freeze auto-advance so I could screenshot a verdict, and it swallowed the harness’s own sleeps. The script hung and I captured the wrong state. Capture the real function before replacing it.
Closing an item from the last log: the assembled round is no longer unverified. The full ladder has been played end to end, in dev and against a production build.
Still unverified: the green “strong” band exists in tests but has never been seen in a browser, because my test driver answers option 1 every time and always lands in the middle band. That one needs a human who actually knows the answers.
Built with Claude Code. AI-assisted commits carry Co-Authored-By trailers.
Comments 0
No comments yet. Be the first!
Sign in to join the conversation.