feat(release)!: retire .release-toolkit-release-notes.md sidecar (#301) #302
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!302
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/sidecar-elimination"
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?
Why
Set F reopens to 7 items per Bosun
4c20. Operator caught (visual inspection of release pages post-v0.22.0) that all 3 Cold-Read compression edits on v0.20.0/v0.21.0/v0.22.0 were silently discarded:draft-release.shpreferred a.release-toolkit-release-notes.mdsidecar (introduced release-toolkit#77 to split "long-form developer prose" from "short consumer summaries") over the CHANGELOG section. All fix-passes (9fdc60dv0.20.0,c5c610av0.21.0,9caa764v0.22.0) touched CHANGELOG.md only; sidecar stayed stale.Operator directive verbatim: "I would prefer a single source of truth. And CHANGELOG.md looks like a better choice than an eventually unexpected sidecar, if this is feasible."
Meta-shape observation for retro (Bosun
daeaframing): this is the scoped-mechanism-vs-open-substrate class recursing on the very fix we declared closed 30 minutes before it fired (release-toolkit#295 sub-shape). The Cold-Read discipline was scoped to CHANGELOG.md; the release-body substrate uses a sidecar. "The class doesn't announce itself; it hides in the surface you didn't check." n=3+ family instance, retro material.Phase 1 (immediate, already done)
Pre-tracker mechanical fixes via
edit_releaseAPI:All three pages now match CHANGELOG.md compressed content. Operator's visible concern resolved.
Phase 2 (this PR — systemic elimination)
10 files, +112/-359 (net removal — dead code purged).
scripts/draft-release.shL108-125: remove sidecar preference branch.BODYis always the CHANGELOG section, normalized in-place.scripts/release-prep.shL344-382: replace sidecar-write step with armof any legacy sidecar so it stops shipping stale content.scripts/release-prep.shL619-627 (staging block): updated comment to name the retirement-transition behavior.scripts/lib/fragments.sh: removefragment_get_summary+categorize_fragment_summaries(dead code post-#301; only consumer was the sidecar-write). Frontmatter helpers stay — used bycategorize_fragmentsfor body-strip.tests/fragments.bats: drop 7 sidecar-summary tests.tests/draft-release.bats: replace #54 sidecar-path test with a#301 regression guardasserting the sidecar is IGNORED even when present.tests/release-prep.bats: replace #77 stale-carryover guard with a#301 regression guardasserting the sidecar is DELETED on every cut.docs/integration.mdL499-536: rewrite "Fragmentsummary:frontmatter" section as "Release-body source (CHANGELOG.md, single source of truth)" with migration note.AGENTS.mdL209 + L218: reframe sidecar references as historical → retired per #301..release-toolkit-release-notes.md: delete the committed file.changelog.d/301.changed.md: BREAKING-CHANGE-marked fragment.Coverage
sidecar-is-ignoredguard fail; reverting release-prep.sh'srmmakes thesidecar-is-deletedguard fail.External-consumer safety
.release-toolkit-release-notes.mdare safe:draft-release.shpost-#301 ALWAYS reads CHANGELOG.md regardless of sidecar presence. The file just becomes unused, not an error.git rm .release-toolkit-release-notes.mdto reclaim tracking.summary:frontmatter on fragments becomes inert (no consumer reads it). Safe to leave in place or strip.What this PR does NOT do
Set F state after merge
7/7 delivered:
Milestone-close: Herald docs-revision arc still pending operator direction (per Bosun
4c20).Refs
🤖 Generated with Claude Code
Review — release-toolkit#302 (retire release-notes sidecar, #301)
APPROVED (official, head-pinned
d88b131). Clean single-source-of-truth fix — dead code properly purged, both regression guards mutation-verified, safe for external consumers. Verified thoroughly at source.Verified at source (scratch clone at HEAD)
fragment_get_summary+categorize_fragment_summarieshave zero remaining callers; the only surviving references are retirement-note comments (fragments.sh:414, fragments.bats:500). The frontmatter helpers (_fragment_frontmatter_lines/_fragment_body_lines) correctly stay — still used bycategorize_fragmentsfor body-strip, so fragments carryingsummary:frontmatter don't break, the field just goes inert.draft-release.shreads only CHANGELOG —BODY=changelog_get_section_content(...)(line 113), no sidecar branch. TheRELEASE_NOTES_SIDECARreference that remains (release-prep.sh:355) is thermpath, idempotent ([[ -f ]]guarded, no-op when absent).sidecar-is-ignoredguard fails; removing therm→ thesidecar-is-deletedguard fails. Reverted byte-identical. Both guards are tied to the real failure (stale content must-not-appear / file-must-be-deleted).printfliterals inlint_fragment_kind, not diagnostics).Bump — correctly minor (confirm intent)
The fragment is
301.changed.md→determine_bump_from_fragments= minor → v0.23.0, which matches your stated intent. Worth naming explicitly since thefeat(release)!title +**BREAKING:prose read as a breaking/major signal:fragment_is_breakingmatches^BREAKING[ -]CHANGE, which**BREAKING:does not trigger — so the marker is documentation-only, not a machine-detected major-force. That's correct here (pre-1.0 breaking → minor per policy, andsemver_apply_pre_v1_policywould suppress major→minor anyway, so no 1.0.0 risk), just flagging so the minor bump is a conscious choice rather than an accident of the marker form.Nits (cosmetic, non-blocking)
2c4755bf(post-#300/#160), not the 558-era, and-7-1+2on 558 = 552 ≠ 550. The total is right; only the delta-from-558 doesn't reconcile. Samebaseline-arithmetic-driftsub-shape you cataloged — the fix is the same one: re-derive the base fromgit merge-base, don't carry the prior tally.Genuinely important catch by the operator, cleanly eliminated at the substrate. The v0.23.0 cut proves it end-to-end (single source of truth + sidecar-deletion both exercised). Set F 7/7.