Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .claude/skills/ci-gates/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5045,3 +5045,78 @@ had not.
reach for while using it**, and those are where a wrong list quietly becomes a
wrong plan. The tell was the classification coming out nonsensical — zero
training assertions in a file that is mostly training assertions.

## 125. "The most recent N" cannot answer "has X happened since T"

I opened an issue asserting a repository-wide CI outage: *required checks have
not fired since 2026-08-24 11:06; every PR since is permanently BLOCKED.* It had
a measurement, a five-row table of refuted hypotheses, and a sharp closing
observation. **It was wrong.** The checks had not started yet. Twenty minutes
later both branches showed 30+ checks.

Two instrument errors compounded, and neither was visible from inside the
conclusion.

### `gh run list --limit N` is a recency window

The last 10, then 60, runs were dominated by two workflows that fire on every
push. I read *"the only workflows running are NotebookLM"* off a list that had
simply not reached back far enough. The API's own filter says otherwise:

```
gh api "repos/…/actions/runs?created=>2026-08-25" → 103 runs
pull_request: 39 push: 31 schedule: 14 issues: 10
```

**A query that returns the most recent N cannot answer a question about a time
range.** It answers "what is newest", and if something noisy is newest,
everything else is invisible at any N you are willing to read.

### I queried the wrong workflow and believed the answer

`--workflow=now-sync-gate.yml` returned runs ending 08-24, which I took as *"the
required check stopped firing"*. The required context `check-now-freshness` is
produced by **two** files, and the run that satisfies it displays as
**"Check Now Freshness"** — a name I never searched for, because I had gone
looking by filename.

One file answered honestly. The check came from somewhere else.

### The shape of the error

Every row of my "what is NOT the cause" table was **correct**. Actions enabled,
workflows active, files present, no branch filter, no path filter, identical
trigger on a workflow that did run. I eliminated hypotheses carefully and
thoroughly — around a premise I never tested.

**A well-run elimination over a false premise produces more confidence than a
sloppy one.** The table was what made the issue persuasive, including to me.

### What would have caught it, and it is embarrassing

Waiting. The difference between "has not started" and "will never start" is
time, and nothing else. I had already written §116's lesson — *prefer the answer
with more structure* — and the structured answer here was available the whole
time: `created=>` returns a range, `--limit` returns a window.

The check that costs nothing: **before reporting an absence, ask the same
question with a different instrument.** Not a second opinion on the conclusion —
a second instrument for the observation.

### One thing in it was true and worth keeping

`gh pr checks` on a PR whose checks have not started shows a short **green**
list: two successes, zero failures, indistinguishable at a glance from a PR that
passed thirty-three gates. Both of the workflows I wrongly accused carry a
comment saying exactly that — *"An absent check is not a passing check"* — which
is why the outage reading was plausible enough to write down.

The hazard is real. The outage was not. **A true observation is not evidence for
the theory it made you think of.**

### Withdrawal is cheap; a standing wrong issue is not

Closed within the hour with the correction as the closing comment, because the
issue named an owner action that did not exist. The campaign rule stands: a
finding that survives a genuine attempt to kill it is worth acting on, and I
never attempted to kill this one — I only attacked its alternatives.
Empty file.
Empty file.
Empty file.
Empty file.
1 change: 0 additions & 1 deletion chips/euler
Submodule euler deleted from 73b9f0
1 change: 0 additions & 1 deletion chips/gamma
Submodule gamma deleted from a90a3d
1 change: 0 additions & 1 deletion chips/phi
Submodule phi deleted from f54566
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# NOW -- A well-run elimination over a false premise (2026-08-27)

## A well-run elimination over a false premise (Refs #2161)

