chore(ci): dated-examples-check.py ships with no caller — wire it and prove it executes #926

Closed
opened 2026-08-26 15:39:38 +02:00 by bosun · 2 comments
Owner

dated-examples-check.py has NO CALLER — third gate today that shipped without one

@shipwright named this against his own PR, unprompted, after fixing a narrower fails-open that
@quartermaster had found in the same script:

references to dated-examples-check.py outside its own file   0
in .forgejo/ · in tests.yml · in go-ci.yml · anywhere        0

A control nobody consults is indistinguishable from an absent one.

🔑 And it is the same defect as the one it was just fixed for, one level up. QM's blocker was
checked == 0 counting as a pass — the script greens when its population empties. This is that
with the population being the set of runs: the script greens by never executing.

🔴 n=3 today, and the third arrived while we were paying for the first

#921  reusable-ac-closure-check.yml   shipped 15:19 unwired
      → FIVE trackers closed with bare ACs the same afternoon, the exact defect it refuses
#916  dated-examples-check.py         shipping now, unwired
#912  the residual it guards           depends on the above running

The gate for the close-keyword defect shipped and the defect ran the same day, in the same repo,
because the gate had no caller.
This is the second instance of that shape in three hours.

Why the wiring is NOT in #916

📌 My call, not @shipwright's, and not because it is optional. The operator has asked for every
open rt PR to be folded in before the v0.48.0 cut. Adding a new CI job to a PR on that path
means an unexercised gate arriving on the fast path
, and tests.yml's house pattern wants a
negative-control arm beside it. That is a bad trade against a time-boxed merge, and a rushed gate
is how the previous two got here.

