Problem
.github/workflows/release.yml ("Bump patch version" step) unconditionally increments the patch number: every merge to main ships as vX.Y.Z+1, whatever the commit type. Meanwhile AGENTS.md (Contribution Workflow, step 4) tells contributors "The release pipeline derives version bumps from these [commit types], so the type is not cosmetic" — which is not true today.
Concrete consequence: PR #47 (feat!: — removed --listen-socket-mode and fd:// socket activation, a documented breaking change with a BREAKING CHANGE: footer) shipped as v0.2.22, a patch release. The draft notes had to be hand-edited to surface the breaking change.
Proposed solution
Make the version step parse the squash-commit subject since the last tag: feat!:/BREAKING CHANGE → minor bump while on 0.y (major once 1.0 lands), feat: → minor, everything else → patch. Keep the rest of the pipeline unchanged. Alternatively adopt a ready-made action that implements conventional-commit semver.
Alternatives considered
- Correcting AGENTS.md instead (document that every release is a patch bump): honest but entrenches
feat! shipping as a patch, which misleads downstream consumers about compatibility.
- Full semantic-release tooling: heavier than this repo needs; the pipeline is otherwise deliberately small.
Which implementation(s) would this affect?
Problem
.github/workflows/release.yml("Bump patch version" step) unconditionally increments the patch number: every merge tomainships asvX.Y.Z+1, whatever the commit type. MeanwhileAGENTS.md(Contribution Workflow, step 4) tells contributors "The release pipeline derives version bumps from these [commit types], so the type is not cosmetic" — which is not true today.Concrete consequence: PR #47 (
feat!:— removed--listen-socket-modeandfd://socket activation, a documented breaking change with aBREAKING CHANGE:footer) shipped as v0.2.22, a patch release. The draft notes had to be hand-edited to surface the breaking change.Proposed solution
Make the version step parse the squash-commit subject since the last tag:
feat!:/BREAKING CHANGE→ minor bump while on 0.y (major once 1.0 lands),feat:→ minor, everything else → patch. Keep the rest of the pipeline unchanged. Alternatively adopt a ready-made action that implements conventional-commit semver.Alternatives considered
feat!shipping as a patch, which misleads downstream consumers about compatibility.Which implementation(s) would this affect?