- Refs #2161. I opened an issue asserting a repository-wide CI outage -- required checks not fired since 2026-08-24, every PR permanently BLOCKED -- with a measurement and a five-row table of refuted hypotheses. It was WRONG. The checks had not started yet; twenty minutes later both branches showed 30+ checks. Closed within the hour
- Two instrument errors compounded. `gh run list --limit N` is a RECENCY WINDOW, not a census: the last 60 runs were all NotebookLM, which fires on every push, so everything else was invisible at any N I was willing to read. The API `created=>` filter returns 103 runs over the same span, 39 of them pull_request
- And I queried by FILENAME. `--workflow=now-sync-gate.yml` returned runs ending 08-24; the required context check-now-freshness is produced by two files, and the run that satisfies it displays as "Check Now Freshness" -- a name I never searched for. One file answered honestly; the check came from elsewhere
- EVERY ROW of my "what is NOT the cause" table was correct. Actions enabled, workflows active, files present, no filters, identical trigger on a workflow that did run. I eliminated hypotheses carefully around a premise I never tested -- and a well-run elimination over a false premise produces MORE confidence than a sloppy one. The table is what made it persuasive, including to me
- The cheap check: before reporting an ABSENCE, ask the same question with a different instrument. Not a second opinion on the conclusion -- a second instrument for the observation. A query returning "the most recent N" cannot answer "has X happened since T"
- One thing in it was true and worth keeping: `gh pr checks` on a PR whose checks have not started shows a short GREEN list, indistinguishable at a glance from a PR that passed 33 gates. Both workflows I wrongly accused carry the comment "An absent check is not a passing check". The hazard is real; the outage was not. A true observation is not evidence for the theory it made you think of
Empty file removed proofs/gravity/dl_bounds.vok
Empty file.
Empty file removed proofs/gravity/dl_bounds.vos
Empty file.
Empty file removed proofs/sacred/gamma_phi3.vok
Empty file.
Empty file removed proofs/sacred/gamma_phi3.vos
Empty file.
Empty file removed proofs/sacred/l5_identity.vok
Empty file.
Empty file removed proofs/sacred/l5_identity.vos
Empty file.
Empty file removed proofs/trinity/AlphaPhi.vok
Empty file.
Empty file removed proofs/trinity/AlphaPhi.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/Bounds_Gauge.vok
Empty file.
Empty file removed proofs/trinity/Bounds_Gauge.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/Bounds_Masses.vok
Empty file.
Empty file removed proofs/trinity/Bounds_Masses.vos
Empty file.
Empty file removed proofs/trinity/Bounds_Mixing.vok
Empty file.
Empty file removed proofs/trinity/Bounds_Mixing.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/CorePhi.vok
Empty file.
Empty file removed proofs/trinity/CorePhi.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/DarkMatterPhi.vok
Empty file.
Empty file removed proofs/trinity/DarkMatterPhi.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/FormulaEval.vok
Empty file.
Empty file removed proofs/trinity/FormulaEval.vos
Empty file.
Empty file removed proofs/trinity/H4Derivations.vok
Empty file.
Empty file removed proofs/trinity/H4Derivations.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/H4Lagrangian.vok
Empty file.
Empty file removed proofs/trinity/H4Lagrangian.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/Koide.vok
Empty file.
Empty file removed proofs/trinity/Koide.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/SMLagrangian.vok
Empty file.
Empty file removed proofs/trinity/SMLagrangian.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/Summary.vok
Empty file.
Empty file removed proofs/trinity/Summary.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/Tolerances.vok
Empty file.
Empty file removed proofs/trinity/Tolerances.vos
Empty file.
Empty file removed proofs/trinity/Uniqueness.vok
Empty file.
Empty file removed proofs/trinity/Uniqueness.vos
Empty file.
Empty file removed proofs/trinity/Unitarity.vok
Empty file.
Empty file removed proofs/trinity/Unitarity.vos
Empty file.
Empty file.
Empty file.
Empty file removed proofs/trinity/search_lemma.vok
Empty file.
Empty file removed proofs/trinity/search_lemma.vos
Empty file.
Empty file removed proofs/trinity/search_lemma2.vok
Empty file.
Empty file removed proofs/trinity/search_lemma2.vos
Empty file.
Empty file removed proofs/trinity/test_assert.vok
Empty file.
Empty file removed proofs/trinity/test_assert.vos
Empty file.
Empty file removed proofs/trinity/test_assert2.vok
Empty file.
Empty file removed proofs/trinity/test_assert2.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed research/toda_derivation.json
Empty file.
Empty file.
Empty file removed trios-coq/Physics/Avs96Safe.vok
Empty file.
Empty file removed trios-coq/Physics/Avs96Safe.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed trios-coq/Physics/Hysteresis.vok
Empty file.
Empty file removed trios-coq/Physics/Hysteresis.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file removed trios-coq/Physics/PowerState.vok
Empty file.
Empty file removed trios-coq/Physics/PowerState.vos
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Loading