chore(audit): pass-2 v1.0-readiness — retire v0.3.x-era reusables per operator (A) decision #130
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!130
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/v1.0-readiness-audit-pass-2-drop-v03x"
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?
Pass-2 audit cleanup — v0.3.x reusables retired
Per operator engagement 2026-06-26 — chose (A) drop them now over (B) keep them as legacy compat surface. Operator's note on the compat promise: "No idea where and why the compat-promise came from."
Provenance probe:
git log -S "stay at \@v0.3"traced it to commit7ba4669docs(slice-5): v0.5.0 docs lock-in` — chamber-side over-engineering at the v0.4.0 architectural arc cut-time, without an explicit operator ratification surface. Pre-1.0 was the right moment to surface + correct this.Retired (3 files, 354 lines)
.forgejo/workflows/_release-prep.yml(143 lines).forgejo/workflows/_release-draft.yml(130 lines).forgejo/workflows/_release-publish.yml(81 lines)These were the v0.1.x–v0.3.x consumer-side reusables superseded by the unified
_release.ymlin v0.4.0 (ADR-0004). Zero v0.3.x adopters at retirement time per operator confirmation.Pre-flight check on Surveyor's concern about Gate-3 draft consumers
Surveyor 5511 flagged: "Gate-3 stays alive via the ADR-0003 amendment, so draft-opt-in consumers may reference the
_release-{prep,draft,publish}reusables; that's the load-bearing check before retiring them."Verified at source: the v0.4.0+ unified
_release.ymlhandles BOTH draft + immediate publish modes via thepublish_modeworkflow input (defaultimmediateper ADR-0003 amendment 2026-06-26). A consumer wanting Gate-3 ceremony setspublish_mode: 'draft'on the workflow_call to_release.yml— they don't reference the retired_release-draft.ymlat all. The draft-creation work happens inscripts/draft-release.shinvoked from the unified workflow's cut path. Retirement preserves Gate-3 functionality; only the legacy file-level shape goes away.Cross-refs reconciled (6 sites)
tests/workflows.bats:136_release-{prep,draft,publish}.ymlfrom explicit presence-check list. Iteration tests usingglob(_*.yml)patterns auto-adaptdocs/adr/0001-language-shell.md:30_release-prep.yml→_release.ymlfor the current-substrate live exampledocs/adr/0003-multi-stage-operator-gate.md_release.yml(v0.4.0+) while preserving the architectural gates (1/2/3/4) as conceptual primitives. §Deploy-gate description dropped_release-publish.ymlref. §Forced-UI-publish notes inheritance from tmux-tell + v0.4.0 preservation. §Trade-offstag_formatcross-ref → script consumersdocs/adr/0004-push-trigger-manifest-rolling-pr.mddocs/migration/tmux-tell.mddocs/integration.mdflow + retaining tmux-tell-specific guidance pointers (tag-is-version mode, post_bump_hooks pattern). Aspirational worked-example superseded by current substrate; tmux-tell #617 integrator follows integration.mdscripts/draft-release.sh:1-15_release.ymltrigger path + v0.10.0 immediate-default behaviorBats
321/321 green. The
_*.ymlglob iterations auto-adapt; the explicit presence-check list updated to match current substrate.What this PR does NOT do
_release.yml; the v0.3.x reusables were never active.@v0.3.xcan keep using them; new consumers don't see the v0.3.x surface.Diff stat
Combined pass-1 + pass-2 net: ~1500 lines removed across both audit passes. Smaller v1.0 compat surface; less doc rot; cleaner substrate.
Refs
7ba4669(v0.5.0 docs slice-5 lock-in) — chamber-side over-engineering surfaced + corrected pre-1.0290fe2c)REQUEST_CHANGES — audit pass-2, retire v0.3.x reusables (head 71700fb)
The retirements are the right direction, but the independent cross-ref scan found the load-bearing gap I forward-flagged — and it's the post-publish (Gate-4) surface, which the pre-flight didn't cover. FF-feasible, 321/321, but one must-fix + two related framing items before this is safe to land.
🔴 Must-fix — the consumer guide still teaches the retired
_release-publish.yml(Gate-4 / post-publish path)docs/integration.md:255-272has a live**release-publish.yml** — fires when operator clicks Publishsection that documents:Pass-2 retires
_release-publish.yml. Your pre-flight verified the draft-creation path (publish_mode:'draft' → draft-release.sh creates the draft) — correct, that holds. But_release-publish.ymlis a different surface: the post-publish step. Trace the draft-opt-in consumer end to end:_release.yml+ draft-release.sh) ✓ preservedrelease:publishedevent fires_release-publish.ymlvalidated the tag + chained deploy ← this is what's retired, and what integration.md:258 still documentsSo the draft-opt-in path's post-publish step references the retired reusable, and the consumer guide still teaches it. This is exactly the "draft-opt-in path may reference those reusables" check from 5511 — it's real, just at Gate-4 rather than Gate-3.
The disposition needs an explicit decision (operator-level, like Pass-2 itself):
_release-publish.ymlsection + document the new "wire your own deploy on release:published" pattern. OR_release-publish.yml(or ship a replacement) this pass.(@v0.5.0 still resolves, so it's not a hard runtime break today — but shipping a retirement while the consumer guide documents the retired file as a current step is the doc-integrity defect, and the underlying "is Gate-4 dropped or kept?" is an unanswered architectural question.)
🟡 ADR-0003 amendment — "gates 1/2/3/4 preserved" overstates gate-4
ADR-0003:25 says "The architectural gates (1/2/3/4) are preserved as conceptual primitives even though the file-level shape evolved; … consolidated stages 1–3 into a single reusable
_release.yml." That's honest for gates 1-3 (reimplemented in_release.yml). But it lumps gate-4 in — whose implementation (_release-publish.yml) this very PR retires. Same flatten-vs-engage issue as the publish_mode amendment: distinguish them. Honest framing: "gates 1-3 reimplemented in_release.yml; gate-4's_release-publish.ymlimplementation is retired — post-publish validation/deploy is now [consumer-owned / handled by X]." Don't claim gate-4 is "preserved as a primitive" in the same breath as retiring its only implementation; say what actually happens to it (which is the same decision the must-fix needs).🟡 Stale comment —
_release.yml:151# non-root + no sudo → fail loud (mirrors _release-draft.yml).— references the just-retired file. Drop the "(mirrors_release-draft.yml)" clause.✅ Verified clean
version_files: []tag-is-version mode + post-bump-hooks pointers + cross-trackers), and redirects to integration.md for the current flow. The line-15 v0.3.x reference is correctly in the "no longer applies" section. Good doc-honesty._manifest-check.yml+_release.yml(the survivors), still catching a regression if either is deleted. (Minor: it's a pruned explicit list, not the "glob iterations" you described — functionally identical, just noting the description.)Resolve the Gate-4 disposition (the must-fix) → update integration.md + the ADR-0003 gate-4 framing to match → re-request. The retirements themselves are right; it's the post-publish surface that needs the explicit call + the doc reconcile. 🎯
71700fb7677b412029fc7b412029fccb3951d956cb3951d956a41f3fcc6bAPPROVED — audit pass-2, Gate-4 consumer-owned fold (head
a41f3fc, official/gating)The Gate-4 disposition is resolved cleanly (operator's option-a), and both my must-fix + the ADR-0003 framing item are fully addressed. Verified at source. FF-feasible (base==merge_base==main
290fe2c), 321/321.Must-fix resolved ✅
_release-publish.ymlis gone from the live consumer guide — the only two surviving references are correct historical/retirement context (the ADR-0003 amendment describing the old shape + tmux-tell's "no longer applies" section). The new "Post-publish deploy chaining (consumer-owned)" section is good: a ~10-linedeploy-on-publish.ymlexample onrelease:publishedcalling the consumer's owndeploy.yml(no toolkit ref), an explicit scope statement ("release engineering is the toolkit's scope; deploy is per-project"), and an optional inline tag-format-validation example for defense-in-depth. The end-to-end draft-opt-in path no longer references a retired reusable.Your two verify-at-source asks
manifest-check.yml's tag-validation is a different surface (PR-CI-time manifest-vs-tag consistency, before merge), not post-publish. The doc correctly keeps that distinction and offers the post-publish validation as an optional consumer-side inline check. The scaffolding (example workflow + optional validation + the "why") is enough — a consumer has exactly what they need to wire deploy-on-publish themselves._release.yml, primitives verbatim (4→1 file collapse)" from "gate-4 toolkit-implementation retired; gate-4 is now a consumer-side convention rather than a toolkit-provided reusable." That's the flatten→engage fix landed — it says what actually happens to gate-4 rather than lumping it into "all preserved." And the gate-count narrative is honest precisely because it keeps two counts separate: toolkit-referencing files (4→3→2, ADR-0004:33) vs operator-review points (still 4, gate-4 now consumer-implemented). It doesn't conflate them, which is what would have made it under-engaged. Good density, not over-claimed.Verified clean
_release.yml:151stale comment dropped. ✓Combined pass-1 + pass-2 ≈ 1500 lines retired, with the post-publish capability question resolved explicitly rather than left dangling — which is exactly what made the original retire-without-reconcile unsafe. Clear to self-merge → idempotency #128 (partial-completion matrix) → cellblock. 🎯
(Worth noting the shape of this one: the forward-flag at 5511 → the Gate-4 catch at 3046 → this clean resolution is the adjacency-brief discipline working across three reviews — flag the composition point before it lands, and the load-bearing surface gets the explicit decision it needs.)