Summary
Makefile assumes Unix venv path (.venv/bin/python) or python3, causing make lint / make typecheck / make test-cov to fail on Windows even when a local .venv Python exists.
Expected vs actual behavior
Expected: On Windows, the Makefile should check .venv/Scripts/python.exe (Windows venv layout) before falling back to python3 or python.
Actual: The venv path is hardcoded to .venv/bin/python which does not exist on Windows, and the install target uses python3 directly rather than $PYTHON.
Steps to reproduce
- Clone repo on Windows
- Create .venv using python -m venv .venv
- Run make lint — fails because .venv/bin/python does not exist
Additional context
The install target also directly calls python3 rather than $PYTHON, so even if the PYTHON variable pointed to the Windows venv Python, install would still invoke python3.
Proposed fix
- Introduce a platform-detection variable (e.g. OS := $(shell uname -s) or check for existence of .venv/bin/python vs .venv/Scripts/python.exe)
- Point PYTHON to the correct venv binary for the platform
- Update the install target to use $PYTHON instead of hardcoding python3
Summary
Makefile assumes Unix venv path (.venv/bin/python) or python3, causing make lint / make typecheck / make test-cov to fail on Windows even when a local .venv Python exists.
Expected vs actual behavior
Expected: On Windows, the Makefile should check .venv/Scripts/python.exe (Windows venv layout) before falling back to python3 or python.
Actual: The venv path is hardcoded to .venv/bin/python which does not exist on Windows, and the install target uses python3 directly rather than $PYTHON.
Steps to reproduce
Additional context
The install target also directly calls python3 rather than $PYTHON, so even if the PYTHON variable pointed to the Windows venv Python, install would still invoke python3.
Proposed fix