Optional
Leaderboard
The fifty learners with the most XP who have not opted out.
What this is, exactly
Your progress document lives in your browser and you can edit it. The server re-derives the four figures shown here from that document rather than trusting a summary the browser asserted — which raises the effort a little and proves nothing, because the document itself is yours.
Building defences that do not hold would be worse than saying this. So: treat it as motivation if it motivates you, and ignore it entirely if it does not. The number that means something is on your dashboard, and even that is only a fact about your answers to these questions.
The same formula runs in your browser (mastery() in store.js) and on
the server, because the leaderboard has to order by it. Two implementations of one
formula is exactly how two systems come to disagree, so: rounding is half-up in both, the
denominator has one source — the server counts the chapters it serves rather
than keeping its own configured number — and tools/doctor.mjs fails the build if
anything in api/ hard-codes a chapter count. That drift is a documented failure in
the system this platform was modelled on; it is fixed here by removing the second source, not
by keeping them in step by hand.