CurioQuest
wiki/status/2026-06-04-module-2-fetch-curriculum-packet-status.md
Module 2 Fetch Curriculum Packet Implementation — 2026-06-04
Status
Module 2 is COMPLETE as Fetch Curriculum Packet + Reuse Check.
What Changed
- Module 2 now fetches the published catalog topic from the full
CreationBrief, not a display label. - The catalog-backed loader uses
brief.topic_id, verifies the topic isPUBLISHED, and rejects grade mismatches againstbrief.effective_grade. LessonSpecis just the selected catalog fields M3 needs. It is not a generated lesson plan.- The resolved catalog
Topic.catalog_versionis authoritative. Intake'scatalog_versionis a UI snapshot only. CurriculumResolveStepcomputes cache keys fromLessonSpec.catalog_versionand emitsReuseDecision.- Runtime artifact storage moved to Supabase/Postgres via
PostgresArtifactStore; SQLite is no longer the runtime default. - Artifact writes use the Pydantic
StoredArtifactboundary object for payload + metadata.
Verification
services/book-factory: uv run pytest tests/unit/test_step_02_curriculum.py -q
10 passed
services/operator-api: PYTHONPATH="src:../curriculum-service/src:../book-factory/src" python3 -m pytest tests -q
55 passed
Scope Boundary
No caveats remain for M2 itself. M3/M6 persistence/loading of topic-level generated artifacts is downstream work, not an M2 blocker.