Repository navigation
Replace the legacy assessment editor with the QTI editor - #6095
Merged
AlexVelezLl merged 11 commits intoSep 21, 2026
Merged
Conversation
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #6073, you can ignore first 3 commits and review the remaining 9. #6073 must be merged first.
Summary
AssessmentsTabto convert from the list-shape updates to the updates per assessments shape needed for sync.buildXmlNodenow re-creates them namespace-less.<qti-correct-response/>/<qti-default-value/>are omitted rather than emitted, since the schema requires at least oneqti-value.AssessmentItemTypes.QTIwas'qti'where the backend sends'QTI'.validateQtiItemvalidates an item from its raw XML without rendering anything, so Studio can decide whether a node is complete headlessly.QTIon its firstraw_datawrite. The client cannot sendtype— the change layer only sends fields that changed — so the type has to be inferred from the payload..mdformat, so that images from the old editor can be seen on the new one.) that CommonMark has no notion of, so the converter emitted them as literal text. A markdown rule now claims the construct, andTipTapEditor's html path resolves a stored<checksum>.<ext>to a loadable URL on the way in and back on the way out.Grabacion.de.pantalla.2026-08-18.a.la.s.11.22.41.a.m.mov
References
Stacked on #6073.
Closes #5970.
Closes #5956.
Closes #5934.
Closes #5958.
Closes #5935.
Closes #5959.
Reviewer guidance
unstable, create several exercises, these will we created using the old data format.Known follow-ups, not in this PR
_write_qti_media_filesneeds aFilerow linked to the assessment item, and nothing links exercise images (0 of 2,461Filerows in a dev DB haveassessment_itemset — this predates the new editor). Legacy items were fine because publish read them out of storage by checksum. Migrating an item moves it onto the stricter path.AI usage
Used Claude (Opus 5) to brainstorm an initial plan and then to implement it. I reviewed the results and iteratively went on building and fixing remaining issues and proper commit history, until we got to a polished version of this PR.