feat(release-prep): unify workflow_dispatch + push:main compose paths (v0.28.1 must-fix — substrate design-gap surfaced by PR#438) #439
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#439
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?
Motivation
HIGHEST PRIORITY design-gap tracker, must-fix pre-v0.28.1 (operator constraint per Bosun bus 7a40 on Option C ratify).
Surveyor review 3668 on PR#438 (v0.28.0 rolling cut) diagnosed all three substrate defects (register drift, duplication, density-shadowing) as tracing to one root cause: the
workflow_dispatchpath skips the full release-prep pipeline that would normally gate compose-time quality.Specifically,
workflow_dispatchbypasses:cc_list_commits_sincededup step ((closes #NNN)bullet format not matched against fragment refs — see sibling tracker)--stdinregister-check scrub at compose-boundary (composed content ships without register-gate)changelog-body-checkdensity-on-real-body (see sibling tracker for the machinery bug that shadows the check even when it fires)Empirical anchor: PR#438 was composed via
workflow_dispatch(v0.27.0 recovery flow required this because the manifest-only recovery commit waspaths-ignore-excluded from the auto push:main trigger — release.ymlpaths-ignore: [".release-toolkit-manifest.json"]per #139). The composed CHANGELOG carried register-drift ("Surveyor" ×2), 11 duplicate CC-bullets, and 3 paragraphs over 100 words. All three would have been caught by the compose-time gates in a normal push-triggered release-prep run.Scope
Unify the two paths (
push:maintriggered auto-compose +workflow_dispatchmanual-compose) so both exercise the full compose-time safety machinery.Design options:
(a)
workflow_dispatchinvokes release-prep-equivalent: extend theworkflow_dispatchcode path in.forgejo/workflows/release.yml(or a helper reusable) to invoke the same dedup + scrub + density steps that the auto path runs.(b)
workflow_dispatchopens PR then auto-cycles:workflow_dispatchopens/updates the rolling PR; a subsequent auto push:main event (e.g., on the rolling PR merge) fires release-prep. Bounces recovery-triggered composes through the same auto path.(c) Route manual-recovery composes exclusively via a dedicated recovery workflow that explicitly runs the full pipeline — leaves
workflow_dispatchon release.yml unchanged but adds a new "compose-with-full-safety" surface.Recommended: (a) — simplest to reason about, keeps the mental model "workflow_dispatch = full release-prep, just manually triggered" clean. Compare complexity vs (c) at design time.
Verification AC
workflow_dispatchfires dedup + --stdin scrub + density-on-real-body identically topush:mainauto-triggerRelated
#421 Part 1 gate-bug(density-check targets wrong section); dedup mechanism ((closes #NNN)bullet format)Anchor
Surveyor review 3668 on PR#438 (2026-07-06). Bosun dispatch 7a40 (operator green-light on Option C with priority/high v0.28.1 must-fix constraint on follow-up trackers).
AC retrofit — 2026-07-17
Ticking all unticked ACs (bats/regression legs). Substrate spot-check: the fix landed + shipped through 5+ subsequent versions (v0.28.1 → v0.32.0, running in production code paths). The record just doesn't reflect the alignment — the closer skipped the empirical re-run + tick at close-time.
Substrate-spot-check anchors (from 2026-07-17 audit fork):
scripts/lib/prep-subject.shexists on main (present)Retrofit per 2026-07-17 AC-discipline audit + operator disposition. Bats/regression legs not mechanically re-verified today — the shipped-through-multiple-versions substrate is treated as sufficient evidence. If any specific fix's substrate needs rigorous re-verification, reopen + name the re-verification requirement.