You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Publish exercise nodes of authored QTI by packaging the stored item XML into a QTI/IMS content package, rather than rebuilding it from structured fields.
Complexity: High Target branch: unstable
Context
Today QTI is chosen only when a node has a free_response question; QTIExerciseGenerator (contentcuration/contentcuration/utils/assessment/qti/archive.py) builds item XML from structured fields and writes imsmanifest.xml + the zip.
Native QTI items already hold their full XML in raw_data.
Items reference media; dependencies must be collected from the XML (existing LocalSrcPath / get_file_dependencies mechanics).
The Change
Route nodes whose items are all QTI (no perseus_question) to QTI packaging.
Architecture decided with the maintainer across an iterative session: blanket QTI type with the item XML in raw_data; XSD-authoritative validation across all sources; a legacy→QTI global migration with an API-layer dual-read; ricecooker upload delegating to the AssessmentItem serializer; and a Perseus custom-interaction contract confirmed against the QTI 3.0 specification. Claude mapped the existing publish/validation/ricecooker code, proposed the breakdown, and drafted each issue; the maintainer steered every decision and reviewed throughout.
Overview
Publish exercise nodes of authored QTI by packaging the stored item XML into a QTI/IMS content package, rather than rebuilding it from structured fields.
Complexity: High
Target branch: unstable
Context
free_responsequestion;QTIExerciseGenerator(contentcuration/contentcuration/utils/assessment/qti/archive.py) builds item XML from structured fields and writesimsmanifest.xml+ the zip.raw_data.LocalSrcPath/get_file_dependenciesmechanics).The Change
perseus_question) to QTI packaging.Acceptance Criteria
raw_dataReferences
contentcuration/contentcuration/utils/publish.pycontentcuration/contentcuration/utils/assessment/qti/archive.pyAI usage