Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R3/S3.
F303 A gate that did not run on every push let red suites and drift reach the main branch unremarked
| Field | Value |
|---|---|
| Status | active |
| Topic | Gates, verification, and hooks against instructions |
| Grade | R3/S3 |
| Cases | Shio, freewilly |
| Contrary | none |
| Harness facts | none |
Claim
Where a gate ran only when somebody chose to run it, by hand or by manual dispatch, failures reached the main branch and stayed there across many commits with no commit message naming them, in two projects; both restored the gate to every push.
Mechanism
A gate the agent must decide to run is a written rule in practice (see F300): it holds only in the sessions that remember it. A workflow triggered by every push makes the colour visible without anyone choosing to look, and a failure then reaches the next commit's author whether or not they ran anything.
Observations
- Shio. Two suites were red at the head of the branch: "Eleven commits landed over the first and eight over the second, and no commit message" [shio@821f18d74:.github/workflows/suites.yml#L4]
mentions either, because every other workflow was dispatch-only and a red run was "only ever visible to somebody who had already decided to run it locally" [shio@821f18d74:.github/workflows/suites.yml#L6]. The index restates it: "There is no third state, and the third state cost nineteen commits over" [shio@821f18d74:agents.md#L171] "two red suites that nobody mentioned" [shio@821f18d74:agents.md#L172]. SH579 [shio@9b7183ddf] added the workflow on push and pull request [shio@821f18d74:.github/workflows/suites.yml#L19-L22] and a ledger of dated exceptions whose test works "so a forgotten exception goes red instead of quiet" [shio@821f18d74:red-suites.json#L2].
- freewilly. The lint workflow was deleted on 2026-08-19 as a "workflow as it is no longer needed" [freewilly@cd630d6],
and the contributor guide said "Run it yourself before pushing" [freewilly@c1c2eaf:CONTRIBUTING.md#L13]. It was restored on 2026-08-29, "put lint back in CI" [freewilly@714360e], and the CI header records what happened between: "drift arriving by any other route, which for a while reached" [freewilly@c1c2eaf:.github/workflows/check.yml#L15] main. The guide was not updated back and still describes the gap at the pin [freewilly@c1c2eaf:CONTRIBUTING.md#L31-L33].
- polyweave. The code gates run only on the author's machine: the instruction file says "and the gates are" [polyweave@6d1c136:CLAUDE.md#L8]
pytest and ruff, git grep -n -e pytest -e ruff 6d1c136 -- .github finds no match, and the site workflow opens "so this is the whole CI" [polyweave@6d1c136:.github/workflows/site.yml#L1]. The record that they ran is self-reported: git log 6d1c136 --grep=Gates: --format=%h counts 18 of 132 commits, as in "Gates: ruff clean, 1161 tests (6 new), site 30/30." [polyweave@fae7981] No failure is recorded either way, so this is the condition the claim is about, not an observation of its outcome.
- roadkeep. The project states the rule, "A gate that runs only on a developer's machine is not a gate" [roadkeep@91754240:action.yml#L3],
and its CI runs its lint through its own action, "uses: ./" [roadkeep@91754240:.github/workflows/gate.yml#L33], and its tests on every push. No incident of a local-only gate is recorded.
- winwright. A scoped exception by design: after WW474 the half of the suite that needs an
interactive desk runs only locally, in a guest, because "The desk half is gated on the guest before any commit" [winwright@7a37e95] and a hosted runner cannot answer it (F304). The desk-free half still runs on every push [winwright@861b82e:.github/workflows/ci.yml#L66-L71].
Independence
Two independent origins: Shio's dispatch-only workflows and freewilly's deleted lint workflow, each a decision and an incident of that project. roadkeep's rule is a statement without an incident and adds no origin; polyweave records the condition without an outcome.
Counter-evidence
polyweave ran its Python gates only locally for its whole three-day history with no recorded failure, but also with no record of the gates on 114 of 132 commits, so it neither supports nor contradicts the claim. winwright's local desk gate is a deliberate exception scoped to tests that a hosted runner cannot run; its sources record no red that landed through it, and also no audit that would find one.
Grade
R3: independent incidents in two projects. S3: Shio's is counted (eleven and eight commits over two red suites, nineteen in all). freewilly's is a dated incident without a count (S2). Not S4: Shio's ledger test and workflow encode the remedy, but no source at the pin records the workflow catching a red.