Skip to content

ops(governance): resolve declared-versus-live central review-policy drift #1351

Description

@seonghobae

Current governance decision — 2026-09-02

Issue #772 resolves the policy ambiguity this issue originally tracked. The fleet has one human maintainer and no independent human reviewer capacity, so a generic positive human-approval count, last-push approval by another person, or mandatory CODEOWNER approval by the same sole author is structurally unsatisfiable. Do not manufacture independence with bot approvals, service accounts, broadened reviewer credentials, or routine administrator bypasses. Remove the impossible generic human-approval gates while keeping deterministic admission evidence fail-closed.

Target contract:

  • required_approving_review_count = 0;
  • require_last_push_approval = false;
  • require_code_owner_review = false while the sole code owner is also the author;
  • required_reviewers = [] unless governance later identifies a genuinely independent human authority;
  • required review-thread resolution and stale-review handling remain enabled;
  • required OpenCode, Noema, Strix, Security/SAST, Dependency Review, coverage/provenance and other deterministic gates remain authoritative;
  • deletion and non-fast-forward protections remain enforced;
  • only merge and squash are accepted by the current audit; and
  • routine OrganizationAdmin/always bypass is forbidden. Emergency repair belongs to a separately governed, time-bounded, auditable break-glass path.

This does not authorize direct protected-branch writes, self-approval, synthetic approvals, predecessor-evidence transfer, or weaker deterministic workflows.

Fresh live drift

Current consumer read of inherited organization ruleset 18156473 still shows required_approving_review_count = 1, require_last_push_approval = false, require_code_owner_review = false, required_reviewers = [], default-branch-only scope, merge/squash methods, deletion/non-fast-forward protection, and OrganizationAdmin/always bypass.

Current owner-repository ruleset 17921150 has required_approving_review_count = 0, require_last_push_approval = false, require_code_owner_review = false, required_reviewers = [], required review-thread resolution, deletion/non-fast-forward protection, but still allows rebase in addition to merge/squash and still contains OrganizationAdmin/always bypass. Both live rulesets therefore remain out of contract for distinct reasons.

Canonical source lanes

PR #1176 remains the canonical executable audit/documentation writer. Its current writer includes test-first regressions for the solo-maintainer approval/CODEOWNER deadlock followed by production auditor repair in both organization and repository ruleset paths. It preserves current protected-main work through ordinary non-force integration and exact protected-main blobs. Do not persist volatile #1176 head SHAs, protected-main SHAs, run IDs, queue counts, review snapshots, or mergeability here; fetch them live immediately before every action. A full-tree comparison must prove that only intended governance paths differ, and every check/review must belong to the then-current exact head.

PR #1644 is now the canonical source-controlled owner-plane reconciliation lane for actually closing the declared-versus-live settings gap after review. It pins exactly rulesets 17921150 and 18156473, preserves unrelated live controls, projects the full reviewed pull-request policy (including stale-review dismissal and required thread resolution), removes routine bypass actors, binds callable and CLI mutation to an exact protected-main SHA, and uses immutable ruleset history to detect/recover unsafe write races. A newly reproduced delayed-recovery race is covered test-first: an ambiguous recovery PUT must settle against immutable history before any subsequent write, never blind-retry. The privileged apply job remains gated by trusted protected main, explicit CWL_RULESET_RECONCILE_ENABLED=true, the protected ruleset-governance-maintenance environment, and a separately provisioned least-privilege CWL_RULESET_ADMIN_TOKEN.

Source availability is not live convergence. The connected GitHub tool surface still exposes direct ruleset reads but no organization/repository ruleset-settings write action; #1644 supplies the reviewed Actions owner-plane path only after it reaches protected main and the dedicated environment/credential is provisioned. Do not represent live settings as repaired until an authorized controlled apply actually occurs and fresh full-payload reads plus the canonical audit verify both scopes.

Acceptance

  • Source audit, fixtures, rollout documentation, issue guidance, owner-plane reconciler, and live organization/repository rulesets agree on the satisfiable solo-maintainer policy.
  • Tests accept 0 approvals / last-push disabled / CODEOWNER-review disabled and reject a positive generic approval count, synthetic reviewers, CODEOWNER deadlock, routine bypass actors, disabled stale-review dismissal/thread resolution, missing required workflows, deletion/non-fast-forward weakening, undeclared rules, malformed merge-method payloads, or merge-method drift.
  • Privileged reconciliation requires an exact protected-main SHA at every callable/CLI mutation boundary, fails closed on visible drift, and never repeats an ambiguous write until immutable history proves the prior outcome.
  • The current fix(governance): enforce satisfiable solo-maintainer rulesets #1176 and fix(governance): automate ruleset owner-plane reconciliation #1644 exact heads have terminal current-head deterministic evidence; queued/pending/skipped-required/cancelled/failed/stale evidence is never promoted.
  • Final post-change reads prove complete live payloads and inheritance on representative consumers.
  • An unchanged deterministic-GREEN sole-maintainer canary (Orgmetra PR 🛡️ Sentinel: [CRITICAL] CI 게이트 우회 방지를 위한 Python JSON 정규화 강제 적용 #88) is no longer blocked solely by nonexistent independent human approval, while real deterministic failures remain blocking.
  • No admin bypass, direct protected-branch write, self-approval, synthetic review, force update, or predecessor-evidence reuse is used.

Related owner work: #772, #1200, #1340, PRs #1176/#1644, and Orgmetra #88/#89.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ci-cdCI, GitHub Actions, checks, release, or supply chainbugSomething isn't workingpriority: highHigh-priority or P1 workstatus: blockedBlocked by conflict, dependency, or required prerequisitetype: bugDefect or incorrect behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions