git clone <repo>
cd robogreeno-cloud
pip install -e ".[dev]"
pytest # all tests should pass before you start- Branch from
main:git checkout -b feature/your-feature - One logical change per PR. Keep PRs small enough to review in one sitting.
- All tests must pass and
ruff check .must be clean before requesting review. - Every new module needs at least one test in
tests/.
- Create
simulator/dtn/your_algorithm.pyinheriting fromDTNRouter. - Implement
on_contact(self, agent_a, agent_b, tick). - Register it in
simulator/__main__.pyin the_ROUTERSdict. - Add it as a valid value in
simulator/config/default.yaml(comment). - Write tests in
tests/test_dtn.py(see existing tests as template). - Add a one-paragraph description to
docs/tutorials/02_add_a_dtn_algorithm.md.
All tuneable parameters live in simulator/config/default.yaml.
Never hard-code SD card sizes, radii, or counts in Python — always read from config.
Any change to comms/protocol/messages.py is a breaking change for the Embedded team.
Open an issue first, tag it protocol-change, and get sign-off before merging.
rufffor linting (line length 100, Python 3.9 target).- Type hints on all public functions.
- No docstrings on obvious functions; a short comment only when the why is non-obvious.