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
{{ message }}
Repository navigation
[QTI] An invalid question with several interactions publishes without an Incomplete indicator #6289
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Target branch: unstable
Observed behavior
validateQtiItem returns no errors for an item with several interactions when one of them is invalid. Such an item is unsupported (#6105), so its interactions are never validated.
The card shows no Incomplete indicator.
The exercise counts as complete and publishes.
Errors and logs
None.
Expected behavior
An unsupported item that is invalid blocks publishing, as AlexVelezLl ruled on #6105: "if the item is unsupported because of a parse error or invalid, uneditable qti item, then it should be publish-blocking". Only valid unsupported items are publishable.
User-facing consequences
Learners get a question that can't be answered correctly, e.g. a choice with no correct response in a scored exercise. Authors aren't warned and can't fix it in Studio.
Steps to reproduce
Take MULTI_INTERACTION_ITEM_DOCUMENT (QTIEditor/utils/testingFixtures.js) and remove the second interaction's <qti-correct-response>.
Call validateQtiItem(xml, { allowFreeResponse: false }): it returns [].
Put the item in an exercise: no Incomplete indicator, and the exercise publishes.
Context
validateItem.js: the !isSupportedItem(...) branch returns only descriptor errors and skips each interaction's validation and the free-response check.
I used Claude Code to review the #6225 branch. It found this and reproduced it on upstream/unstable by calling validateQtiItem from a scratch Jest test.
The only thing we should make sure of is that the stored items won't break the publish workflow. If one of the interactions is incorrect because of semantic logic, then it should still be publishable if the publish workflow won't break. Multi-interaction questions aren't supported yet, and flagging these on the frontend isn't in scope as long as publishing won't break.
Thanks — closing as not planned. The publish workflow on unstable already copes with these items:
QTIExerciseGenerator._create_native_qti_item: an item failing XSD validation is logged and excluded, not raised.
A missing <qti-correct-response> passes the XSD, so the item is packaged as-is.
perseus_derive._derivable_interaction: an item with more than one interaction is not derived to Perseus (covered by two_interactions in test_perseus_derive.py).
Activity
AlexVelezLl commentedon Oct 5, 2026
The only thing we should make sure of is that the stored items won't break the publish workflow. If one of the interactions is incorrect because of semantic logic, then it should still be publishable if the publish workflow won't break. Multi-interaction questions aren't supported yet, and flagging these on the frontend isn't in scope as long as publishing won't break.
rtibblesbot commentedon Oct 5, 2026
Thanks — closing as not planned. The publish workflow on
unstablealready copes with these items:QTIExerciseGenerator._create_native_qti_item: an item failing XSD validation is logged and excluded, not raised.<qti-correct-response>passes the XSD, so the item is packaged as-is.perseus_derive._derivable_interaction: an item with more than one interaction is not derived to Perseus (covered bytwo_interactionsintest_perseus_derive.py).rtibblesbot commentedon Oct 5, 2026
I can't close issues; a maintainer needs to close this as not planned.