--- title: "Contributing to ‘box’" author: Konrad Rudolph date: "`r Sys.Date()`" output: rmarkdown::html_vignette: toc: true md_document: variant: gfm vignette: > %\VignetteEngine{knitr::rmarkdown} %\VignetteIndexEntry{Contributing to ‘box’} %\VignetteEncoding{UTF-8} --- # Installation Compared to many other R packages, ‘box’ uses a somewhat different development workflow: While ‘box’ uses ‘devtools’ and ‘roxygen2’ to generate documentation and package infrastructure, *generated code and data is not checked into version control!* This means in particular that the project does not contain a `NAMESPACE` file, since that is auto-(re)generated by tools. Therefore, attempting to install the current development version of ‘box’ via `pak::pak('klmr/box')` or equivalent means *will fail!* Instead, an up-to-date, automatically generated build of the development version of ‘box’ should be installed from [R-Universe](https://klmr.r-universe.dev/): ```{r eval = FALSE} install.packages('box', repos = 'https://klmr.r-universe.dev') ``` … or from the corresponding `build` branch: ```{r eval = FALSE} pak::pak('klmr/box@build') ``` Alternatively it can be built manually using the instructions below. # Development ## Building The project contains a `Makefile` written in the [GNU Make](https://www.gnu.org/software/make/manual/make.html) dialect that contains various development utilities. Invoking `make` without target will show a list of available targets with short descriptions. Using this `Makefile` isn’t *necessary*, but it helps. In particular: - `make documentation` builds the `NAMESPACE` file, the shared C library and the package documentation. - `make test` runs the unit tests. - `make check` runs checks, and should run cleanly before submitting a pull request: of note, `make check` performs additional checks that are not performed by either `R CMD check` or `rcmdcheck::rcmdcheck()` (these checks can be found as individual scripts under `scripts/`; they roughly correspond to some undocumented checks performed internally on CRAN). ## Branches All new code should be developed on a new branch with a name prefixed `fix/` (for bug fixes), `feature/` (for new features/enhancements), and `chore/` (for any other contributions: fixed typos, project infrastructure, tests, etc.). Branches for pull requests will be merged into the [`main` branch](https://github.com/klmr/box/tree/main). ## Attribution and copyright All contributions to the project are licensed under the same licence as the project itself ([MIT licence](https://opensource.org/license/mit)). By contributing, you agree to put your contribution under the project’s licence. By submitting a pull request, you are asserting that your contribution is your original work and that you are releasing its copyright to the project under the project’s licence. In particular, LLM-generated content without significant creative human input is not copyrightable under many legislations (see e.g. the [briefing of the EU parliament research service](https://www.europarl.europa.eu/thinktank/en/document/EPRS_BRI(2025)782585)). Therefore, contributions that are generated by an LLM without significant creative human input cannot be accepted. At the same time, we recognise that the use of code-generation tools has a long-standing tradition, and that merely using a tool to help generate text does not necessarily negate the creative contribution of a human author. We therefore stop short of outright banning the use of LLM-aided contributions for the time being. ## Code style The code style of ‘box’ is similar to the [Tidyverse style guide](https://style.tidyverse.org/), but with several notable differences: - The file extension for R code files is lowercase `.r` (not uppercase `.R`). The file extension for R Markdown files is lowercase `.rmd` (not uppercase `.Rmd`).