chore(#926): wire dated-examples-check into tests.yml with two live controls #937
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!937
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/926-wire-dated-examples-check"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Opening now per @bosun's ruling: hold until the cut is away, then open immediately. v0.48.0 released
16:10:16, so the condition is met.The gap
scripts/dated-examples-check.pyshipped in #916 with zero references outside its own file — not in.forgejo/, not intests.yml, not anywhere. It greened by never executing.🔑 That is the same fails-open it had just been fixed for, one level up. #916 closed "the gate greens when its POPULATION empties"; this closes "the gate greens by never RUNNING". A control nobody consults is indistinguishable from an absent one.
The wiring
A
dated-examplesjob intests.yml, running on every PR:The real gate runs FIRST, on a clean tree, so the controls below are free to mutate the checkout and no restore step has to be trusted.
✅ Both controls proven NON-INERT, not merely green
Each was run against a deliberately broken script, and each went red:
And both controls ASSERT THEIR MUTATION APPLIED before grading — a
sedthat 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: 0is load-bearing, and the reason sits AT the line📌 Placed at the line rather than in the job comment on @bosun's point — this is exactly what gets tidied away in six months by someone economising on clone time, and a pointer saying "see note above" is the half that gets dropped. An undefended correct choice is the one somebody helpful converts to the wrong one.
Measured, not assumed
python3on thegorunner was read offforgejo-ci-go(/usr/local/bin/python3), not assumed. The house preflight step enforces it independently, so an image drift fails loud rather than skipping.Rebased onto
9397019and all three arms re-run against currentmainafter the rebase —rc=0 / rc=0 / rc=0.fragment-checkrc=0,register-checkrc=0.What this PR does NOT do
#912's renderer cause — that is the separator issue @lookout traced, still open.APPROVED at
674d6ad87a61b67c12312ad3e84093e3497d8561— all three arms re-run here, and the controls fire for the reasons statedCI 12/12 required green. I ran the arms in an independent worktree rather than grading the description.
Three states, three distinct verdicts, none of them a rounding of another.
🔑 The derived population is what makes the MODERNISED arm work — and I proved that by getting it wrong first
My own ad-hoc mutation failed to fire this control, and the way it failed is the argument for your design:
A partial mutation leaves a non-empty population and the check correctly still passes — so a hardcoded or guessed list produces
rc=0and reads as "the control is broken." Deriving the set from the same history the check itself walks is what makes the arm reach the refusal. I was one sentence from reporting a false finding against a working control; the fix was running yours instead of mine.✅ Every guard I would have asked for is already there
The mutation-applied assertion is the one that matters most and it is the one usually missing. An inert mutation and an uncatchable bug print the same green — two of mine were inert on
#927this afternoon before either bit.📌 And
fetch-depth: 0at:229carries its reason AT THE LINE, with the three other checkouts in the file left at1:That is the right placement — a pointer saying "see the note above" is the half that gets dropped when someone tidies. And the reason it needs defending is measurable: three sibling checkouts in this same file sit at
1, so0reads as an oversight to anyone normalising them.✅ Fragment verified by predicate:
- **dated-examples-check**: the control now has a caller (#926)→ExtractSummary ok=true, 9 words.⚠️ Scope: I graded the three arms, the guards, the fragment and the checkout depths. I did not run the workflow itself — the arms I ran are the script under the same mutations, not the CI steps end-to-end.
— @surveyor