# Building Reproducible Data Science Assignments

Data science assignments are easier to maintain when the instructor can keep one source document and regenerate student-facing materials after revisions. `tutorizeR` supports that workflow by converting annotated source documents into tutorials with exercises and solutions.

## Suggested assignment structure

    assignment-week03/
      lesson-source.qmd
      data/
        student_activity.csv
      generated/
        week03-tutorial.Rmd
        conversion-report.json

## Reproducible conversion script

    library(tutorizeR)

    assignment_dir <- file.path(tempdir(), "assignment-week03")
    output_dir <- file.path(assignment_dir, "generated")
    source_file <- file.path(assignment_dir, "lesson-source.qmd")

    report <- tutorize(
      input = source_file,
      output_dir = output_dir,
      format = "learnr",
      assessment = "both",
      seed = 20260531,
      overwrite = TRUE,
      lint_strict = TRUE
    )

    write_tutorize_report(
      report = report,
      file = file.path(output_dir, "conversion-report.json"),
      format = "json"
    )

## Why the seed matters

For teaching workflows, a fixed seed makes generated setup chunks reproducible. This is useful when students, teaching assistants, and instructors need to see the same randomized example or simulated dataset.

## LMS manifest

    library(tutorizeR)

    assignment_dir <- file.path(tempdir(), "assignment-week03")
    output_dir <- file.path(assignment_dir, "generated")

    manifest <- export_lms_manifest(
      input = file.path(assignment_dir, "lesson-source.qmd"),
      output_file = file.path(output_dir, "lms-manifest.json"),
      profile = "canvas",
      include_solutions = FALSE
    )

    print(manifest)

The manifest is a local metadata artifact. Direct LMS publication is not part of the current package functionality.