You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ml/: no quality-gate script runs Python unit tests (scripts/validate-ml-tests missing) #245
Discovered while implementing ADR-340 (PassFilter/VariationGenerator randomization primitives, ml/pipeline/core/randomization.py).
scripts/validate.sh runs three gates today:
validate-build.sh # dotnet build
validate-ml-build.sh # mypy --strict over ml/pipeline and ml/test
validate-tests.sh # dotnet test
There is no scripts/validate-ml-tests.sh counterpart that actually executes the Python unit tests landing in ml/test/. pytest is available in the dev environment and is pinned in ml/requirements.txt (added on the ADR-339 branch), and ml/test/pipeline/core/test_randomization.py (ADR-340) plus ml/test/pipeline/core/test_manifest.py (ADR-339) both already pass when run manually (cd ml && python3 -m pytest test/), but nothing in the project's own quality-gate pipeline runs them.
This is a gap against CLAUDE.md's Quality Gates section, which states a change isn't complete until scripts/validate-tests (all unit and E2E tests) passes — that gate currently only covers dotnet test, with no way to enforce the ADR-191 epic's "unit tests written test-first" exit criterion (required on every task from ADR-339 onward) via the standard pipeline.
Suggested fix
Add scripts/validate-ml-tests.sh/.cmd (mirroring the validate-ml-build naming/pattern) that runs pytest from ml/.
Wire it into scripts/validate.sh/.cmd alongside validate-ml-build.
Update CLAUDE.md's Quality Gates table to list it.
Scope note
Per ml/_spec_OopPipeline.md's task breakdown (ADR-338 through ADR-358), no task currently owns this wiring — it fell out of scope for ADR-340 (whose task brief explicitly scoped file changes to ml/pipeline/core/randomization.py and its test file only) and wasn't added by the sibling ADR-339 task either. Filing this so it's tracked and picked up as its own small task rather than silently expanding an in-flight task's scope.
Activity