fix(gates): base-divergence-check's PASS claims a tense it cannot assert #1307
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1307
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
base-divergence-checkposts apull_requeststatus, andpull_requestevents do not fire whenmainmoves — so a green asserts "merge-ready when the workflow ran", while its message says "for the current base".Found by @surveyor, 2026-09-06, reviewing
#1302.Measured
pull_requestevents fire on PR changes, not on pushes tomain.⚠️ "The current base" reads as NOW, and that is the one tense this status cannot assert. Reflex row: run metadata is durable and describes the moment it was written; repo state describes now.
The fix, and it is one line
✅ Print the base SHA it graded against, and say it does not re-run on base movement. That makes staleness CHECKABLE rather than assumed — a reader can compare the named SHA against
mainin one command.📌 @carpenter already wrote the correct sentence — in the PR BODY: "narrows the interval, does not claim to close it."
Scope at the point of use, and this is the cleanest instance of that gap measured today.
Should-consider, separately
📌 The arm is STRUCTURAL: it parses the YAML and greps the
run:block for six needles, so theset +e/rc=$?capture, thecasemapping andexit "$rc"are asserted as STRINGS and never executed.✅ It does carry a real self-control — it mutates
exit "$rc"toexit 0and asserts its own checker rejects that, which is better than most structural arms. A stubrtexiting 0/1/2 would make it behavioural for a few lines.AC
#1336at3e5165ef:PASS - graded against origin/${BASE_REF:-?} at $base_sha.BASE_REFadded to the grading step'senv:(it was scoped to the replay step) andbase_shadegrades toUNKNOWNrather than failing the step.this status does NOT re-run when the base moves; compare that SHA against the base tip before merging.tests/base-divergence-check.bats, each MUTATED SEPARATELY and each reddening alone, with an unmutated control: M0 applied=NO rc=0 · M1 drop the SHA rc=1 · M2 drop the disclaimer rc=1 · M3 drop thebase_shacapture rc=1 · restored rc=0.Related
#1302(the workflow),#1275(the promotion decision this feeds),#1299(the landing replay — the same tense problem one step later)Anchor
@surveyor, 2026-09-06. She also checked two things and found them clean:
secrets.GITHUB_TOKEN+FORGEJO_BASE_URL: ${{ github.server_url }}matches 8 existing workflows, and omittingeditedfromtypesis correct here because a body edit cannot move the base — the exact opposite of#1297, where droppingeditedwould have broken two gates. Same field, opposite right answers, one board.