Converge native assessment authoring onto QTI
Status: accepted
Amended-by: ADR-0020 (2026-06-15) — the convergence-onto-QTI decision below stands, but the
initial flat single-part / single-section authoring shape it introduced is superseded by full
recursive assessmentTest authoring (arbitrarily nested parts/sections, per-level timing/selection,
conditional pre-conditions/branch-rules, test-level outcomes/processing). The flat itemRefs form is
deleted, not deprecated.
The pre-pivot “native” assessment shape still stands alongside the QTI Item Bank:
assessment_definition defaults authoring_standard to native, inlines content in an
authoring_payload blob, and never references an Item. This is the third disconnected
home for assessment content (with the Item Bank and the now-removed opaque qti3 kind,
ADR-0009) and contradicts CONTEXT.md, which already maps Assessment → QTI assessmentTest
and deprecates the native model for new work.
Decision
Section titled “Decision”Retire the native authoring standard. assessment_definition becomes the QTI
Assessment Test that references Item Versions through an ordered section
structure, rather than inlining content. assessment_attempt remains the Test Session
(ADR-0007) wrapping the item_sessions, and delivery moves to the headless runtime.
Human-graded items are re-founded on QTI items (no Response Processing + rubric), not
dropped — the evaluate→finalize lifecycle survives, attached to QTI items.
Consequences
Section titled “Consequences”- Drop the
authoring_payloadblob and thenativedefault; add the test → section → Item-Version-reference structure. (Extended by ADR-0020 to the full recursiveassessmentTestshape; the flat single-section form here is superseded.) - Wire
item_session.test_session_id(it exists but is currently never populated). - Replace the learner-web freetext draft/submit/evaluate/finalize placeholder UI and
submitNativeAttemptwith QTI delivery. - Teacher authoring becomes QTI item authoring (TipTap, ADR-0004) — a separate, larger effort.
- No learners or teachers exist yet, so the schema is reshaped in place (drop/recreate), with no data migration.