Skip to content

fix(ci): the gate checks Felix out at a pinned felix-home commit, not whatever main held when the job ran - #23

Merged
LeavesJ merged 3 commits into
mainfrom
claude/gate-pin-felix
Sep 24, 2026
Merged

LeavesJ merged 3 commits into
mainfrom
claude/gate-pin-felix

Conversation

@LeavesJ

@LeavesJ LeavesJ commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

A workflow file, so this one is yours to merge.

The Check out Felix step gains ref: '685d37beedc4590a989ccd145db3069af8e7f76a', plus the comment recording why and what it costs. Nothing else changes: checkout was already v5.

Why. With no ref, the gate took felix-home's default branch as it stood when the job ran:

  • the verdict on a commit depended on when it was graded;
  • any felix-home merge, reviewed by nobody here, redefined this repository's green;
  • gate is the required check, and the auto-merge streak and the repair ceiling read its runs as evidence about this repository.

Measured: from 2026-09-03 to 2026-09-23, felix-home main took 132 commits under engine/harness and 12 under projects/elenchus, against 44 gate runs here in total (42 green, 2 red, no re-runs, no commit graded twice). So nearly every run was graded by an engine no earlier run had used. None of them has flipped a verdict yet; the exposure is real, the incident hasn't happened.

The pin. 685d37be is the merge of felix-home #328 (engine 0.49.168). It is also the commit the unattended repair workflow here is being pinned to in its own PR, so the repair loop's pre-push gate and this workflow grade with one Felix.

  • The first commit on this branch pinned bd740748 (engine 0.49.162), and its run passed: 1439 tests.
  • It moved because bd740748 predates felix-home #323's repair exit statuses, which the unattended workflow depends on.
  • This PR's latest run is the check that 685d37be passes this repository.

Why here and not elsewhere. A pull request that edits a workflow here is merged by you, never by Felix on green. A ref read from any other file would let a pull request choose the Felix that grades it and be merged on that grade.

The cost, recorded in the file.

  • projects/elenchus/gate.sh and the tables beside it in felix-home are read at the pin too, so changes to them reach CI only when the pin moves.
  • A local felix gate on a newer engine can disagree with CI until the pin moves.
  • Moving the pin is a PR like this one, and both workflows move together.

Related.

  • felix-home's renderer for this file now pins the same way and records the decision in the template (LeavesJ/felix-home#331).
  • A pin to 561b998 was written on 2026-09-03 on fix/arm-web-entrypoint-and-pin-ci and never pushed. This is the first pin on main.

Jarron Deng added 3 commits September 23, 2026 18:07
… whatever main held when the job ran

The Felix checkout carried no ref, so it took felix-home's default branch at
the moment the job ran. The verdict on a commit here therefore depended on when
it was graded, and any felix-home merge, reviewed by nobody here, redefined this
repository's green. `gate` is the required check on main, and the auto-merge
streak and the repair ceiling read its runs as evidence about this repository.
Between 2026-09-03 and 2026-09-23 felix-home main took 132 commits under
engine/harness and 12 under projects/elenchus, against 44 gate runs here in
total, so nearly every run was graded by an engine no earlier run had used.

Pinned to bd740748c76510e1fffaffdf23192cb2a5c61a97, felix-home main on
2026-09-23, which carries engine 0.49.162, the version deployed locally. A
full sha because a branch or tag can move. The pin sits in this workflow file
because a ref read from any other file would let a pull request choose the
Felix that grades it.

What it costs, recorded in the file: projects/elenchus/gate.sh and its tables
in felix-home are read at the pin too, so changes to them reach CI only when
the pin moves, and a local felix gate on a newer engine can disagree with CI
until it does.

A pin to 561b998 was written on 2026-09-03 on fix/arm-web-entrypoint-and-pin-ci
and never pushed; this is the first pin on main.
…s quoted

A review of the matching felix-home template found two things true here too.
The comment said the pin sits in this file because a ref elsewhere would let a
pull request choose its own judge; a pull request can still edit this file and
be graded by the Felix it names. What stops that grade from merging it is that a
workflow change here is merged by the founder, never by Felix on green (the
execute escape channel), and the comment now says so.

The sha is quoted so YAML reads it as a string whatever it holds. This one
parses as a string either way; a later pin made of digits and one e would not.
…ed repair pins

bd740748 predates felix-home #323's repair exit statuses, so the unattended
workflow here cannot pin it. Both workflows now name 685d37be, the merge of
felix-home #328 (engine 0.49.168), so the repair loop's pre-push gate and the
gate workflow grade with one Felix. This pull request's own run re-grades
Elenchus with that engine before it becomes the definition of green.
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