aboutsummaryrefslogtreecommitdiff
path: root/githooks/pre-commit
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-28 09:11:47 -0500
committerCraig Jennings <c@cjennings.net>2026-05-28 09:11:47 -0500
commit9f84ea2c7854e35ae30c0fb5fbd63f7b7115fb41 (patch)
treec6cd922c6286c5a6a0c6803ed8311683a3e538af /githooks/pre-commit
parentbeb646e827802c0491b422ce03c7687eb66a717b (diff)
downloadrulesets-9f84ea2c7854e35ae30c0fb5fbd63f7b7115fb41.tar.gz
rulesets-9f84ea2c7854e35ae30c0fb5fbd63f7b7115fb41.zip
feat(sync-check): canonical/mirror drift detection + pre-commit hook
scripts/sync-check.sh diffs claude-templates/.ai/{protocols.org, workflows,scripts} against the .ai/ mirror. Exits 0 when clean, 1 with a diff report on drift, 2 outside a rulesets-shaped repo or git checkout. --fix mode rsyncs canonical -> mirror and re-checks, then prompts to re-stage. githooks/pre-commit wraps the script. Commits abort on drift so the issue surfaces at publish time, not at the next session's startup rsync. Two new Makefile targets: - make sync-check [FIX=1] runs the script (FIX=1 passes --fix through). - make install-githooks sets core.hooksPath=githooks (idempotent). scripts/tests/sync-check.bats holds 8 tests covering clean, drift-per-path, --fix, extra-file removal, missing canonical, and outside-git. All eight pass. This catches the exact drift I had to fix manually during this morning's audit pass. The mirror's open-tasks.org PROPERTIES drawer sat below a sub-heading because the mirror commit was older than canonical.
Diffstat (limited to 'githooks/pre-commit')
-rwxr-xr-xgithooks/pre-commit15
1 files changed, 15 insertions, 0 deletions
diff --git a/githooks/pre-commit b/githooks/pre-commit
new file mode 100755
index 0000000..ece0c8a
--- /dev/null
+++ b/githooks/pre-commit
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+#
+# pre-commit hook — block commits when the canonical/mirror pair drifts.
+#
+# Enable by running: git config core.hooksPath githooks
+# (handled by make install-hooks; idempotent on re-run.)
+
+set -euo pipefail
+
+repo_root="$(git rev-parse --show-toplevel)"
+"$repo_root/scripts/sync-check.sh" || {
+ echo "" >&2
+ echo "pre-commit: canonical/mirror drift detected. Commit blocked." >&2
+ exit 1
+}