.PHONY: test lint fmt fmt-check check build dev clean docker hooks # Use `timeout` (GNU coreutils) when available so `make test` is hard-capped. # On macOS without coreutils this is empty and the cap is skipped. TIMEOUT := $(shell command -v timeout 2>/dev/null || command -v gtimeout 2>/dev/null) YARN := yarn run test: @$(TIMEOUT) $(if $(TIMEOUT),30s,) $(YARN) vitest run --reporter=dot || \ { echo "--- Rerunning with verbose for details ---"; \ $(YARN) vitest run --reporter=verbose; exit 1; } lint: @$(YARN) eslint . @$(YARN) prettier --check . fmt: @$(YARN) prettier --write . fmt-check: @$(YARN) prettier --check . check: test lint fmt-check build: @$(YARN) tsc dev: @$(YARN) tsc --watch clean: @rm -rf dist coverage .vitest-cache *.tsbuildinfo docker: docker build -t quack . hooks: @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 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."