Contributing
Simulatte is developed on GitHub. The full workflow is in CONTRIBUTING.md in the repository root; the summary below covers the key rules.
Workflow
- Clone the repository directly — fork PRs are not accepted.
- Create a branch from
main: feature/<name>for new functionalityfix/<name>for bug fixes- Install dependencies and pre-commit hooks:
uv sync --dev --all-extras uv run --all-extras pre-commit install - Open a pull request against
mainwith a clear description of what changed and why. - All CI checks must pass — CI covers CPython 3.11–3.15, a PyPy 3.11 core/intralogistics lane, linting, type checking, and the documentation build.
- At least one approving review is required before merging.
- If your change adds or modifies functionality, update
docs/accordingly.
Merging and releases
PRs are squash-merged into main by the maintainer (@dmezzogori). Contributors should not merge their own PRs or create release tags. New versions are published to PyPI by the maintainer via v* tags.
After publishing, re-lock the remote-execution fixture against the new version; until then preflight on the new coordinator reports incompatible_simulatte for it:
- Bump the
simulatte==pin inexamples/uv_project/pyproject.tomlto the released version. - Run
uv lockinexamples/uv_project/. - Run
simulatte workers check NAMEfor a configured worker, then the fixture once on the workers its file names:simulatte experiment run examples/uv_project/sweep.experiment.json. - Commit the two files as
chore(examples): lock uv_project against simulatte X.Y.Z(for 0.17.0:chore(examples): lock uv_project against simulatte 0.17.0).
For the complete guidelines see the CONTRIBUTING.md file in the repository.