fix(release-draft): drop broken auto-fire — operator-dispatch only (closes #41) #51
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!51
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/41-drop-auto-fire"
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?
What this does
Strips the broken
pull_request: types: [closed]auto-fire trigger fromrelease-draft.yml+docs/integration.mdtemplate.release-draftbecomes operator-dispatched only viaworkflow_dispatchwith an explicittaginput. Also removes.forgejo/workflows/debug-event-payload.yml(probe lifecycle constraint met).Why — substrate-honest #41 close
Three hypothesis-fixes today + research-fork grounding converged on: the auto-fire mechanic was never empirically working because Forgejo's Actions expression engine cannot reliably resolve
github.*/forgejo.*accesses pulling from thepull_requestevent payload on.closedevents. Falsifications:toJSON(github.event)shape mismatchgithub.head_reftop-level convenience fieldinputs.versiondespite the fix being inb45cd33's commit_shaResearch-fork grounding (Forgejo Actions reference doc):
forgejo.*namespace is documented as identical data togithub.*("the github context is defined to be the same as the forgejo context") — parity-by-definition; namespace-swap is the weaker hypothesis$FORGEJO_HEAD_REFin shell) IS a different code-path bypass, only needed if we stay on pull_request triggerspush: branches: [main]trigger + state-file manifest + git-log walk — zero pull_request expressions → zero expression-engine exposurePer the operator's stated preference (drifting/rolling release PR + single release action that fires on merge), the release-please-shaped redesign is the architectural target for the next sprint. This sprint formalizes the working reality.
The working reality
The auto-fire on
pull_request.closedhas never worked since #41 was filed. Every release cut today (v0.1.0 → v0.3.3) used the manualscripts/draft-release.shfallback. The "auto-fire" mechanic was actually "auto-fail" on every PR merge, producing failure-noise in the actions log. This commit removes that noise + matches the docs to the empirical truth.Operator UX after this lands: one extra
workflow_dispatchclick per release cut. Cuts are infrequent + the operator's already in the loop for every cut. Trivial.Probe removal
.forgejo/workflows/debug-event-payload.ymlis removed. The probe lifecycle constraint (per PR #42) said removal happens once #41 is root-caused. Root cause WAS found via the_release-draft.ymlreusable's failure-path log (the working uses:-reusable that DOES log), not via the probe (which never produced a log artifact — a separate substrate finding tracked at #47). The probe served its purpose by being the catalyst for the bisect arc; its lifecycle is done.Verification protocol (post-merge)
pull_request: closedtrigger is gone → NO release-draft task fires post-merge (period; no if-guard to evaluate). Verifiable viadocker compose exec forgejo find /data/gitea/actions_log/...showing no new release-draft.yml task entry.release-draftworkflow with explicittag: v0.3.4after merging the prep PR. Reusable produces draft cleanly; operator clicks Publish.What this PR does NOT do
_release-draft.ymlreusable — it's fine; the broken layer was the consumer-side wrapper"What this PR does NOT do" companion-discipline note
The
_release-draft.ymlreusable still does what it always did. The expression-engine bug only affects the OUTER consumer-side wrapper. Consumers who adopt v0.3.4 get the same operator-dispatch workflow + the reusable's full prep/draft semantics; nothing breaks for them.Closes #41. Refs #47.
✅ APPROVED — #41 substrate-honest closure (v0.3.4 slice 4)
The right close. Verified: workflow_dispatch-only, zero expression-engine exposure, probe removed, docs propagated, and the commit body is the cleanest substrate-record of the whole arc.
The fix — zero exposure to the bug
on: workflow_dispatchonly (pull_request trigger gone),taginputrequired: true,version: ${{ inputs.tag }}. Zerogithub.*/forgejo.*payload-expressions, zero pull_request — so nothing touches the broken code-path. The header comment documents the constraint honestly (names bothgithub.*ANDforgejo.*, per the parity finding, and points at the release-please direction for v0.4.0) so an adopter won't re-add the auto-fire. That's substrate-honesty doing its actual job: the doc tells the next person why the obvious thing doesn't work.Probe removed + docs match + bump clean
debug-event-payload.ymldeleted (lifecycle met — root-cause came via the reusable's failure-path log, not the probe).docs/integration.md: 0 stalepull_request/head_ref. Both bump-sources patch (fix:commit +.fixed.mdfragment, correctlyfix). And the commit message itself is a model arc-record — the 3 falsified hypotheses, the research grounding, the operator's call, the working-reality framing. Anyone readinggit loggets the whole story.⚑ One cut-time note (not this PR — the v0.3.4 cut)
changelog.d now holds five #41 fragments: 3 probe-
internal(workflow_dispatch / simplify / minimize) +head-ref.fixed(the falsified slice-3 attempt) + thisdrop-auto-fire.fixed. For the v0.3.4 CHANGELOG, that's the debugging arc, not five user-facing changes — the probe net-zero'd (added then removed) and the head_ref fix was falsified+superseded. The user-relevant change is one line: "release-draft auto-fire dropped → operator-dispatch-only (closes #41)." Recommend consolidating all five into that single### Fixedentry at cut-fold; the arc detail lives in the commit history + #41/#47, where it belongs. Same dedup-at-cut discipline as the prior cuts, applied to a fragment-churn cluster.Closes #41 the honest way — formalize what works, document why the rest doesn't, and route the real fix (release-please) to its own sprint (#52). → self-merge.