Context
The Terraform workspace that manages this org's repository settings is built and validated, but no branch ruleset has been applied anywhere. The original design called for a strict ruleset (require a PR, require Build, Test & Release, block deletion and force-push) with github-actions[bot] as a bypass actor so KtsuBuild's release push to main would still work.
That design is not implementable. GitHub rejects it:
HTTP 422: Actor GitHub Actions integration must be part of the ruleset source or owner organization
orgs/ktsu-dev/installations lists only azure-pipelines (9426), sonarqubecloud (12526), claude (1236702), and ktsu-homelab-arc-runners (3409675). GitHub Actions is not an installed app, so it cannot be a bypass actor.
The 15368 value in the original design was a mistake. It was read from ImGuiApp's old ruleset, where it appears as integration_id inside required_status_checks, which names the app that reports a check. A bypass actor requires an app installed in the org. Different requirement.
The rest of the ruleset shape is valid. A ruleset with deletion, non_fast_forward, and pull_request, bypassed by RepositoryRole 5, was created and deleted successfully during testing.
Why it matters
github-actions[bot] holds write, not admin, so the RepositoryRole 5 bypass does not cover it. Any ruleset carrying a pull_request rule blocks KtsuBuild's metadata push to main and breaks releases across every repo it is applied to.
Options
- Guardrails only. Keep
deletion and non_fast_forward, drop pull_request and required_status_checks. Neither blocks a fast-forward push, so releases are unaffected and no bypass is needed. Zero changes required, applies cleanly today.
- Stop committing derived metadata to
main (see the KtsuBuild issue). Removes the push entirely, after which the strict ruleset works with no bypass actor at all.
- Strict plus an admin PAT in every workflow, so pushes come from an admin covered by
RepositoryRole 5. Not recommended: a long-lived admin PAT stored as a secret in 60 repos is a worse security position than the ruleset is worth.
Acceptance criteria
State today
github/checks.tf and github/rulesets.tf are committed but applied nowhere. No repo in the org has an active ruleset. ImGuiApp's previous ruleset was deleted because it was inert, its conditions.ref_name.include was an empty list, so it matched no branch and enforced nothing.
Context
The Terraform workspace that manages this org's repository settings is built and validated, but no branch ruleset has been applied anywhere. The original design called for a strict ruleset (require a PR, require
Build, Test & Release, block deletion and force-push) withgithub-actions[bot]as a bypass actor so KtsuBuild's release push tomainwould still work.That design is not implementable. GitHub rejects it:
orgs/ktsu-dev/installationslists onlyazure-pipelines(9426),sonarqubecloud(12526),claude(1236702), andktsu-homelab-arc-runners(3409675). GitHub Actions is not an installed app, so it cannot be a bypass actor.The
15368value in the original design was a mistake. It was read from ImGuiApp's old ruleset, where it appears asintegration_idinsiderequired_status_checks, which names the app that reports a check. A bypass actor requires an app installed in the org. Different requirement.The rest of the ruleset shape is valid. A ruleset with
deletion,non_fast_forward, andpull_request, bypassed byRepositoryRole5, was created and deleted successfully during testing.Why it matters
github-actions[bot]holdswrite, notadmin, so theRepositoryRole5 bypass does not cover it. Any ruleset carrying apull_requestrule blocks KtsuBuild's metadata push tomainand breaks releases across every repo it is applied to.Options
deletionandnon_fast_forward, droppull_requestandrequired_status_checks. Neither blocks a fast-forward push, so releases are unaffected and no bypass is needed. Zero changes required, applies cleanly today.main(see the KtsuBuild issue). Removes the push entirely, after which the strict ruleset works with no bypass actor at all.RepositoryRole5. Not recommended: a long-lived admin PAT stored as a secret in 60 repos is a worse security position than the ruleset is worth.Acceptance criteria
github/rulesets.tfreflects itState today
github/checks.tfandgithub/rulesets.tfare committed but applied nowhere. No repo in the org has an active ruleset. ImGuiApp's previous ruleset was deleted because it was inert, itsconditions.ref_name.includewas an empty list, so it matched no branch and enforced nothing.