hooks: keep Husky v9 hooks running when Entire chains them

Commit

peyton-alt3d ago

Husky v9 sets core.hooksPath=.husky/_ and its per-hook wrapper sources h, which finds the user's hook from the wrapper's own file name. Entire renamed each wrapper to <hook>.pre-entire and executed it, so h looked for .husky/<hook>.pre-entire, found nothing and exited 0: every Husky hook silently stopped running.

When the backup is exactly a Husky v9 wrapper, Entire now sources it in a subshell, keeping $0 so Husky finds .husky/<hook>; other backups are executed as before. ENTIRE_CHAINED_HOOK makes entire hooks git <hook> skip when the user's Husky hook also calls Entire, and the Husky-form hook unsets it before its own Entire call so nested git operations are not suppressed. Hooks in the previous exec form over a Husky wrapper read Outdated so agent turns and doctor repair them; hand-edited hooks never match. The Husky warning uses v9 wording only when core.hooksPath is .husky/_.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Entire-Checkpoint: 01M3ZWXD6SR9WY0TQA94NWSFK0

Checkpoints

Investigate Entire-Hosted and Agent Integration Issues

Claude CodeOpus 5.5
View session
Checkpoint 1