Contributing¶
A contribution is an implementation of exactly one contract, and nothing that is a second copy of something lerobot, MuJoCo or Isaac already owns.
What goes in¶
| kind | shape |
|---|---|
| a robot | drivers/<family>/protocol.py (pure functions over bytes) + driver.py (the Driver) + one registry row + a twin where the family has one + one acceptance smoke |
| a policy provider | one module implementing Policy, one row in policies.json, its frame declared |
| a sim backend | one module implementing SimEngine |
| a skill | one function in app/skills.py over the contract, runs on every robot whose driver declares the verbs |
What stays out¶
Planners with no shared contract, in-process copies of models lerobot serves, a second dataset writer, a second quaternion helper, a second noise model, a transport with no customer path, tests that mock the backend they claim to test.
The checks¶
python3 scripts/check_layers.py # 0 violations
python3 scripts/check_imports_cheap.py # bare import stays cheap
ruff check strands_robots && ruff format --check strands_robots
mypy --strict strands_robots
bash acceptance/all.sh # GREEN with the real count
mkdocs build --strict
Rules every file obeys: typed in, typed out; refusals name the bad value, the cause and the
remedy; wire formats are ported verbatim; docstrings state the contract in twelve lines or
fewer; ASCII only; from __future__ import annotations; every GitHub Action SHA-pinned.
Anything a user imports is announced one minor ahead before it disappears, with its
replacement named.