Key Points

Using RMarkdown


  • Use .md files for episodes when you want static content
  • Use .Rmd files for episodes when you need to generate output
  • Run sandpaper::check_lesson() to identify any issues with your lesson
  • Run sandpaper::build_lesson() to preview your lesson locally

Python with reticulate


  • Sys.setenv(RETICULATE_PYTHON = "managed") forces the reproducible environment; without it a local conda install wins and the build differs from CI
  • py_require() declares packages and the Python version; uv provisions them on first use
  • exclude_newer caps resolution at a date, since renv.lock never records Python packages
  • py$name reads Python objects from R, r.name reads R objects from Python
  • No CI change is needed: uv fetches the interpreter inside the build container