Skip to content

feat(release): version badges + release hardening (patch-floor + CHANGELOG)#38

Merged
AndreJorgeLopes merged 1 commit into
mainfrom
feat/version-badges-release-hardening
Jun 10, 2026
Merged

feat(release): version badges + release hardening (patch-floor + CHANGELOG)#38
AndreJorgeLopes merged 1 commit into
mainfrom
feat/version-badges-release-hardening

Conversation

@AndreJorgeLopes

Copy link
Copy Markdown
Owner

Summary

Quick wins from the marketplace-initiative brainstorm: version badges in the slash-picker + release-pipeline hardening.

A — Version badges

  • Every command's description: now starts with [X.Y.Z] (seeded [0.2.1]), so typing /devflow: shows e.g. [0.2.1] Use when reviewing a PR/MR… in the picker.
  • bump_all_versions (lib/release.sh) rewrites the bare badge each release; check_version_consistency (lib/watch.sh) validates badge == Makefile version.
  • Scope: all 26 command files. (Skill-tool descriptions left unbadged — picker reads the command files; can extend later.)

B — Versioning hardening

  • Patch-floor: _parse_conventional_commits now floors the bump to patch when there are commits since the last tag and HEAD isn't [skip release]/chore(release):. → docs/chore/refactor merges still release (keeps merge = release; fixes the gap where docs: record render-diagram export + release-pipeline gotchas #37's docs-only merge produced no release and needed a manual dispatch).
  • CHANGELOG.md: release.yml prepends each release's notes, committed in the release commit. Seeded with v0.2.0 / v0.2.1.
  • No merge queue (overkill for single-dev — merge trains serialize concurrent MRs).

Test plan

  • bash -n release.sh + watch.sh
  • devflow check-version → "All versions consistent: 0.2.1" (validates the new bare-badge check against the real badged files)
  • badge bump sed rewrites [0.2.1][X.Y.Z]; CHANGELOG awk strips install boilerplate + "What's New" header
  • 3-copy body parity intact (badging touched only command frontmatter)
  • live release on merge (this PR → v0.3.0, exercising patch-floor + CHANGELOG)

🤖 Generated with Claude Code

…ning

A — Version badges:
- Prepend a [X.Y.Z] badge to every command's `description:` so the /devflow:
  slash-picker shows e.g. "[0.2.1] Use when reviewing a PR/MR…". Seeded at the
  current version across all 26 commands.
- bump_all_versions (lib/release.sh) now rewrites the bare [X.Y.Z] badge on
  release; check_version_consistency (lib/watch.sh) validates badge == Makefile.

B — Versioning hardening:
- _parse_conventional_commits: floor the bump to `patch` when there ARE commits
  since the last tag and HEAD isn't [skip release]/chore(release). docs/chore/
  refactor merges now still cut a release (keeps "merge = release"; fixes the
  gap where a docs-only merge produced no release and needed a manual dispatch).
- release.yml: maintain CHANGELOG.md — prepend each release's notes, committed
  in the release commit. Seeded CHANGELOG.md with v0.2.0/v0.2.1 history.

No merge queue (overkill for a single-dev repo).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AndreJorgeLopes AndreJorgeLopes merged commit 2b693ab into main Jun 10, 2026
@AndreJorgeLopes AndreJorgeLopes deleted the feat/version-badges-release-hardening branch June 10, 2026 10:46
AndreJorgeLopes added a commit that referenced this pull request Jun 10, 2026
…prose (#39)

_parse_conventional_commits grepped the ENTIRE HEAD commit body for the
skip-release marker, so a commit whose prose merely mentioned that marker
(e.g. one explaining the release logic) skipped its own release. PR #38's
feat commit did exactly that and was silently skipped — no v0.3.0 was cut.

Now the marker is honored only when it appears in the subject line or as a
standalone trailer line. Subject and trailer skips still work; mid-sentence
mentions no longer trigger a skip.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AndreJorgeLopes added a commit that referenced this pull request Jun 15, 2026
…or) (#42)

_parse_conventional_commits classified a chore-only commit range as a
patch bump instead of none, so chore/docs/refactor-only merges cut a
release. The "patch floor" added in #38 (2b693ab) flipped any none bump
to patch to keep "merge = release", but that contradicts conventional-
commit rules, the documented release process, and the test at
release.bats:66 (present since the parser's first commit 81558d2) which
was never updated and started failing.

Remove the patch floor: only feat/fix/breaking cut a release. A
chore/docs-only range returns none. To force a release for an otherwise
non-releasable range, dispatch release.yml with bump_override (the escape
hatch #38 was working around).

Also fix the stale test 14 (bump_all_versions): #38 changed the command
badge format from [devflow vX.Y.Z] to bare [X.Y.Z], but the fixture
(description: "[devflow v0.1.0]...") and its grep ([devflow v0.2.0]) were
not updated, so the sed never matched and the badge assertion failed under
bats. Aligned the fixture + grep to the bare [X.Y.Z] format used by the
real devflow-plugin/commands/*.md files.

bats tests/unit/release.bats: 16/16 green.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant