/test-prep — four standardized tests, each modelled on its real published structure rather than on a generic quiz engine.
| test | route | delivery | scoring |
|---|---|---|---|
| Digital SAT | /test-prep/digital-sat | adaptive, two-stage by module | 200–800 per section → 400–1600 |
| ACT (Enhanced) | /test-prep/act | linear — everyone sees the same form | English/Math/Reading averaged into a composite; Science optional, reported separately |
| PSAT/NMSQT | /test-prep/psat | adaptive | Reading & Writing, Math |
| CAASPP (California) | /test-prep/caaspp | — | ELA, Math, CAST Science |
For the Digital SAT it is real multistage adaptivity: Module 1 performance routes you to an easier or harder Module 2, exactly as the live test does, and the harder route is the one that can reach the top of the scale. The ACT is deliberately not adaptive, because the real one is not.
/test-prep/[test]) — sectional practice, domain-by-domain/test-prep/[test]/full) — the whole test, timed, including the scheduled break(the SAT's is 10 minutes, after Reading & Writing)
Scores are reported on each test's real scale, with a standard error of measurement — ±40 on an SAT total. Reporting a single number without the band would imply a precision the instrument does not have.
It is a config-and-content job, not an engineering one: add an entry to lib/testprep/registry.js and author its item bank. sections, domains, itemTypes, scoreScale and adaptive drive the engine. No new engine code.
This is the thing to understand about Test Prep. An attempt draws a fresh form from a fixed authored item pool. When a section's pool is barely larger than one attempt needs, a learner sitting the test twice sees mostly the same items — and the score stops meaning anything.
The admin panel has a whole tab for this. See 20 · The admin backend → Test Prep. Check bank depth before promoting a test, and treat a thin pool as a content bug rather than a nice-to-have.
Every domain maps to the classes that teach it (lib/testprep/domainLessons.js), so a missed question routes back into the curriculum rather than into a dead end. This mapping is real and is one of the few "adaptive" claims about the product that is safe to make.