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 is PUBLISHED, and rejects grade mismatches against brief.effective_grade.
  • LessonSpec is just the selected catalog fields M3 needs. It is not a generated lesson plan.
  • The resolved catalog Topic.catalog_version is authoritative. Intake's catalog_version is a UI snapshot only.
  • CurriculumResolveStep computes cache keys from LessonSpec.catalog_version and emits ReuseDecision.
  • Runtime artifact storage moved to Supabase/Postgres via PostgresArtifactStore; SQLite is no longer the runtime default.
  • Artifact writes use the Pydantic StoredArtifact boundary 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.