Contributing
June 23, 2026 · View on GitHub
We value and encourage community contributions. To get started, please follow these guidelines:
1. Code of Conduct
Please read and follow our Code of Conduct.
2. Issues
Engagement starts with an Issue where conversations and debates can occur around bugs and feature requests:
- ✅ Do search for a similar or existing Issue prior to submitting a new one.
- ❌ Do not use Issues for personal support. Use Discussions or StackOverflow instead.
- ❌ Do not side-track or derail Issue threads. Stick to the topic, please.
- ❌ Do not post comments using just "+1", "++" or "👍". Use Reactions instead.
👾 Bugs
- ✅ Do search for a similar or existing Issue prior to submitting a new one.
- ✅ Do describe the bug concisely. Avoid adding extraneous code, logs, or screenshots.
- ✅ Do attach a minimal test or example to demonstrate the bug.
💡 Feature Requests
- ✅ Do search for a similar or existing Issue prior to submitting a new one.
- ✅ Do provide sufficient motivation and use case(s) for the feature.
- ❌ Do not submit multiple unrelated requests within one request.
TIP: Engage as much as possible within an Issue before proceeding with contributions.
3. Vulnerabilities
- ✅ Do refer to our Security Policy for more information.
- ✅ Do report vulnerabilities via this link.
- ❌ Do not open a public Issue or Discussion for security vulnerabilities.
4. Development
🌱 Branches
feature/*— feature development; PR target ismain.main— stable branch; tagged releases are cut from here.
🔒 Dependencies
- Python >= 3.10
- uv for environment and dependency management.
📦 Project Setup
# 1. Clone and enter the repo
git clone https://github.com/capitec/dsp-decision-engine.git
cd dsp-decision-engine
# 2. Install all dependencies (creates .venv automatically)
uv sync --all-extras
# 3. Run the tests
uv run pytest
If you are behind a corporate proxy that uses a private CA, uv is already
configured to use the system certificate store (system-certs = true in
pyproject.toml).
📂 Directory Structure
decider/ Core library
cli/ `decider` CLI (click)
config/ Versioned config management
modules/ Module primitives (expression, join, sequential, union)
serving/ HTTP servers (Starlette, Sanic)
templates/ Scaffolding templates and scaffold.py renderer
magics/ Jupyter %%module magic
docs/examples/ Example notebooks
projects/ End-to-end project examples
tests/ pytest suite
pyproject.toml Project metadata, dependencies, tool config
uv.lock Locked dependency graph (committed)
🏷 Naming Conventions
- ✅ Do follow PEP 8.
- ✅ Do name classes in
CamelCaseand functions/modules insnake_case.
🔍 Code Quality
- ✅ Do adhere to PEP 8 style guidelines.
- ✅ Do use
rufforblackfor formatting before opening a PR.
🧪 Testing
- ✅ Do write tests under
tests/usingpytest. - ✅ Do ensure all tests pass before submitting a Pull Request (
uv run pytest).
5. Pull Requests
- ✅ Do ensure your branch is up to date with
main. - ✅ Do ensure there are no merge conflicts.
- ✅ Do make sure all tests pass.
- ✅ Do provide a clear description of the changes and their purpose.
TIP: Review the existing codebase and follow the conventions used throughout the project.
Thank you for contributing! We appreciate your efforts to improve the project.