Versioning & releases
Coordinating changes across the malariaverse
This is a maintainer-facing page, and part of the packages pillar of maintenance. If you just want to use the packages, start with the tutorials.
The malariaverse packages are released independently, but some of them are coupled through the data they exchange. A change in one package can break another even when there is no DESCRIPTION dependency between them. This page describes which packages are coupled, how to check compatibility before you release, and a lightweight process for coordinating a breaking change across repositories.
The approach mirrors the coordinated-release pattern used by the odin/dust/monty ecosystem: each package keeps its own semantic version, and a shared “ecosystem” git tag marks sets of versions that are known to work together.
What is coupled to what
| If you change… | …watch these downstream | Why |
|---|---|---|
malariasimulation parameter list or output structure |
site, cali, postie, om |
site builds the parameter list; cali runs the model; postie parses the output; om consumes post-processed output |
site site-file structure |
scene, cali, and any saved analysis |
scene edits site files; cali recalibrates them; users pin analyses to a site-file layout |
postie output columns |
om, downstream user code |
om and user analyses read postie output directly |
netz |
site, and the site-file pipeline |
netz is in site’s Suggests: and Remotes:, and netz::net_loss_map is called when deriving ITN input distributions — a real code dependency, not just a data one |
umbrella, peeps, treasure |
mostly self-contained | feed site/om via data, so changes surface as changed inputs rather than build failures |
The two hard code dependencies (site → malariasimulation, cali → malariasimulation) are the easy cases — R will refuse to install an incompatible combination. The dangerous couplings are the implicit data contracts: the site-file layout and the malariasimulation output layout. These have no compiler to catch them, so they are the focus below.
Checking compatibility before a release
Before releasing a change to a “hub” package (malariasimulation, site, or postie), check it against its downstreams rather than in isolation.
Install the development versions together. Point at your working branches so the whole chain is built from source:
pak::pak(c( "mrc-ide/malariasimulation@my-feature-branch", "mrc-ide/site", "mrc-ide/postie", "mrc-ide/cali" ))Run the downstream packages’ own test suites against your dev version — this is a lightweight reverse-dependency check:
# from a checkout of each downstream package, with the dev upstream installed devtools::test() # or: R CMD checkRun one end-to-end example through the pipeline (site → malariasimulation → postie), ideally the example used in Tutorial part 1. If the tutorials still knit, the data contracts still hold.
Check
Remotesare current. Packages that depend on other mrc-ide packages pin them inDESCRIPTIONunderRemotes:(e.g.sitelistsmrc-ide/malariasimulation). If a dependency moved to a new tag/branch, updateRemotes:in step.
If any downstream breaks, that is a breaking change — follow the process below.
Coordinating a breaking change
Keep this lightweight. The goal is that (a) users are warned, and (b) old analyses stay reproducible.
Announce intent. Open an issue on each affected repo (a shared label such as
breaking-changemakes them easy to find) describing what will change and which packages are affected.Work on branches across all affected repos and update them in step so the pipeline stays internally consistent.
Bump each package’s own version (semver: a breaking change is at least a minor bump pre-1.0, or a major bump post-1.0) and update its
NEWS.md.If the site files are moving too, cut the archival snapshot tag. See How package tags relate to site-file releases below — a package-only breaking change does not need one, and relies on semver and
NEWS.mdinstead.Publish a “Latest changes” note. The canonical template already exists as the
sitepackage vignetteLatest-changes.Rmd— copy its structure: what changed, an explicit “code written against the previous versions will likely not run unchanged” warning, and how to reproduce existing work (older site files viafetch_site()+ the frozen tag above).Email the user list at
malariaverse@imperial.ac.ukpointing at the note.
Keeping the status badges in sync
The package “Project Status” badges on the home page are hand-authored in index.qmd (static repostatus.org images), so they can drift from each package’s own README. When you change a package’s status — or when you cut a coordinated release — update the badge in index.qmd to match the package’s README, and vice versa. There is no automatic sync, and no record of when the two were last reconciled — treat a coordinated release as the moment to check them.