Skip to content

fix(ci): run CI on a pull request whose base is not main - #92

Merged
forkwright merged 1 commit into
mainfrom
fix/ci-pull-request-trigger-scope
Aug 16, 2026
Merged

fix(ci): run CI on a pull request whose base is not main#92
forkwright merged 1 commit into
mainfrom
fix/ci-pull-request-trigger-scope

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Finding

.github/workflows/ci.yml scoped its pull_request trigger to branches: [main]. That filter
matches the pull request's base, so a PR opened against any branch other than main matched
nothing and no CI run was ever created for it.

That is not a pending check or a slow check. It is an absent one — which renders as a PR with a calm
status area and nothing red on it, indistinguishable from a PR whose checks all passed.

Evidence

Two PRs shipped unverified through this in a single session:

heurema already carries the unfiltered form, so this is not a new convention — it is bringing this
repo to a shape the fleet already proves out.

Why this matters

The filter withdraws verification from exactly the case that needs it most: a dependent change
written against a contract that has not merged yet. Stacked PRs are the shape the fleet's process
produces whenever one unit depends on another, so this silently un-verifies the work most likely to
be built on an assumption.

It is also a live instance of PHILOSOPHY.md § an instrument must be able to be wrong: a check
that cannot run teaches every reader to skim past its absence.

Desired correction

Drop the branches filter from pull_request only. push: branches: [main] is unchanged — that one
is correct, and is what prevents duplicate runs.

on:
  pull_request:
  push:
    branches: [main]

The class fix — a basanos rule so the next repo cannot inherit this — is tracked at
forkwright/kanon#3475.

Done when: a PR whose base is not main produces an actual CI run in this repo.

Refs forkwright/kanon#3475

A branches filter on pull_request matches the PR's BASE, so scoping it to main
meant a stacked PR created no CI run at all — not a pending check, an absent one,
which reads as a calm status area rather than a missing verifier.

Two PRs shipped unverified this way: epistole #98 (asserted idempotency nothing
had executed) and pinax #11 (3,510 lines that produced 42 compile errors the
first time anything built them).

push: branches: [main] is unchanged; it is what prevents duplicate runs. This is
the shape heurema already uses.

Refs forkwright/kanon#3475
@forkwright
forkwright merged commit 4358b47 into main Aug 16, 2026
10 checks passed
@forkwright
forkwright deleted the fix/ci-pull-request-trigger-scope branch August 16, 2026 01:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant