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.
python3 -m venv .venv-hil
.venv-hil/bin/pip install -r requirements-hil.txt
.venv-hil/bin/pytest -v
HIL_ARTIFACT=artifacts/hil/<timestamp> .venv-hil/bin/pytest -v -m hil hil_tests/
HIL_ARTIFACT=artifacts/hil/<fault-timestamp> 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.