Visualization outputs are derived summaries, not independent evidence. Every
canonical render run writes a visualization_manifest.json that records the
input curriculum hashes, stable item IDs, output hashes, and the semantic limit
that charts describe structure rather than factual truth.
The pipeline produces flow diagrams for domains/entities and the overall curriculum structure (Mermaid source files). View and edit the .mmd sources directly.
Canonical examples:
data/visualizations/diagrams/curriculum_structure.mmddata/visualizations/diagrams/<stable-item-id>_flow.mmddata/visualizations/visualization_manifest.json
Bar charts summarizing section metrics.
Artifacts:
data/visualizations/charts/curriculum_metrics.png
Aggregate curriculum metrics used for charts and diagnostics.
Artifacts:
data/visualizations/metrics/curriculum_metrics.csvdata/visualizations/metrics/curriculum_metrics.json
Run from the repository root:
uv run start-curriculum --non-interactive --stages visualizations --jsonThe render stage consumes data/written_curriculums/, uses stable identifiers
for filenames, and writes the CSV, JSON, PNG, Mermaid diagrams, and manifest as
one inspectable bundle. The manifest is the authoritative link between inputs
and derived outputs; it does not assert that a visual interpretation is true.
If running without a display (servers, CI), set a non-GUI backend for matplotlib:
export MPLBACKEND=Agg
uv run start-curriculum --non-interactive --stages visualizations --json- Ensure inputs exist in
data/written_curriculums/before generating charts. - Confirm write permissions for
data/visualizations/. - Check
data/visualizations/metrics/curriculum_metrics.jsonfor the metric schema if charts appear empty. The bundle manifest is atdata/visualizations/visualization_manifest.json.