The documentation for GitHub Settings as Code, in four groups. Start here if the README told you what the action does and you want to know how to put it to work: the start pages are enough to get a repository under management, and the rest are there when their topic comes up.
- Getting started: create the PAT, add the workflow, run your first check, and read the drift output.
- Migrating from the Probot Settings app: the step-by-step move, including the parts that changed on purpose and an org-scale shadow run.
- Examples: a settings.yml cookbook, from a minimal
file to a full-featured one, including what
nullmeans where it is meaningful.
- Semantics: stateless, declared-keys-only, convergent applies, softenable errors, retries, and the preflight barrier.
- Token permissions: which grant each section
needs, how a denial surfaces, and the
on-missing-permission/required-sectionspolicy. - The undeclared policy: the
undeclaredknob on the list sections, per-section defaults, the milestone-deletion caveat, and how the policy layers with a defaults file. - Forward compatibility: where payloads pass through verbatim and which sections are deliberately closed.
- Secrets and vaults: the
$NAMEreferences secret fields take, wiring them from GitHub Secrets or a vault action, and what check mode can and cannot verify.
- Check mode: drift detection on a schedule, exit codes, and what a "cannot verify" note is telling you.
- Multi-repo mode: manage a fleet from one admin repository with defaults, per-repo files, and discovery.
- Private repositories: the redaction that keeps private targets out of public logs, and the private-report channels.
- Troubleshooting: permission denials, ambiguous 403s, rate limits, debug logging, and a missing or stale bundle.
The playbooks compose the pieces above into end-to-end setups: ring rollouts, change previews, trust tiers between tokens, audit evidence, incident freeze, and decommissioning.
Contract tests pin the load-bearing claims to the code: the README's Sections and Inputs tables, COVERAGE.md, and specific claims inside undeclared policy, forward compatibility, private repositories, troubleshooting, and check mode - the defaults, counts, commands, and enumerations that must not drift. The rest is walkthrough prose: when a walkthrough and a pinned claim disagree, the pinned claim wins, so guides link to the claims rather than duplicating their exact wording.
The settings examples in these pages are validated in CI against the real
schema (test/docs/guides.test.ts): every fenced block tagged yaml settings
must be a valid settings document, and a settings-shaped block without the tag
fails the build. If you edit a guide, tag your example blocks.