enforcelisted
Install: claude install-skill dr-zog/plumbline
<!-- [impl->component~enforce-skill~1] -->
# Plumbline — enforce
The engine already exits non-zero on any gap; enforcement is just deciding *where*
that exit code is allowed to stop the flow. The insistence and the light touch work
together — the skills add the anchors so a developer rarely hand-writes one, and the
gate makes unanchored code fail loudly rather than land quietly.
Bundled snippets you'll copy from: `references/pre-commit-hook.sh` and
`references/ci-snippets.md`.
## Before you start
- **A register must exist** and the engine must run cleanly enough that turning on a
gate won't immediately block all work. If the project isn't onboarded, do that
first (`onboard`); gating an empty register just produces noise.
## Let the developer choose the gate
Enforcement is opt-in. Present the options plainly and install what they pick — don't
assume:
- **Pre-commit** — fast, local feedback at commit time. Bypassable with
`--no-verify`, and only present on machines that installed the hook.
- **CI** — the authoritative backstop: unbypassable, but feedback comes after push.
- **Both** — belt and braces, and the usual recommendation for a team that's serious
about it: quick local signal, hard remote gate.
- **Neither** — just show them the one-line command (`plumbline`) to run by hand.
Ask which they want before touching anything.
## Pre-commit hook
Install `references/pre-commit-hook.sh` as `.git/hooks/pre-commit` (make it
executable). It's a plain POSIX script