hooks: stop a chained pre-push from swallowing Entire's failure

Commit

peyton-alt4d ago

When entire enable finds an existing pre-push hook it backs it up to pre-push.pre-entire and chains to it after Entire's own invocation. The script's exit status was then the chained hook's, so a failing Entire pre-push (an OPF refusal, which must abort the push) let the push through whenever the user's own hook succeeded.

A chained pre-push now exits with Entire's status before the chain call when Entire fails; the user's hook is skipped since the push is aborting. The other hooks are unchanged: their Entire invocations end in || true.

Existing installs are upgraded: a pre-push in the exact old chained shape reads GitHooksOutdated, so EnsureSetup (agent turns) and entire doctor rewrite it. The match is exact so hand-edited hooks, which are overwritten without a backup, are left alone. Doctor's out-of-date message no longer names only the legacy working-tree launcher.

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

Checkpoints

Investigate Entire-Hosted and Agent Integration Issues

Claude CodeOpus 5.5
View session
Checkpoint 1