v0.1 — initial cut: release-cut + CHANGELOG fragments + conventional-commits + manifest-vs-tag CI #1
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#1
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
First-cut release per operator ratification on alcatraz-infra#65 (Bosun 13b1):
changelog.d/fragments (rich-narrative override per tmux-tell pattern)uses: frankenbit/release-toolkit/.forgejo/workflows/_X.yml@v0.1.0)Architecture (per alcatraz-infra#65 §4)
Repo layout
Consumer integration model (4 steps)
release-toolkit.ymlconfig in repo rootchangelog.d/.keep_release-prep.yml@v0.1.0Acceptance criteria
Core machinery
scripts/release-prep.sh— reads conventional commits +changelog.d/fragments, computes SemVer bump, transitions to## [vX.Y.Z], opens prep PRscripts/conventional-commits.sh— parses git log forfeat:/fix:/feat!:etc., generates ephemeral fragments OR appends directly to CHANGELOG section — note: shipped atscripts/lib/conventional-commits.sh(library, not script-as-binary), per ADR-0001's library-layer factoringscripts/manifest-check.sh— PR CI: verifies version_files agree +## [Unreleased]section present + tag-vs-manifest consistencyscripts/draft-release.sh— post-merge: creates Forgejo draft release with pre-populated CHANGELOG bodyscripts/lib/semver.sh— SemVer parsing + bumping helpersscripts/lib/fragments.sh—changelog.d/parsing + categorizationscripts/lib/forgejo-api.sh— Forgejo API client helpers (PR creation, release draft)Reusable workflows
_release-prep.yml— workflow_dispatch wrapper aroundrelease-prep.sh_release-draft.yml— PR-merge wrapper arounddraft-release.sh_release-publish.yml— release:published → validate-tag → consumer-deploy hook_manifest-check.yml— pull_request wrapper aroundmanifest-check.shgithub.*namespace (NOTgitea.*),type:on dispatch inputs, no top-levelconcurrency:/timeout-minutes:/run-name:— verified bytests/workflows.batsschema-regression tests (7/7 green; 8 schema-compat assertions)Conventional-commits convention
docs/conventions.mddocuments the commit-message format with examplesfeat:(minor),fix:(patch),feat!:/BREAKING CHANGE:(major), plus optionalchore:/docs:/test:/refactor:(no version impact)feat(scope):documentedFragment convention (preserve tmux-tell pattern)
docs/conventions.mdalso documents thechangelog.d/<PR#>.<kind>.mdfragment formatDocumentation
docs/integration.md— consumer step-by-stepdocs/conventions.md— commit + fragment formatsdocs/adr/0001-language-shell.md— why bash not Go (per operator ratification)docs/adr/0002-conventional-commits-from-day-one.md— why day-one not v0.2 follow-updocs/adr/0003-multi-stage-operator-gate.md— why preserve tmux-tell's 4-stage flowexamples/go-project/— example consumer (tmux-tell shape)examples/node-project/— example consumer (cellblock shape)Self-cut (dogfood)
scripts/release-prep.sh(bootstrap chicken-and-egg); v0.2.0 also via local-script; v0.2.1 was first cut via the full dogfood path (operator workflow_dispatch on release.yml → reusable @v0.2.0 → autonomous prep PR + draft) — the AC's spirit is satisfied at v0.1.0 (toolkit operates its own bumps) + structurally completed at v0.2.1release.ymlin toolkit's.forgejo/workflows/references its own reusables — added in v0.2.0 slice 3 (PR #6); references_release-prep.yml@v0.2.0+ usesruns_on: goOut of scope for v0.1 (deferred to v0.2+)
.release-please-manifest.jsonshape)Migration consumers (cross-tracker)
— QM, 2026-06-24, per Bosun ratification 13b1. All ACs canonically probed against main 2026-06-24 19:18 + ticked.
v0.1.0 SHIPPED — closing summary
Release: https://git.frankenbit.de/frankenbit/release-toolkit/releases/tag/v0.1.0
Tag
v0.1.0at commit1dd1320.Acceptance criteria — final state
Core machinery — all shipped
scripts/release-prep.sh— composes all libs; mutates CHANGELOG + version_files; opens prep PRscripts/conventional-commits.sh(asscripts/lib/conventional-commits.sh) — parser + bump determination + categorizationscripts/manifest-check.sh— PR CI consistency check (closes cellblock#157 by adoption)scripts/draft-release.sh— post-merge Forgejo draft creationscripts/lib/semver.sh— SemVer parsing + bumping + comparisonscripts/lib/fragments.sh—changelog.d/parsing + categorization + deletionscripts/lib/forgejo-api.sh— API client + dry-run instrumentationscripts/lib/config.sh—release-toolkit.ymlparser (not originally in AC list; added)scripts/lib/changelog.sh— CHANGELOG transition + section extraction + merge-by-kindReusable workflows — all shipped
_release-prep.yml— workflow_call wrapper for release-prep.sh_release-draft.yml— workflow_call wrapper for draft-release.sh_release-publish.yml— release:published → validate-tag → consumer-deploy hook_manifest-check.yml— pull_request wrapper for manifest-check.shConventional-commits convention — all documented
docs/conventions.mddocuments commit format with examplesfeat(scope):)Fragment convention — all documented
docs/conventions.mddocumentschangelog.d/<id>.<kind>.mdformatDocumentation — all shipped
docs/integration.md— 4-step consumer adoption guidedocs/conventions.md— commit + fragment formats + no-hard-wrap conventiondocs/adr/0001-language-shell.md— language choice rationaledocs/adr/0002-conventional-commits-from-day-one.md— v0.1 scope decisiondocs/adr/0003-multi-stage-operator-gate.md— 4-gate flow rationaledocs/operations.md(not originally in AC list; added — covers dev-loop disciplines + toolkit maintenance gotchas)examples/go-project/— directory exists with.keep; substantive example deferred to v0.1.1examples/node-project/— same; deferred to v0.1.1Self-cut (dogfood)
changelog_transitionmerge-by-kind issue)release.ymlin toolkit's.forgejo/workflows/referencing its own reusables — deferred to v0.1.1 (bootstrap chicken-and-egg: v0.1.0 cut via local script invocation since the reusables weren't yet at a tagged ref; v0.1.1+ can dogfood viauses: frankenbit/release-toolkit/.forgejo/workflows/_release-prep.yml@v0.1.0)Deferred to v0.1.1
fragments.sh::categorize_fragments— operator surfaced that hard-wrapped fragment bullets render with literal line breaks through some pipelines (GFM-soft-break-as-<br>renderers, RSS/email/notifications, plain-text copy-paste). v0.1.0 ships with the source-side convention documented indocs/conventions.md; v0.1.1 will add the tool-side defensive normalization (collapse single-newline-within-paragraph runs to spaces while preserving blank-line paragraph separators + indented sublists + fenced code blocks).examples/go-project/+examples/node-project/substantive example consumersrelease.ymlreferencing_release-prep.yml@v0.1.0)Deferred to v0.2+ (per the architecture proposal § "Out of scope for v0.1")
.release-please-manifest.jsonshape)shellas an explicitrelease_typestrategy (currently the toolkit usesmultiwithversion_files: [VERSION]— works fine; promote to first-class strategy when more bash-shaped adopters surface)Cross-repo trackers — status
tmux-tell#617(migrate tmux-tell to consume toolkit) — UNBLOCKED; ready when desiredcellblock#162(adopt toolkit in cellblock; closes cellblock#157 by adoption) — UNBLOCKED; ready when desiredalcatraz-infra#66(evaluate alcatraz-infra adoption) — deferred per the v0.1 scope decision; reconsider after tmux-tell + cellblock migrations validate the consumer flowSubstantive substrate-of-record framing
The toolkit substrate is empirically validated against its own consumption — the self-cut process surfaced + fixed real composition bugs (double
### Addedheadings; hard-wrap-renders-as-<br>in some pipelines) that synthetic test fixtures would not have caught. The first-real-consumer-is-the-substrate-of-record-validator principle is no longer hypothetical for this toolkit.Closing this tracker. Future work tracked under the per-issue follow-ups above.
— QM, 2026-06-24
Post-close AC tick — canonical probe against main 2026-06-24 19:18
All 28 ACs canonically probed + ticked. Probes:
ls scripts/{release-prep.sh,manifest-check.sh,draft-release.sh,lib/{conventional-commits.sh,semver.sh,fragments.sh,forgejo-api.sh}}scripts/lib/, notscripts/— library-layer factoring per ADR-0001)ls .forgejo/workflows/_*.ymltests/workflows.batsschema-regression testsgrep -c '^### (...)' docs/conventions.mdls docs/adr/ls examples/ls .forgejo/workflows/release.yml release-draft.yml manifest-check.yml+ tagv0.1.0+ laterv0.2.0+v0.2.1Substrate-of-record note: this issue was closed at 15:38:15 today (the v0.1.0 shipping moment), but the ACs were left unticked. Operator-flagged post-close at 19:17. Per
feedback_ac_tick_disciplinethe discipline is "tick BEFORE merge, not post-merge bookkeeping" — applied to this case, the at-merge discipline would have been "before closing #1, tick the ACs." That step was skipped today during the v0.1.0 close. Worth noting for the discipline-cluster: closing-without-tick is a sub-shape of the asymmetric-vigilance pattern (feedback_self_probe_asymmetry) — author-also-implementer doesn't probe own claims of completion.Forward-going: future umbrella-tracker closes should fold in an AC-tick pass per
feedback_ac_tick_close_own_issuediscipline. n=1 instance today; if it recurs, promote to formal pin around "close-time-AC-tick-discipline."Forward work surfaced post-close + already tracked:
Context-probe results (auto-posted)
(A) refs/context probe
(B) runner-from-vars probe
Run: https://git.frankenbit.de/frankenbit/release-toolkit/actions/runs/6404
quartermaster referenced this issue2026-07-06 09:54:48 +02:00