Skip to content

QTI editor drops prefixed MathML from a question prompt on save #6308

Description

@rtibblesbot

❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Observed behavior

  • A QTI item whose prompt carries MathML under a prefix (xmlns:m on the root, <m:math> in the prompt) loses the formula on its first save from the editor. Only its text survives.
  • Source prompt: <qti-prompt>solve <m:math><m:mi>x</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>.</qti-prompt>
  • Saved prompt after typing at the end: <qti-prompt><p>solve x+1. Edited</p></qti-prompt>
  • adoptNode re-creates foreign elements with createElementNS(namespace, node.tagName), so the HTML handed to TipTap contains <m:math>, which TipTap does not recognise as math.

Expected behavior

  • The formula in the prompt survives the edit.

User-facing consequences

  • Imported items that use prefixed MathML silently lose their formulas the first time anyone edits the question text, and publish without them.

Steps to reproduce

  1. Seed an exercise with a QTI item whose root declares xmlns:m="http://www.w3.org/1998/Math/MathML" and whose single-choice prompt contains <m:math>…</m:math>.
  2. Open the exercise's Questions tab, click "Edit" on the item, type at the end of the question text, click "Close".
  3. Read the saved raw_data: the <m:math> element is gone.

Seen on unstable at 90c5b61, during manual QA for #6290.

Acceptance Criteria

  • Editing the prompt of an item with <m:math> (prefixed MathML) saves a prompt that still contains the formula as MathML.
  • The saved item passes the QTI XSD check.
  • A test covers it, from opening the item to the emitted raw_data.

AI usage

Claude Code found this during manual QA of #6290 and drafted the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions