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
Build the reusable legacy→QTI conversion (structured single/multiple selection, input, true/false → <qti-assessment-item> XML) and serve it through the API layer (dual-read) so the frontend only ever receives QTI. The one-time global backfill is #11.
Complexity: High Target branch: unstable
Context
Legacy items store structured question/answers with legacy types; the existing pydantic models already generate QTI for choice + text-entry — the legacy-expressible set.
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
Build the reusable legacy→QTI conversion (structured single/multiple selection, input, true/false →
<qti-assessment-item>XML) and serve it through the API layer (dual-read) so the frontend only ever receives QTI. The one-time global backfill is #11.Complexity: High
Target branch: unstable
Context
question/answerswith legacy types; the existing pydantic models already generate QTI for choice + text-entry — the legacy-expressible set.The Change
<qti-assessment-item>XML from structured items.perseus_questionitems as raw Perseus — out of scope here; handled by mixed publishing (Browserify #8).Acceptance Criteria
<qti-assessment-item>XML from each supported legacy type (single/multiple selection, input, true_false)References
AI usage