# Branch Protection (Forgejo Primary) `main` should be protected to satisfy constitutional governance (`all changes merge through pull requests`) and to require CI before merge. ## Required settings - Protected branch: `main` - Direct pushes disabled - Required approvals: `1` (or stricter) - Required status checks: - `ci-gates / checks` - Require signed commits: enabled ## Apply via script ```sh ./scripts/fj-enforce-branch-protection.sh ``` Optional overrides: ```sh EVERY_CHANNEL_FORGE_HOST=https://git.every.channel \ EVERY_CHANNEL_FORGE_REPO=every-channel/every.channel \ EVERY_CHANNEL_PROTECTED_BRANCH=main \ EVERY_CHANNEL_REQUIRED_CHECKS="ci-gates / checks" \ EVERY_CHANNEL_REQUIRED_APPROVALS=1 \ ./scripts/fj-enforce-branch-protection.sh ``` Token source order: 1. `EVERY_CHANNEL_FORGE_TOKEN` / `FORGE_TOKEN` / `CODEBERG_TOKEN` env var 2. `secrets/forgejo-api-token.age` (preferred) via `agenix` or `age` 3. `secrets/forge-token.age` or `secrets/codeberg-token.age` (compat) via `agenix` or `age` The token must have repository admin scope to edit branch protection.