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 .
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
@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
history must still show tests landing before (or with) the matching
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