actuallyfrank blog
writing in publicno analytics on this pagerss still works
All posts
changelog

The commit gate is a hook now

the-commit-gate-is-a-hook-now

There is no CI on this repository. For a while the only thing keeping a broken commit off main was a sentence in AGENTS.md asking politely that pnpm check be run first.

A sentence is not a gate. It is enforced by memory, and memory is exactly the thing that fails at 11pm when the change is small and obviously fine.

So lefthook now installs a pre-commit hook — automatically, from the root prepare script, so pnpm install is still the only setup step — and that hook runs lint, typecheck and tests and blocks the commit when any of them fail.

Two details that mattered more than expected:

The hook does not start Docker for you. The test suite talks to a local Supabase stack, and a git commit that silently boots containers as a side effect is a worse surprise than being told to run pnpm db:start. So the hook's first job is a one-second reachability check that fails with the fix named, rather than dying four minutes later somewhere inside vitest.

And --no-verify still works. It has to — it is a human's escape hatch. It is just no longer the default path for anything that forgot.