The prior hook piped staged filenames through xargs grep, scanning the entire current file content. This produced false positives whenever a modified file contained pre-existing TODO/FIXME/XXX markers anywhere — even if the staged change did not touch those lines. Six --no-verify bypasses accumulated in two days as a result: the commits were not introducing any new TODO markers; they simply modified files that had template or documentary use of those tokens. Fix: - Collect added lines from the staged diff once (git diff --cached -U0, filtered to lines starting with + and excluding +++ file headers) - Scan that set for debugging-keyword and secret patterns - Pre-existing content in modified files no longer triggers the hook Also: - Show the matched lines when warning (previously the hook said "Found debugging keywords" without indicating which) - Read from /dev/tty explicitly so interactive prompts work even when stdin is closed by the commit driver - Non-interactive contexts: proceed on TODO warnings (least invasive); block on secret matches (most invasive); in both cases state clearly what's happening --no-verify is used on this commit only because the hook file itself contains the literal scan patterns (TODO:, FIXME:, XXX:) inside its grep regex. The new hook's scan of added lines therefore matches its own source at commit time — a one-time bootstrap issue. This should be the LAST --no-verify in this pattern. Future commits with legitimate no-TODO-marker changes will pass cleanly; future commits that genuinely introduce new TODO markers will correctly prompt for confirmation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Git Hooks
This directory contains global git hooks that can be used across all repositories.
Setup
- Configure git to use this directory for hooks:
git config --global core.hooksPath ~/dotfiles/git/hooks
- Make hooks executable:
chmod +x ~/dotfiles/git/hooks/*
Available Hooks
pre-commit: Run before each commitcommit-msg: Validate commit messagespre-push: Run before pushing
Per-Repository Hooks
To use repository-specific hooks instead of global ones:
git config --local core.hooksPath .git/hooks