main in github.com/justmert/veristar. They make
every change go through a reviewed pull request with passing checks, which is the control that
stops a single compromised account or a careless push from changing the tracker, the Caddy
deny lists or the infrastructure code (threat-model.md).
Current state: not applied, and not enforceable yet
Two things block this today:- Plan. The repository is private and owned by a personal account on GitHub Free. GitHub’s
REST documentation states: “Protected branches are available in public repositories with
GitHub Free and GitHub Free for organizations, and in public and private repositories with
GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server.” Checked
against the repository on 2026-11-13:
gh api repos/justmert/veristar/branches/main/protectionanswered403 Upgrade to GitHub Pro or make this repository public to enable this feature.Protection can be applied once the repository is public (planned, needs the owner’s explicit confirmation) or the owner moves to a paid plan. - GitHub Actions fails at startup on this account. Every workflow, even a one-step echo,
ends in
startup_failure(plan, phase 1 status). Required status checks would then never report success, so every pull request would be blocked. Protection can be applied, but it cannot be enforced meaningfully until the owner fixes GitHub Actions for the account. Until then the checks below are run locally withmake ci-local(scripts/ci-local.sh, the same jobs and make targets asci.yml) and their output is reported by hand. That is not a recorded GitHub run.
Required settings
With one approving review required and administrators included, a merge needs a second person
with write access. The owner must add at least one reviewer before applying this, or
main can
no longer be changed.
Required status checks
GitHub names a check run after the job’sname:, or after the job id when the job has no
name:. None of the jobs below sets name:, so the check names are the job ids. Only jobs that
run on pull_request can be required; a job that runs only on tags or a schedule never reports
on a pull request and would block every merge.
Read from .github/workflows/*.yml on 2026-11-13:
Command to apply
Run as the repository owner with agh token that has admin rights on the repository. The body
follows PUT /repos/{owner}/{repo}/branches/{branch}/protection: required_status_checks,
enforce_admins, required_pull_request_reviews and restrictions are required fields;
dismissal_restrictions is omitted because it is only available for organization-owned
repositories; restrictions is null for the same reason.
PUT body above was.
Check the result:
Keeping this current
When a workflow job that runs on pull requests is added, renamed or given aname:, update the
table and the checks list above, then apply the command again. A required check that no longer
exists blocks every pull request.