v0.3 — tmux-tell migration enablement (5 config additions) #4
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#4
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?
Scope
5 config additions to enable tmux-tell#617 migration. Per operator (A) ratification + Bosun + my lean: defer tmux-tell migration until toolkit v0.2 closes the gap rather than regressing tmux-tell's operator-curated discipline.
Gap-audit source: tmux-tell#617 issuecomment-73209.
Config additions
1.
pre_v1_breaking_to_minor: boolTmux-tell's policy: BREAKING CHANGE during 0.x stays minor (not major), because the project is settling-shape. Toolkit's
conventional-commits.sh::cc_bump_level_from_subjectalways escalates!/BREAKING CHANGE→ major.Change:
release-toolkit.ymlgainspre_v1_breaking_to_minor: bool(defaultfalse). WhentrueAND current version is0.x.y, BREAKING markers map tominorinstead ofmajor.2.
post_bump_hooks: [path/to/script.sh]Tmux-tell's release.yml updates a
--versionexample in README.md to match the cut version (anchored regex; hard-fails on miss). Per-consumer custom logic that doesn't belong in the toolkit's general flow.Change:
release-toolkit.ymlgainspost_bump_hooks: [path]list (default[]). Hook scripts are invoked AFTERversion_filesare bumped, BEFORE the git commit. ReceiveRELEASE_TOOLKIT_NEW_VERSION+RELEASE_TOOLKIT_NEW_TAGenv vars. Non-zero exit aborts the release-prep with the hook's stderr propagated.3.
section_format: { tag_prefix, separator }Tmux-tell uses
## [X.Y.Z] — YYYY-MM-DD(em-dash separator, novprefix in brackets); toolkit's default is## [vX.Y.Z] - YYYY-MM-DD. Cosmetic but project-visible.Change:
release-toolkit.ymlgainssection_formatobject (defaults:tag_prefix: "v",separator: " - ").changelog.sh::changelog_transitionreads these when constructing the new section heading.4.
version_files: []accepted as validTmux-tell has no
VERSIONfile; the authoritative version isgit describe --tags --abbrev=0.internal/version/version.gohasvar Version = "dev"with build-time-ldflagsinjecting the real version. Toolkit'sconfig_get_version_filesdefaults to["VERSION"]if the field is missing/empty.Change:
config_get_version_filesreturns empty list ifversion_files: []is explicitly set in the config.release-prep.sh+manifest-check.shhandle the empty case (no files to bump; current version comes fromgit describe --tagsexclusively).5.
docs/migration/tmux-tell.mdStep-by-step migration guide for tmux-tell (and other Go projects with similar shape) once v0.2 ships. Documents:
scripts/update-readme-version.sh(in tmux-tell, not the toolkit)Acceptance criteria
config.shparses + validates new fieldsconventional-commits.sh::cc_bump_level_from_subjectrespectspre_v1_breaking_to_minorwhen set (annotation: implemented via downstreamsemver_apply_pre_v1_policyfor cleaner separation of concerns; same end behavior — see comment 73497)release-prep.shinvokes post_bump_hooks after version_file bumps + before git commitchangelog.sh::changelog_transitionreads section_format for the headingmanifest-check.shhandlesversion_files: [](skips file checks; relies on git tag)docs/migration/tmux-tell.mdcovers the migration step-by-stepdocs/conventions.mdupdated to document the new config fields (annotation: pre_v1_breaking_to_minor in conventions.md; post_bump_hooks + section_format + version_files: [] in integration.md per topic — see comment 73497)23 cut via toolkit's own machinery (dogfood) (annotation: AC text-typo — context is v0.3; shipped via v0.3.0 cut 2026-06-24 20:52 — see comment 73497)What this issue does NOT scope
runs-onparameterization — that's release-toolkit#2 (v0.1.1 work)Cross-tracker impact
Unblocks (when shipped):
Substrate-of-record framing
5 config additions of varying surface size. Not all are tmux-tell-specific:
pre_v1_breaking_to_minorbenefits any pre-v1 project with settling-shape disciplinepost_bump_hooksis generic per-consumer extensibilitysection_formatis generic format-customizationversion_files: []is a real "tag-is-version" support case (some Go/Rust projects, build-time-version-injection projects)The work is tmux-tell-motivated but the features generalize. Audit-before-migrating discipline (per
feedback_audit_before_migrating_substratememory) surfaced these via tmux-tell-specific audit; the resulting features serve broader consumer-shapes.— QM, 2026-06-24, per operator A + Bosun c55b ratification.
v0.2 — tmux-tell migration enablement (5 config additions)to v0.3 — tmux-tell migration enablement (5 config additions)AC tick (post-merge catchup — v0.3 sprint umbrella)
Shipped via 6 PRs across the v0.3 sprint (5 substantive slices + 1 behavior-test):
feat(scripts/lib): pre_v1_breaking_to_minorfeat(config): version_files: [] acceptedfeat(config,changelog): section_formattest(behavior): version_files: [] modefeat(release-prep): post_bump_hooksdocs(migration): tmux-tell migration guideAll published in v0.3.0 (tag
ff328f6, 2026-06-24 20:52).Acceptance criteria
config.shparses + validates new fields —config_get_pre_v1_breaking_to_minor,config_get_section_tag_prefix/_separator,config_get_post_bump_hooks;config_get_version_filesdistinguishes missing vs explicit empty viahas("version_files")yq predicatepre_v1_breaking_to_minorpolicy honored on bump determination — implemented viasemver.sh::semver_apply_pre_v1_policyapplied downstream ofcc_bump_level_from_subject, NOT directly incc_bump_level_from_subjectitself. Annotation: the AC text said "cc_bump_level_from_subjectrespectspre_v1_breaking_to_minor," but the cleaner architectural split was kept —cc_bump_level_from_subjectreturns the raw conventional-commits bump level (purely syntactic), the policy downgrades downstream. Same end behavior; cleaner separation of concerns. Worked-instance: v0.2.1 + v0.3.0 cuts auto-detected correctly via the downstream policy.release-prep.shinvokes post_bump_hooks after version_file bumps + before git commit — slice 4 step 8b; env varsRELEASE_TOOLKIT_NEW_VERSION+_NEW_TAG+_PREVIOUS_TAGexported; non-zero exit aborts cut with stderr propagated; multiple hooks run in declaration order, first failure aborts chainchangelog.sh::changelog_transitionreads section_format for heading — 2 new optional positional params (5th = TAG_PREFIX, 6th = SEPARATOR) with${var-default}(not${var:-default}) semantics so explicit empty string is preservedmanifest-check.shhandlesversion_files: []— step 2 emitsSKIPrather than failing; step 4 treats git tag as its own manifest;release-prep.shdoes NOT bump any files in tag-is-version modedocs/migration/tmux-tell.mdcovers migration step-by-step — slice 5; 281-line guide with background gap table, 6-step migration checklist, trust-model checkpoint, one-cycle parity check, what-this-does-NOT-change sectiondocs/conventions.mdupdated to document the new config fields — Partially divergent from literal AC, semantically satisfied:pre_v1_breaking_to_minordocumented indocs/conventions.md(right home — it's a conventional-commits policy change with "Pre-1.0 opt-in" subsection under "Breaking changes → major bump"). The other 3 config additions (post_bump_hooks,section_format,version_files: []) are documented indocs/integration.mdinstead — the right home by topic since they're release-toolkit.yml config-mechanics, not commit/fragment conventions. AC text didn't anticipate the conventions-vs-integration split; the architectural choice keeps each doc focused on its audience.23 cut via toolkit's own machinery (dogfood) — AC text-typo: said "v0.2 cut" but context is clearly the v0.3 cut. Satisfied via the v0.3.0 dogfood cut (2026-06-24 20:52) — operator-dispatched release.yml → autonomous prep PR #25 → manual CHANGELOG fold → manual draft-release.sh (per #16 chicken-and-egg) → operator Publish → tagff328f6live. All 4 v0.3 config additions exercised in a single release.Deferred-conditional (surfaced during/post v0.3 sprint)
docs/migration/tmux-tell.mdships in v0.3.0; the actual tmux-tell migration is tmux-tell-side work per ADR-0028 §Ship-not-personality. Tracked astmux-tell#617; unblocked from release-toolkit side, parity-check still pending on tmux-tell side. Out of scope for #4 closure.cellblock#162; consumer-workflows PR queued, out of scope for #4 closure.Cross-tracker confirmation
Closed by v0.3.0 publish ship. AC + deferred-conditional summary recorded post-publish per AC-tick-discipline.
— QM, 2026-06-24, v0.3.1 post-publish AC-tick catchup (per operator surface).
engineer referenced this issue2026-07-27 05:00:45 +02:00
bosun referenced this issue2026-09-05 21:47:20 +02:00