Hybrid scoring locus, item bank, and immutable item versions
Status: accepted
Three coupled assessment-integrity decisions, driven by emergent’s offline-first delivery and its research goals.
Scoring locus — hybrid by stakes
Section titled “Scoring locus — hybrid by stakes”Response processing runs client-side in the headless core for formative/practice
assessments (works offline; scoring keys ship in the synced payload) and
server-authoritative for summative/secure assessments (keys withheld; the client
captures and submits the response only). A per-assessment scoring_policy
(client | server | server-rescore) selects the behaviour.
Why: always-server breaks the “fast local reads for active learning” promise in the sync topology; always-client exposes correct answers in PGlite for high-stakes work. The split keeps offline practice instant while protecting secure attempts.
Item bank — items are first-class
Section titled “Item bank — items are first-class”A new first-class assessment_item (QTI assessmentItem) replaces items embedded in
the test payload. Items are reusable, independently identified, and standalone-
deliverable (drills, CAT) as well as referencable by an Assessment Test.
Why: embedding items in the test blob blocks reuse, makes CAT impossible (no item pool), and denies item statistics a stable identity — directly defeating the research goal. It also diverges from QTI’s own resource model, where tests reference items.
Immutable published versions
Section titled “Immutable published versions”Item drafts are mutable; publishing freezes an immutable assessment_item_version.
Attempts and item statistics bind to a specific version; editing a published item
creates a new version. Mirrors the existing course_material_version pattern.
Why: editing an item in place silently corrupts historical attempts and any psychometrics keyed to it. Version binding keeps attempt history and research data sound.
Consequences
Section titled “Consequences”- New tables
assessment_itemandassessment_item_version;assessment_attemptand statistics reference an item version id.assessment_definition(the Test) references items rather than embedding them. assessment_definitionneeds ascoring_policy; secure attempts require a key-withholding path in sync (keys excluded from the client-facing shape).