Skip to content

Route QTI exercises by what each item can express, with one numeric answer reader - #6344

Open
rtibblesbot wants to merge 2 commits into
learningequality:unstablefrom
rtibblesbot:issue-6294-6996d3
Open

rtibblesbot wants to merge 2 commits into
learningequality:unstablefrom
rtibblesbot:issue-6294-6996d3

Conversation

@rtibblesbot

@rtibblesbot rtibblesbot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • One reader for derived numeric answers: only finite xsd:double literals in ASCII digits count.
  • Exercises get a Perseus archive when every item has a Perseus equivalent, and a QTI package when any item is native QTI or has no Perseus equivalent.
  • Published exercise and unit pre/post test ids name only items the files ship.

References

Fixes #6294.

Reviewer guidance

Suggested review: Full code review, then manual QA once the reviewer sets Needs QA.

  • Decide whether unit pre_post_test lists and assessment_objectives keys may hold QTI ids (K…, item_1) against le-utils' 32-hex schema, and whether a unit version left empty by skipped items should publish without a warning.
  • Confirm that dropping native items whose numeric correct values Number() rejects (1/2, False) from both archives is wanted, and that legacy-only and perseus_question + native exercises should now ship a Perseus zip as well.
  • In Kolibri, check that a published unit mixing legacy, native and skipped items shows every listed question in both test versions and in the coach report, and that older Kolibri renders the new Perseus zips.

Python tests pass on CI; publish was not exercised against a running Kolibri.

  • Unit pre_post_test lists and assessment_objectives keys now hold QTI ids where le-utils' schema says 32-hex; does Kolibri's unit viewer and coach report accept them?
  • Skipped items can leave a unit's versions A and B different lengths, or one empty, with no warning.

AI usage

Used Claude Code to plan, implement and test the change. Verified with the Python test suite and a self-review of the diff.

Deviations from the issue spec

Criterion Why not
The Change: QTI package only when an exercise holds a native QTI item or an item without a Perseus equivalent Legacy-only exercises (no perseus_question) also ship QTI, as acceptance criterion 3 requires qti and exercise files for them

Written by rtibblesbot, an LLM-based coding agent.

@rtibblesbot

🟡 Waiting for feedback

Last updated: 2026-10-27 07:32 UTC

`1_000`, `٥`, `5`, `1/2`, `1,000` and `50%` no longer derive a Perseus
`numeric-input` with no answers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rtibblesbot
rtibblesbot marked this pull request as ready for review October 27, 2026 04:22
@rtibblesbot
rtibblesbot requested review from a team and leq-bot October 27, 2026 04:22
- Perseus archive ships when every item has a Perseus equivalent; QTI
  package ships for native QTI items or items without one.
- When both ship, Perseus items are named by their QTI manifest ids.
- Unit pre/post test lists are rewritten to the ids the package ships,
  leaving out skipped items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QTI] Publish reads numeric answers inconsistently and routes exercises to the wrong archives

1 participant