docs: CHANGELOG for catalog_gates --fast + the pre-push hook

This commit is contained in:
2026-08-02 15:28:43 +02:00
parent c3e4bb18c7
commit 340ff2a2d6
+23
View File
@@ -1,5 +1,28 @@
# Changelog
## 2026-08-02 — `--fast` for the pre-push hook (no version: this repo carries none)
**`scripts/catalog_gates.py --fast`** selects only gates that touch no network and no container
runtime. Today that is gate 1, `check-image-pins.py`. `check-image-resolvable.py` (network) and
`check-volume-persistence.py` (Docker, minutes per app) are **not** in it, and the skip is
**announced**, with the reason and with what still owes a periodic run — a silently narrowed run
reads as "covered everything" when it did not. Default behaviour with no flag is unchanged.
**Why the runtime gates are never in a hook.** A push that pulls images and starts containers gets
bypassed within a week, and the bypass becomes the habit. They stay deliberate periodic runs: the
start of a catalog campaign, before a publish train that vouches the catalog, and whenever a
template's `volumes:` block or image tag changes — on a scratch host, never a customer box.
**`.githooks/pre-push` (new)** runs `catalog_gates.py --fast` and refuses the push. It is per-clone
(`git config core.hooksPath .githooks`) and `git push --no-verify` bypasses it on purpose; both
limits are written into the hook. This is R-161's convention half made automatic-ish; the
unbypassable half is CI, now tracked as `felhom.eu` `OPEN-ITEMS.md` **R-168**.
**`scripts/test_catalog_gates.py` (new, 5 tests)** pins `--fast`'s CONTENT, not just its exit code:
the static gate's own stdout must appear (an inert runner prints the summary while calling nothing),
the runtime gates' must not, the skip must be announced, and the no-flag path must still select all
three. Red-proofed with an inert `run_gate`.
## 2026-08-02 — one entry point for the catalog's gates (R-161 ruling)
`scripts/catalog_gates.py` runs all three gates — image-pins, image-resolvable, volume-persistence —