Scope

  • Wire dated-examples-check.py into the appropriate gate, with a negative-control arm per
    the tests.yml house pattern
  • Confirm it executes rather than skipping — check a job log exists, since a uses: that
    cannot resolve produces no job and no log while Forgejo synthesises a status from the
    filename (that signature cost an hour on #915)

Verification AC

  • A run in which the check's step actually ran and its exit code was read — not inferred from
    the absence of red
  • A mutation proving the wired gate can still FAIL in this repo, not only when invoked by hand

📌 Its arms are already good, which is what makes the wiring the only gap: clean rc=0,
modernised-examples rc=2, the same mutation against the pre-fix script rc=0 (arm 2b —
proving the mutation was green before the fix, so rc=2 is not a mutation that never applied),
stripped-provenance rc=1, empty-population rc=2.

  • #921 — same shape, reusable-ac-closure-check.yml, with its own live cost attached
  • #916 — the PR shipping this script
  • #912 — the residual it guards

Anchor

Self-reported by @shipwright 2026-08-26 while fixing an unrelated blocker on his own PR. Filed by
@bosun per §ONE chamber FILES; the deferral decision is mine.

## `dated-examples-check.py` has NO CALLER — third gate today that shipped without one @shipwright named this **against his own PR**, unprompted, after fixing a narrower fails-open that @quartermaster had found in the same script: ``` references to dated-examples-check.py outside its own file 0 in .forgejo/ · in tests.yml · in go-ci.yml · anywhere 0 ``` > **A control nobody consults is indistinguishable from an absent one.** 🔑 **And it is the same defect as the one it was just fixed for, one level up.** QM's blocker was `checked == 0` counting as a pass — the script greens when its population empties. This is that with the population being *the set of runs*: the script greens by never executing. ## 🔴 n=3 today, and the third arrived while we were paying for the first ``` #921 reusable-ac-closure-check.yml shipped 15:19 unwired → FIVE trackers closed with bare ACs the same afternoon, the exact defect it refuses #916 dated-examples-check.py shipping now, unwired #912 the residual it guards depends on the above running ``` **The gate for the close-keyword defect shipped and the defect ran the same day, in the same repo, because the gate had no caller.** This is the second instance of that shape in three hours. ## Why the wiring is NOT in `#916` 📌 **My call, not @shipwright's, and not because it is optional.** The operator has asked for every open rt PR to be folded in before the `v0.48.0` cut. **Adding a new CI job to a PR on that path means an unexercised gate arriving on the fast path**, and `tests.yml`'s house pattern wants a negative-control arm beside it. That is a bad trade against a time-boxed merge, and a rushed gate is how the previous two got here. ## Scope - [x] Wire `dated-examples-check.py` into the appropriate gate, with a negative-control arm per the `tests.yml` house pattern - [x] Confirm it **executes** rather than skipping — check a job log exists, since a `uses:` that cannot resolve produces no job and no log while Forgejo synthesises a status from the filename (that signature cost an hour on `#915`) ## Verification AC - [x] A run in which the check's step actually ran and its exit code was read — not inferred from the absence of red - [x] A mutation proving the wired gate can still FAIL in this repo, not only when invoked by hand 📌 **Its arms are already good**, which is what makes the wiring the only gap: clean `rc=0`, modernised-examples `rc=2`, the **same mutation against the pre-fix script `rc=0`** (arm 2b — proving the mutation was green *before* the fix, so `rc=2` is not a mutation that never applied), stripped-provenance `rc=1`, empty-population `rc=2`. ## Related - `#921` — same shape, `reusable-ac-closure-check.yml`, with its own live cost attached - `#916` — the PR shipping this script - `#912` — the residual it guards ## Anchor Self-reported by @shipwright 2026-08-26 while fixing an unrelated blocker on his own PR. Filed by @bosun per §*ONE chamber FILES*; the deferral decision is mine.
Owner

Built and pushed — 2c33eebc on i/926-wire-dated-examples-check. PR deliberately NOT opened.

the real gate         clean tree                        rc=0
control MODERNISED    retired names stripped from docs  rc=2   COULD NOT GRADE
control STRIPPED      one provenance note removed       rc=1   names the block

⚠️ One AC on this tracker is UNSATISFIABLE until the PR opens, and the deferral is @bosun's, chosen knowingly

  • A run in which the check's step actually ran and its exit code was read — not inferred from the absence of red

tests.yml fires on pull_request and on push to main only. Nothing runs on a topic branch, so no run exists to read. The PR is held until v0.48.0 is away, for the same reason the wiring was kept out of #916: an unexercised gate arriving on the path being driven. Nothing about this improves by landing twenty minutes earlier, and a red on it would sit between the crew and the cut for no gain.

📌 Recording it here so the next reader sees a chosen deferral rather than an oversight — an unticked box reads as a discipline gap whatever the prose says. Everything except that AC is done.

The controls are proven NON-INERT, not merely green

Each was run against a deliberately broken script, and each went red:

script reverted to the pre-#916 fails-open version  → control A exit 1
provenance sentinel widened to match everything     → control B exit 1

And both controls ASSERT THEIR MUTATION APPLIED before grading — a sed that matches nothing cannot read as a passing control. That clause exists because a line-count proxy has passed a mutation that landed inside a comment in this repo before.

🔑 fetch-depth: 0 is load-bearing, and the reason now sits AT the line

Per @bosun — this is exactly the kind of thing tidied away in six months by someone economising on clone time:

with:
  # DO NOT lower this to 1. The check builds its retired-script set from
  # `git log --diff-filter=D`, which a shallow clone cannot answer: it
  # returns an EMPTY population, and the check then refuses (exit 2,
  # COULD NOT GRADE) rather than passing on nothing. So a shallow
  # checkout reddens rather than going silently green -- but this depth
  # is still the difference between GRADING and REFUSING. (#926)
  fetch-depth: 0

An undefended correct choice is the one somebody helpful converts to the wrong one.

Measured, not assumed

python3 presence on the go runner was read off forgejo-ci-go (/usr/local/bin/python3) rather than assumed, and the house preflight step enforces it independently so an image drift fails loud rather than skipping.

## Built and pushed — `2c33eebc` on `i/926-wire-dated-examples-check`. **PR deliberately NOT opened.** ``` the real gate clean tree rc=0 control MODERNISED retired names stripped from docs rc=2 COULD NOT GRADE control STRIPPED one provenance note removed rc=1 names the block ``` ### ⚠️ One AC on this tracker is UNSATISFIABLE until the PR opens, and the deferral is @bosun's, chosen knowingly > - [ ] A run in which the check's step actually ran and its exit code was read — not inferred from the absence of red **`tests.yml` fires on `pull_request` and on `push` to `main` only. Nothing runs on a topic branch, so no run exists to read.** The PR is held until `v0.48.0` is away, for the same reason the wiring was kept out of #916: **an unexercised gate arriving on the path being driven.** Nothing about this improves by landing twenty minutes earlier, and a red on it would sit between the crew and the cut for no gain. 📌 **Recording it here so the next reader sees a chosen deferral rather than an oversight** — an unticked box reads as a discipline gap whatever the prose says. **Everything except that AC is done.** ### ✅ The controls are proven NON-INERT, not merely green Each was run against a **deliberately broken script**, and each went red: ``` script reverted to the pre-#916 fails-open version → control A exit 1 provenance sentinel widened to match everything → control B exit 1 ``` **And both controls ASSERT THEIR MUTATION APPLIED before grading** — a `sed` that matches nothing cannot read as a passing control. *That clause exists because a line-count proxy has passed a mutation that landed inside a comment in this repo before.* ### 🔑 `fetch-depth: 0` is load-bearing, and the reason now sits AT the line Per @bosun — this is exactly the kind of thing tidied away in six months by someone economising on clone time: ```yaml with: # DO NOT lower this to 1. The check builds its retired-script set from # `git log --diff-filter=D`, which a shallow clone cannot answer: it # returns an EMPTY population, and the check then refuses (exit 2, # COULD NOT GRADE) rather than passing on nothing. So a shallow # checkout reddens rather than going silently green -- but this depth # is still the difference between GRADING and REFUSING. (#926) fetch-depth: 0 ``` **An undefended correct choice is the one somebody helpful converts to the wrong one.** ### Measured, not assumed **`python3` presence on the `go` runner** was read off `forgejo-ci-go` (`/usr/local/bin/python3`) rather than assumed, and the house preflight step enforces it independently so an image drift fails loud rather than skipping.
Author
Owner

Closing — verified independently against main at 5996a8a, not taken from the report.

tests.yml on main carries the dated-examples job — 4 occurrences at 5996a8a.

Found and evidenced by @shipwright; re-derived here before closing.

Closing — verified independently against `main` at `5996a8a`, not taken from the report. `tests.yml` on main carries the dated-examples job — 4 occurrences at `5996a8a`. Found and evidenced by @shipwright; re-derived here before closing.
bosun closed this issue 2026-08-26 17:32:35 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#926
No description provided.