This page is for contributors working on PlantSimEngine itself. It focuses on the local development workflow, the checks worth running before opening a pull request, and a few implementation details that are easy to miss.
Clone the repository from
GitHub and develop
against a checked-out local copy, typically through Pkg.develop(path="...").
We mostly follow the Julia manual's style guide. Questions, bug reports, and design discussions should go through GitHub issues or the related pull request.
The Roadmap summarizes longer-term work that is not yet complete.
PlantSimEngine currently has three main local environments:
test/for the package test suite and doctests run fromtest/runtests.jl;docs/for the Documenter build;benchmark/for benchmark scripts used to compare performance locally.
Run the standard test suite from the repository root:
julia --project=test test/runtests.jlSome tests exercise threaded execution, so it is worth running them with more than one Julia thread when validating parallel behavior.
Build the documentation from the repository root with:
julia --project=docs docs/make.jlThe docs environment includes the extra packages needed for examples and API
documentation, such as Documenter, CairoMakie, PlantMeteo, and
MultiScaleTreeGraph.
Benchmark scripts live in benchmark/. They are useful when a change may alter
runtime characteristics, but they are not a substitute for the main test suite
or downstream integration checks.
The repository currently relies on these GitHub Actions workflows:
CI.ymlfor the main test matrix, docs build, and coverage;Integration.ymlfor downstream checks against packages that depend on PlantSimEngine;Benchmarks.ymlfor pull-request benchmark runs;register.ymlandTagBot.ymlfor release automation.
If a change affects public APIs or execution behavior, check both CI and
Integration before merging. Benchmark results are useful for regressions, but
should be interpreted alongside the test results.
Changes in PlantSimEngine often require documentation updates beyond the page you were editing.
- User-facing errors often require updates to the troubleshooting pages.
- New examples should ideally become doctests or rendered examples.
- API or behavior changes may require updates to the roadmap, migration notes, and example pages.
- If a feature remains experimental, say so clearly in the docs instead of letting examples imply stable support.
- Make sure the change is covered by tests.
- Run the main test suite locally.
- Build the documentation locally if docstrings, examples, or APIs changed.
- Review the affected docs pages and update them in the same pull request.
- Check GitHub Actions after pushing.
- If the change is breaking or deprecates an old path, document the migration path before merging.
Some multiscale helpers turn status vectors into internal runtime models so that
they can be used in mapping-based simulations. The implementation is kept
deliberately data-driven to avoid top-level eval() and world-age issues.
The relevant code lives in src/mtg/mapping/model_generation_from_status_vectors.jl.
If you touch that area, preserve the ability to generate the mapping and build a
GraphSimulation within the same function scope.
Not every combination of weather structure, status shape, mapping layout, and downstream usage is covered directly in PlantSimEngine. When changing the public API or runtime semantics, treat downstream integration results as part of the validation surface, not as optional extra signal.