Skip to content

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.

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.

  • Drop the authoring_payload blob and the native default; add the test → section → Item-Version-reference structure. (Extended by ADR-0020 to the full recursive assessmentTest shape; 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 submitNativeAttempt with 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.