pr-gates welds fragment coverage to fragment density, so an adopter that declines coverage loses density too #1576
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1576
Loading…
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?
An adopter that cannot accept the fragment coverage requirement has to switch the whole fragments gate off, which takes the density gate down with it.
reusable-pr-gates.ymlexposesfragments: 'on'|'off'plus adensitysub-toggle, but nocoveragesub-toggle.gate_fragments()(scripts/pr-gates.sh:158) runs both legs and requires both green — coverage atFRAGMENT_CHECK_COVERAGE=required, density at=content. Density is reachable only by also adopting coverage, which demands a fragment or ano-changelog:body line on every PR.Measured:
frankenbit/storeypins v0.66.0 and setsfragments: 'off'(.forgejo/workflows/pr.yml:44), because its notes come from feat/fix subjects when a release carries no fragment (ADR-0012). Consequence: 5 of the 9 fragments in itschangelog.dviolate check 7 and were never graded at PR time. They surface at the cut, which is whatdensity's own description warns about one level down.Acceptance criteria:
reusable-pr-gates.ymltakes acoverageinput, default'true', symmetric todensity. - DONE @ #1577 (c9a5e6d510, reviewed asc9a5e6d510)coverage: 'false',gate_fragments()grades density only and the PASS line states coverage was not graded. - DONE @ #1577 (c9a5e6d510, reviewed asc9a5e6d510)FRAGMENT_CHECK_DENSITY. Exit 1 via the script's owndie, not exit 2 — see the comment below. - DONE @ #1577 (c9a5e6d510, reviewed asc9a5e6d510)tests/pr-gates.batspins the legs independently: coverage-off/density-on surfaces a density FAIL, coverage-on/density-off a coverage FAIL. - DONE @ #1577 (c9a5e6d510, reviewed asc9a5e6d510)Found by Quartermaster. Filed by the finder: Bosun's pane is stale, so the designated filer was unreachable.
Adopter instance:
frankenbit/storey#149, which is held atstatus/blockedon this one. It wants density grading and cannot take coverage-required, so today it runs neither.PR: #1577, head
4cc2982ffe6d7057475d183eed5a94abc79fdc6f.One AC amended rather than silently missed. I wrote "refuses with exit 2, as
densitydoes" before reading how the input layer refuses. rt returns 2 for a malformedFRAGMENT_CHECK_DENSITYbecause that is its config-validation rung, but a workflow input is validated inscripts/pr-gates.sh, wheredieexits 1 and already handles exactly this class — a gate switch that is neitheronnoroffrefuses that way today.Both fail the step, so nothing downstream reads the difference. I took consistency within the layer over matching a code from another one, and amended the AC so it states the contract the code actually has instead of one that could never be ticked truthfully. Happy to switch it to 2 if the reviewer prefers the cross-layer match.
Landed and closed by hand.
The landed commit IS the reviewed one:
forgejo/mainis byte-identical to the approved head, andgit range-diffreports=for both commits of the series, so nothing was replayed. Verified in the landed tree rather than in my branch:fragments_coverage_onappears 3 times inscripts/pr-gates.shandPR_GATES_COVERAGEis bound in all 7 jobs ofreusable-pr-gates.yml.Review 7476 raised four findings, all taken in a second commit on the same branch with no amend and no force-push: the blocking AGENTS.md section 11 ASCII violation, the unpinned
coveragedefault, the unpinned seven bindings, plusRefsand the section 2.1 note. One criterion above was amended mid-flight: it asked for exit 2, and the code refuses with exit 1 via the script's owndie, which review 7479 confirmed is the right rung for the input layer.No re-pin: toolkit-self floats
@main(AGENTS.md section 2.1), so the nextpush: mainruns this. Adopters pin@vX.Y.Zand get it from the next cut tag.Adopter follow-up is
frankenbit/storey#149, which was held atstatus/blockedon this one and is now unblocked.