11  Reports and Reproducibility

report_curriculum() renders a completed mapping as a self-contained HTML document. It uses the stored scores, classifications, and summary tables and makes no model calls.

11.1 Creating a report

report_curriculum(cm, "course_report.html")
report_curriculum(cm, "course_report.html", title = "Course alignment review")

The report includes objective wording findings, alignment matrices, cognitive level summaries, course-to-session coverage, assessment coverage, and run provenance. A course without assessments is identified as having no assessment mapping. The file opens in a browser without a server, Pandoc, or an interactive widget runtime.

Omit the file argument to obtain the HTML string:

html <- report_curriculum(cm)

The report reflects the supplied object’s stored summaries. If a component is replaced or a threshold is changed in a separate calculation, recompute the dependent summaries before using them in a report.

11.2 Interpreting findings

Review findings in relation to the source material:

  1. Check structural findings, failed scores, and missing classifications.
  2. Examine objective wording and any model-proposed revisions.
  3. Review objectives without aligned candidates at the selected threshold.
  4. Compare recorded cognitive levels within aligned candidate sets.
  5. Evaluate assessment coverage where assessment items are available.

An uncovered objective has no aligned candidate in the supplied data at the selected threshold. That can indicate a documentation gap, a model judgment requiring review, or a substantive gap in the documented curriculum. reached = FALSE also includes cases with insufficient classification data. Neither outcome establishes that a topic was not taught or learned.

Source documents, instructor review, and any independent reference judgments provide context for interpreting the automated findings. The package does not infer student attainment from objective and assessment text.

11.3 Preserving an analysis

saveRDS(cm, "course_mapping.rds")
capture.output(sessionInfo(), file = "session-info.txt")

Use a scalar-column selection when exporting an edge table with list columns:

edges <- as.data.frame(cm@mapping)
scalar_columns <- !vapply(edges, is.list, logical(1L))
write.csv(edges[, scalar_columns], "course_alignment.csv", row.names = FALSE)

items <- as.data.frame(cm@levels)
scalar_columns <- !vapply(items, is.list, logical(1L))
write.csv(items[, scalar_columns], "classifications.csv", row.names = FALSE)

The RDS object preserves categorical probability vectors and other structured fields that a flat CSV does not represent directly. Retain reviewed input files, the analysis script, model identifiers and settings, package versions, and the completed object. A model tag alone may not identify an immutable model artifact.

11.3.1 Run records

str(cm@run, max.level = 1)
cm@run[["checks"]]
cm@run[["timing"]]
cm@mapping@run
cm@levels@run

The records include stage settings, model summaries, classification and mapping parameters, checks, failures, and timing. The assessment mapping has its own run record when present. Model connection credentials are not part of the intended reproduction record.

11.3.2 Reporting the method

A methods description should identify the input scope, extraction and editorial review, model configurations, taxonomy, scoring rubric, request grouping, repetitions, rationale settings, alignment threshold, level tolerance, and retry policy. Report assessment inclusion rules, including the treatment of bonus items. State how failed scores and missing classifications affect each summary.

When comparing runs, distinguish model agreement from accuracy and saved computation time from elapsed time in the current invocation. Document any manual review separately from automated classifications and suggested revisions.

© 2026 E.D. Gennatas