Pre-commit hook runs lint+fmt-check, not full check (TDD)

Tests are deliberately excluded from the pre-commit hook so that the
TDD red-phase commit (failing tests landing before implementation) can
land on a feature branch. CI still runs full make check via docker build
so a red branch cannot reach main.
This commit is contained in:
2026-05-09 21:39:32 +02:00
parent 22c80d07ee
commit 0d504294b5
2 changed files with 11 additions and 2 deletions

View File

@@ -36,6 +36,10 @@ docker:
docker build -t quack . docker build -t quack .
hooks: hooks:
@printf '#!/bin/sh\nset -e\nmake check\n' > .git/hooks/pre-commit @printf '#!/bin/sh\nset -e\nmake lint\nmake fmt-check\n' > .git/hooks/pre-commit
@chmod +x .git/hooks/pre-commit @chmod +x .git/hooks/pre-commit
@echo "Installed pre-commit hook (runs make check)." @echo "Installed pre-commit hook (runs make lint && make fmt-check)."
@echo "Note: tests are deliberately not in the pre-commit hook so the"
@echo "TDD red-phase commit (failing tests, no implementation yet)"
@echo "can land. CI runs make check via docker build, which catches"
@echo "any branch that ships red."

View File

@@ -90,6 +90,11 @@ All work on quack is test-driven. No exceptions.
test-then-implementation sequence into reviewable commits, but the final test-then-implementation sequence into reviewable commits, but the final
history must still show tests landing before (or with) the matching history must still show tests landing before (or with) the matching
implementation. implementation.
8. The pre-commit hook installed by `make hooks` runs
`make lint && make fmt-check`, not the full `make check`. This is deliberate
so the TDD red-phase commit (failing tests, no implementation yet) can land.
The full `make check` runs as part of `docker build .`, which is what CI
executes, so a red branch still cannot reach `main`.
## Design ## Design