Contributing
Source:CONTRIBUTING.md
Install dependencies:
Run verification:
Rscript tools/check-docs.R && Rscript -e 'lints <- lintr::lint_package(); if (length(lints)) { print(lints); quit(status = 1) }' && Rscript -e 'rcmdcheck::rcmdcheck(args = "--as-cran", error_on = "warning")'Formatting
R code is formatted with air. Style and exclusions live in air.toml (line width 80, to match lintr; data-raw/ is excluded, like .lintr). Install it and format before committing:
brew install air # macOS; see the air docs for other platforms
air format . # format the whole tree
air format --check . # check mode: non-zero exit if anything is unformattedThe air-format pre-commit hook runs air format on staged R files at commit time, so install air on your PATH after cloning. Editors with the air extension (VS Code, Positron, etc.) can format on save using the same air.toml.
man/ and NAMESPACE are roxygen2-generated. The generating version is pinned in DESCRIPTION under Config/roxygen2/version; install that exact version so devtools::document() is reproducible and contributors don’t get spurious diffs:
tools/check-docs.R (run by the pre-push verify gate) enforces this: it fails if the installed roxygen2 differs from the pin, or if regenerating the docs changes any committed file under man/ or NAMESPACE.
Source lives in src/, behavior features live in features/, tests live in tests/, and durable project context lives in docs/.
Keep local-only planning state in _scratch/. Do not commit _scratch/, .fp/, secrets, dependency folders, build outputs, or generated caches.