learningequality / learningequality/studio

[QTI] Backfill all non-raw AssessmentItems to QTI items

Open
#6,007 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

DEV: backend
Dominant language
Python
Stars
191
Forks
307
Avg merge
5d 6h
Merged PRs (30d)
10

Description

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

Overview

Run the one-time global backfill converting every legacy AssessmentItem to type='QTI' + raw_data XML via #6003's conversion, then remove the API-layer dual-read.

Complexity: Medium
Target branch: unstable

Context
  • #6003 provides the reusable conversion.
  • #6030 wires it into the endpoint as a transitional API dual-read.
  • This issue makes that change permanent in the data.
  • A data-only backfill — no schema change — over a large table.
The Change
  • Backfill every legacy row to type='QTI' + raw_data XML via the #6003 conversion.
  • Leave perseus_question rows untouched.
  • Remove the API-layer dual-read (#6030) once the backfill completes.
Acceptance Criteria
  • After the backfill, every legacy row is type='QTI' with raw_data XML; only perseus_question rows remain unconverted
  • Rows that fail conversion are surfaced, not silently dropped
  • The backfill is resumable and safe to re-run
  • With the backfill complete, the API serves QTI directly without the dual-read
  • Tests cover the backfill over a mixed fixture

AI usage

Architecture decided with the maintainer across an iterative session: blanket QTI type with the item XML in raw_data; XSD-authoritative validation across all sources; a legacy→QTI global migration with an API-layer dual-read; ricecooker upload delegating to the AssessmentItem serializer; and a Perseus custom-interaction contract confirmed against the QTI 3.0 specification. Claude mapped the existing publish/validation/ricecooker code, proposed the breakdown, and drafted each issue; the maintainer steered every decision and reviewed throughout.

Contributor guide

Open the contributing guide

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.

Research direction

Start by reading the reusable conversion in #6003 and the transitional API dual-read in #6030. Design the global backfill to convert non-Perseus legacy rows, surface failures, and support safe reruns; completion means mixed-fixture tests pass and the API no longer needs the dual-read.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, database
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.