Skip to content

Nothing notices when a repo gains CI that gates no merge #3

Closed

Description

@CameronBrooks11

Filed alongside #2, which documents the ruleset. This is the part the documentation cannot fix by itself.

The gap

blockspec, research and .github have rulesets requiring a pull request, but no required status checks, because none of them has CI of its own yet. That is correct today — requiring a check nothing produces blocks every merge forever.

It is a trap tomorrow. Adding a workflow to a repository does not add it to the ruleset. So the moment blockspec gains a conformance suite, it gains a suite that runs on every PR, goes green or red, and gates nothing. Nobody would notice: the tick appears, the merge proceeds, and the only difference between a passing suite and a suite whose results are ignored is invisible on the PR page.

That is §2.2 exactly — a check that cannot fail reporting a pass — relocated from the code into the repository settings, which is the one place this project has not been looking.

The second-order version

Required checks are matched by job name. Renaming a job does not fail the rule; it makes the rule match nothing. rowspec currently pins four names — conformance, xlsx-extra, passes-on-a-good-tree, fails-on-a-broken-total — and xlsx-extra is nine days old, so the vocabulary is not stable yet.

What would actually close it

Documentation will not, and #2 only writes the hazard down.

  • A check that compares the ruleset against the workflows. For each repository, enumerate the job names the workflows define, enumerate the contexts the ruleset requires, and fail on a job that is not required or a required context no job produces. Run it on a schedule and on every change to a workflow file. It is a few lines against two API endpoints, and it is the only form of this that cannot silently stop working.
  • An org-level ruleset would cover a new repository automatically, but not a new workflow, so it solves the smaller half.

Acceptance

  • A check exists that fails when a workflow job is not in the ruleset, or a required context matches no job.
  • Its red state is demonstrated in both directions: add an unrequired job and watch it fail; require a context no job produces and watch it fail.
  • blockspec, research and .github are picked up automatically when they gain their first workflow, rather than depending on someone remembering.

Activity

  1. CameronBrooks11 commented on Oct 7, 2026

    @CameronBrooks11
    MemberAuthor

    scripts/check_required_checks.py landed in #10, after three review rounds. Its self-test runs 59 of 59, and its mutation sweep catches 49 of 49 mutants with 0 broken. Live: --public-only gives 0 findings, and default mode exits 2 because one repository's rules can't be read on the free plan.

    Still open here:

    • Nothing runs it on a schedule yet. A daily workflow with contents: read and --public-only would do it; the default GITHUB_TOKEN path hasn't been exercised in Actions.
    • Known gaps from the third review. Each is a workflow GitHub would reject, so the required check never reports and merges block loudly rather than passing silently:
      1. pull_request with both branches and branches-ignore is read using only branches-ignore;
      2. duplicate mapping keys are accepted, last one wins;
      3. a repository with Actions disabled but workflows still active is not detected, because actions/permissions is never read.
  2. CameronBrooks11 commented on Oct 8, 2026

    @CameronBrooks11
    MemberAuthor

    All three acceptance bullets are met.

    Still open in #22: producers the audit does not read yet (pull_request_review, deployment, and two jobs of one workflow).

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions