# AGENTS.md
## Project overview
- EV3 robot controlled by a PS4 controller using Pybricks.
- Hardware access goes through `DeviceManager` for safe/optional device handling.
- Local development can run without an EV3 by keeping hardware calls mocked or guarded.
## Setup commands
- Python 3.10+ recommended.
- python -m venv .venv
- source .venv/bin/activate
- pip install -r requirements-test.txt
## Dev environment tips
- Keep hardware-specific imports/usage behind guards so code can run on a laptop.
- Prefer dependency injection for sensors/motors to simplify mocking in tests.
- Use `pytest -q` for quick feedback; full run uses coverage and writes to `htmlcov/`.
- When iterating on EV3 code, commit small changes and keep logs concise for on-brick debugging.
## Testing instructions
- Run from repo root: `pytest`
- Uses settings in `pytest.ini`; coverage reports to `htmlcov/` and XML.
- To target a subset: `pytest tests/test_.py -k ""`.
- If hardware is unavailable, mock device classes to avoid import/runtime errors.
- Keep coverage healthy; add/adjust tests when touching controllers, device manager, or safety logic.
## Code style
- Follow PEP 8; prefer descriptive names and small functions.
- Add type hints where practical; keep public APIs documented with docstrings.
- Centralize hardware interactions in `DeviceManager` and avoid duplicated port mappings.
- Default to standard library/testing tools; avoid adding new deps unless necessary.
## PR instructions
- Ensure `pytest` passes before opening/merging.
- Keep PRs scoped; document hardware assumptions/limitations in the description.
- Use imperative, concise titles (e.g., "Add gyro fallback handling").