Overview
Migrate the imscp code into ricecooker.
Decompose an IMS Content Package (including SCORM) into individual Kolibri resources, driven by its manifest.
This reverses the original "no dependency zips" decision; shared-library dependency zips return as a follow-up.
Complexity: High
Target branch: main
Context
- The
imscp code lives in a separate repo (learningequality/imscp) and should be native to ricecooker.
- IMSCP is the packaging layer under SCORM.
- Its manifest (
imsmanifest.xml) is the standardized, tool-independent structure.
- One opaque webcontent zip backs many nodes, so Kolibri's per-resource import pulls the whole package when a single node is selected.
- Wrapping plain media in an HTML5 sandbox strips native affordances — a video should play as a VideoNode, not a
<video> in a sandbox.
- The existing reference machinery locates and rewrites references only within a single archive.
The decomposition ladder
Per manifest resource, take the highest rung it safely qualifies for:
- Native media node (video/audio/pdf/image) — a single media file in a wrapper.
- KPUB — static article/document HTML.
- HTML5 zip served via zipcontent — genuinely interactive content.
- QTI assessment item — assessment content.
Classification runs on one axis: does the resource's meaning survive stripping its JS/CSS?
- Discount SCORM API boilerplate (
pipwerks, LMSInitialize, SetValue) before judging interactivity.
- Bias conservative — promote only on high confidence.
- Never promote a resource carrying assessment, score, or tracking semantics.
The crux
Decomposition must rewrite references across resources: a promoted node referenced by a sibling, or a shared library in a dependency zip.
The rewrite emits two new target forms:
- native-node references
- zipcontent-relative dependency paths
Deferred to follow-ups
- Per-tool deep parsers (Storyline, Captivate, Rise, iSpring, Adapt content models).
- Interactivity classification beyond the sanitization-survival test.
- Automatic dependency-zip vendoring for shared HTML5 libraries.
Acceptance Criteria
Overview
Migrate the
imscpcode into ricecooker.Decompose an IMS Content Package (including SCORM) into individual Kolibri resources, driven by its manifest.
This reverses the original "no dependency zips" decision; shared-library dependency zips return as a follow-up.
Complexity: High
Target branch: main
Context
imscpcode lives in a separate repo (learningequality/imscp) and should be native to ricecooker.imsmanifest.xml) is the standardized, tool-independent structure.<video>in a sandbox.The decomposition ladder
Per manifest resource, take the highest rung it safely qualifies for:
Classification runs on one axis: does the resource's meaning survive stripping its JS/CSS?
pipwerks,LMSInitialize,SetValue) before judging interactivity.The crux
Decomposition must rewrite references across resources: a promoted node referenced by a sibling, or a shared library in a dependency zip.
The rewrite emits two new target forms:
Deferred to follow-ups
Acceptance Criteria
imscpcode migrated into ricecooker.