mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-07 04:12:04 +00:00
The voice rule states that commits are authored by the maintainer's git identity alone. Editors and CLIs append co-author trailers and session links by default, and once such a line is in the object store only a history rewrite removes it — so enforce it before the commit exists. The guard rejects tooling co-author trailers, session links, and generated-with lines; human co-authors and ordinary messages pass.
51 lines
2.3 KiB
YAML
51 lines
2.3 KiB
YAML
# Git-hook manager (v1.16.4). `pnpm install` wires the hooks via the
|
|
# `prepare` script in package.json; no manual step needed.
|
|
#
|
|
# Pre-commit secret scan: `gitleaks protect --staged` scans exactly the
|
|
# staged hunks against the repo's `.gitleaks.toml` before every commit,
|
|
# so a secret-shaped string never reaches the object store (where only
|
|
# a history rewrite can remove it again).
|
|
#
|
|
# Requirements: the `gitleaks` binary must be on PATH — the command
|
|
# below fails with install pointers when it is missing rather than
|
|
# silently skipping the scan.
|
|
#
|
|
# Opt-out (one commit): LEFTHOOK=0 git commit ...
|
|
# Opt-out (skip one job): LEFTHOOK_EXCLUDE=gitleaks git commit ...
|
|
# Opt-out (permanent): pnpm lefthook uninstall
|
|
# Per project policy (`--no-verify` is banned), prefer fixing the
|
|
# finding over bypassing the hook.
|
|
|
|
# Commit-message guard: the project voice rule (CLAUDE.md, "Voice and
|
|
# privacy") states that commits are authored by the maintainer's git
|
|
# identity alone and carry no tooling co-author trailer or session link.
|
|
# Editors and CLIs add those trailers by default, and a message that
|
|
# picks one up is only removable from the object store by a history
|
|
# rewrite — so the check belongs here, before the commit exists, not in
|
|
# a review pass afterwards.
|
|
commit-msg:
|
|
commands:
|
|
no-tooling-trailer:
|
|
run: |
|
|
if grep -qiE '^(Co-Authored-By:.*(claude|anthropic|copilot|gpt|gemini)|Claude-Session:|Generated with)' "{1}"; then
|
|
echo "ERROR: the commit message carries a tooling co-author trailer or session link." >&2
|
|
echo "Project policy: commits are authored by the maintainer's git identity alone." >&2
|
|
echo "Remove the offending line(s) from the message and commit again." >&2
|
|
exit 1
|
|
fi
|
|
|
|
pre-commit:
|
|
commands:
|
|
gitleaks:
|
|
run: |
|
|
if ! command -v gitleaks >/dev/null 2>&1; then
|
|
echo "ERROR: gitleaks binary not found on PATH — the staged-secret scan cannot run." >&2
|
|
echo "Install it first, e.g.:" >&2
|
|
echo " brew install gitleaks # macOS" >&2
|
|
echo " apt/apk/pacman install gitleaks # Linux distros" >&2
|
|
echo " https://github.com/gitleaks/gitleaks#installing" >&2
|
|
echo "One-off bypass (use sparingly): LEFTHOOK=0 git commit ..." >&2
|
|
exit 1
|
|
fi
|
|
gitleaks protect --staged --redact --no-banner
|