Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[QTI] Older Kolibri can't render exercises of only legacy items published from unstable

Open
#6,294 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
Half a day
Newbie friendliness
35/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
python
Domain
backend

Research direction

The issue banner states it is not open for contribution. If you still study it, start at contentcuration/contentcuration/utils/publish.py: how exercises are sent to QTIExerciseGenerator vs PerseusExerciseGenerator and _node_is_perseus_derivable. Align unstable with the v2026.09.24 rule so legacy-only items get both qti and exercise files, and free_response stays QTI-only. Cover both cases with publish tests.

Written by the indexing model from the issue text.

Description

bug DEV: backend

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

Overview

On unstable, publishing an exercise whose questions are all legacy items produces a QTI package and no Perseus archive. Older Kolibri renders only Perseus, so it cannot render these exercises. Release v2026.09.24 publishes the same exercises as a Perseus archive.

Complexity: Low
Target branch: unstable

Context
The Change
  • Legacy-only exercises should get the Perseus archive #6001 gives exercises of native QTI items, under the same rule: QTI only when any item has no Perseus equivalent.
How to Get There
  • Publish a channel with an exercise holding only multiple_selection and input_question items.
  • Check the exercise node's files: there is a qti-preset file and no exercise-preset file.
Acceptance Criteria
  • Publishing an exercise whose items are all single_selection, multiple_selection, true_false or input_question produces both a qti and an exercise file.
  • Publishing an exercise with a free_response item produces a qti file only.
  • Tests cover both cases.

AI usage

Claude Code found this while reviewing the #6211 branch, reproduced it with a scratch publish test on unstable at f4360ff91, and drafted this issue.

Dominant language
Python
Stars
191
Forks
308
Avg merge
2d 14h
Merged PRs (30d)
57

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from learningequality/studio

All issues in learningequality/studio

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.