---
title: "Building Reproducible Data Science Assignments"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Building Reproducible Data Science Assignments}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```

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

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

## Reproducible conversion script

```{r eval=FALSE}
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

```{r eval=FALSE}
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.
