f1 depth layer — heavyweight trust-surface review (writes to consumer .git/hooks). Setup installs a commit-msg hook enforcing the resolved subject pattern regardless of tool/shell (editor commits, -F <file>, humans outside Claude).
- Never clobber an existing
commit-msg (chain-or-refuse); detect core.hooksPath/lefthook/husky-managed repos and say so; sentinel-mark the installed hook and exclude it as a convention source (echo-cycle).
- Two-lane install: personal
.git/hooks/ (default) vs committed core.hooksPath (team opt-in) — note guardrails' own block-no-verify blocks core.hooksPath=; resolve that interaction.
- Handle the A1 + block-no-verify deadlock (agent can neither pass nor
--no-verify): designed exit + test. Also collides with the operator's machine-local commit-msg gate — must chain.
- Depends on #S1; ships last.
Part of #912. Contract + design in #912 — do not diverge.
f1 depth layer — heavyweight trust-surface review (writes to consumer
.git/hooks). Setup installs acommit-msghook enforcing the resolved subject pattern regardless of tool/shell (editor commits,-F <file>, humans outside Claude).commit-msg(chain-or-refuse); detectcore.hooksPath/lefthook/husky-managed repos and say so; sentinel-mark the installed hook and exclude it as a convention source (echo-cycle)..git/hooks/(default) vs committedcore.hooksPath(team opt-in) — note guardrails' ownblock-no-verifyblockscore.hooksPath=; resolve that interaction.--no-verify): designed exit + test. Also collides with the operator's machine-localcommit-msggate — must chain.Part of #912. Contract + design in #912 — do not diverge.