feat(freeze): no authors in the config, no author check

A repository that takes commits from people it cannot list has no way
to freeze a range today: a null `authors` falls back to
`git config user.email`, so every foreign author or committer fails.
Null, or no key, now means neither is checked; the freeze warns that it
did not check them and records `authors` as null. A list is checked as
before. An empty list, which no commit could pass, is a config error
that points at null.
Released as 1.1.0.
This commit is contained in:
Jorijn van der Graaf 2026-11-02 13:57:20 +01:00
commit c6b4d78245
Signed by: jorijnvdgraaf
GPG key ID: 2937E59CDCC1BCFB
10 changed files with 52 additions and 49 deletions

View file

@ -136,7 +136,7 @@ delta `@{upstream}..HEAD`, the rule for a repository that pushes to its
own trunk; `base`: always the merge-base with `base`, the whole pull request
for a repository whose branches become PRs — their commits must be linear,
rebased, never a merge of the integration branch), `authors` (the emails the
freeze accepts; null = `git config user.email`), `aiTrailers` (`forbid` or
freeze accepts; null = neither author nor committer is checked), `aiTrailers` (`forbid` or
`allow`), `requireSigned`, `allowDirty` (tracked
files the local stack rewrites in place while the lenses run), `gate0` (the
commands Gate 0 runs by hand, for the skill), `modes` (`modes.<name>`: the
@ -209,8 +209,9 @@ default), `notes`.
output where a commit message's "tested" claim can point at it
(`--context-paths`).
2. **Freeze** — `freeze` checks, all of them, before it
exports anything: author AND committer are in `authors`; AI attribution
trailers (`Assisted-by:`, `Co-Authored-By:`) by the `aiTrailers` rule; the
exports anything: author AND committer are in `authors` (when it is
set); AI attribution trailers (`Assisted-by:`, `Co-Authored-By:`) by the
`aiTrailers` rule; the
tracked tree is clean (the `allowDirty` paths aside, warned); no merge
commit in the range (`git format-patch` drops them silently, so the
artifact would not be the push); the range is a fast-forward of

View file

@ -1,6 +1,6 @@
---
name: prepush
description: Pre-push gates for a repository set up for crafter-review (`crafter-review init`). Runs the pipeline's procedure end to end — Gate 0 build/tests + freeze (identity, trailers by the config's rule, clean tree, no merges, fast-forward), the application and the database under test brought up from the frozen tree, the driver run of the lenses the config turns on - every lens is off until it does (repo-better-solution → repo-functional with the Playwright MCP → repo-bug-prover and repo-security side by side → repo-facts, the commit truth) via crafter-review, the fix/rerun loop, the owner's approval of the hash, verify, push. Nothing is pushed unreviewed or unapproved.
description: Pre-push gates for a repository set up for crafter-review (`crafter-review init`). Runs the pipeline's procedure end to end — Gate 0 build/tests + freeze (identity when `authors` is set, trailers by the config's rule, clean tree, no merges, fast-forward), the application and the database under test brought up from the frozen tree, the driver run of the lenses the config turns on - every lens is off until it does (repo-better-solution → repo-functional with the Playwright MCP → repo-bug-prover and repo-security side by side → repo-facts, the commit truth) via crafter-review, the fix/rerun loop, the owner's approval of the hash, verify, push. Nothing is pushed unreviewed or unapproved.
---
Follow the pipeline's procedure, `prepush.md`, EXACTLY — read it now, in