# Local HIL tests The Python unit tests validate trace parsing, simulator fixtures, and strict evidence correlation without opening hardware. The `hil`-marked test reads an already completed artifact directory; pytest itself never opens or flashes a serial device. ```bash python3 -m venv .venv-hil .venv-hil/bin/pip install -r requirements-hil.txt .venv-hil/bin/pytest -v HIL_ARTIFACT=artifacts/hil/ .venv-hil/bin/pytest -v -m hil hil_tests/ HIL_ARTIFACT=artifacts/hil/ HIL_FAULT=suppress_ack .venv-hil/bin/pytest -v -m hil hil_tests/ ``` A missing real meter is represented as `BLOCKED`/JUnit `skipped`, not as a firmware failure. A missing boot, role, time-sync, batch, decode, or ACK event is a failure because there is no corresponding device evidence. Live serial access is performed only by the explicitly invoked tools in `tools/hil/`, after `.hil/local.toml` approval checks.