## Git structure

The active branch is development. development is merged into master for releases. Please submit your pull requests to development.

## Repository structure

This repository is structured as a standard R package following the conventions outlined in the R Packages book. A few additional files are provided that are not part of the built R package and are listed in .Rbuildignore, such as .travis.yml, which is used for continuous testing and integration.

## Code

All code for this package is found in R/. All functions should be thoroughly documented with roxygen2 notation; see Documentation. Code should conform to the tidyverse Style guide.

## Testing

Any new feature or bug-fix should include a unit-test demonstrating the change. Unit tests follow the testthat framework with files in tests/testthat. Please make sure that the testing suite passes before issuing a pull request. This can be done by running check() from the devtools package, which will also check for consistent documentation, etc.

## Documentation

All of the function documentation is generated automatically. Please do not edit any of the documentation files in man/ or the NAMESPACE. Instead, construct the appropriate roxygen2 documentation in the function files in R/ themselves. The documentation is then generated by running the devtools::document() function. Please consult the R Packages book if this workflow is unfamiliar to you. Note that functions should include examples in the documentation. Please use \dontrun for examples that take more than a few seconds.

Similarly, the .md files in the base directory should not be edited directly. Instead, edit the .Rmd source files.

## Dependencies

This package already contains a large number of dependencies (imports and suggests). Therefore, new packages should only be added when creating new features that cannot be reasonably achieved within the existing set of dependencies.

## General Development Goals & Guidelines

1. Contribute code to create, use, and convert ecocomDP datasets.
2. Maintain a consistent user-facing API.