pytest==8.2.2 pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-timeout==2.3.1 # 0.21.1 mocked requests via an httpx transport-pool code path that httpx 0.28 removed/changed, so # every respx.mock test 404'd unmocked once httpx was bumped for M3 (Starlette CVE fix) — bumped # alongside httpx to the current release, which restores the mocks. respx==0.23.1 # Dev-only linter/formatter (config in pyproject.toml). Never shipped — the Docker # image installs requirements.txt only. ruff check . | ruff check --fix . ruff==0.15.18 # Maintainer/test-only. NEVER installed into the Docker image (which installs requirements.txt alone), # and epaper.py stays PIL-only because it runs on the Pi inside the render. Declared here because # tools/eink_{color,scurve,objective_gate,measure,readout}.py and tests/test_eink_color.py already # import it — CI was passing only because the local .venv happened to have it, which is a check that # could only pass. ADR-098-adjacent; see the physics-first plan. numpy==2.4.6 # Maintainer/bench-only, same rule as numpy above: NEVER in the Docker image or on the Pi. Needed by # tools/eink_raw.py to decode the NEX-6's .ARW into scene-linear camera RGB — the measurement rig's # ingest path. Wraps LibRaw; the wheel bundles it, so no system libraw is required. rawpy==0.27.1