A CI-only change is ci:, not fix(ci): — the scope does not stop a release #111

Closed
opened 2026-08-18 23:40:30 +00:00 by yonlu · 1 comment
Owner

Two commits touching nothing but .gitea/workflows/unclaim.yml were written fix(ci): and cut two real releases:

v0.2.1  23:05:38   fix(ci): run the unclaim step under bash
v0.2.2  23:30:31   fix(ci): give the unclaim step a CA bundle

.releaserc.yml's commit-analyzer reads the type and ignores the scope. fix is a patch whatever sits in the brackets, so fix(ci): is a release and ci: is not. The correct type for a CI-only change is ci:, which maps to release: false.

Why it is worth writing down rather than just remembering

The version bump is the small half. A merge to main starts two workflows — ci.yml and release.yml. If release.yml finds a releasable commit it pushes a v* tag, and that tag push starts four more: arch-package, homebrew-formula, android-apk and desktop-assets. On a runner with capacity 1, where the APK build alone is tens of minutes and publishes a signed artifact to a public registry.

So a mistyped type is not "the changelog looks odd". It is six workflow runs and two published releases containing no user-facing change.

CLAUDE.md already warned that "a mistyped feat ships a minor version". That sentence was not enough, because the failure here was not a mistyped type — fix was typed deliberately, in the belief that the (ci) scope qualified it. The scope is decoration.

The releases are staying

v0.2.1 and v0.2.2 are published to Arch, Homebrew and the APK registry. A version that vanishes is worse for whoever pulled it than a version that turns out to contain only CI changes, so neither is being deleted or retracted.

The change

A paragraph in CLAUDE.md's commit section: the analyzer reads the type and ignores the scope, a CI-only change is ci: and never fix(ci):, and make release-dry answers "what would this merge release" before the merge rather than after — which is cheaper than any one of those six runs.

Done when

CLAUDE.md states the rule and the blast radius, so the next person does not have to learn it by publishing.

Two commits touching nothing but `.gitea/workflows/unclaim.yml` were written `fix(ci):` and cut two real releases: ``` v0.2.1 23:05:38 fix(ci): run the unclaim step under bash v0.2.2 23:30:31 fix(ci): give the unclaim step a CA bundle ``` `.releaserc.yml`'s commit-analyzer reads the **type** and ignores the **scope**. `fix` is a patch whatever sits in the brackets, so `fix(ci):` is a release and `ci:` is not. The correct type for a CI-only change is `ci:`, which maps to `release: false`. ## Why it is worth writing down rather than just remembering The version bump is the small half. A merge to `main` starts two workflows — `ci.yml` and `release.yml`. If `release.yml` finds a releasable commit it pushes a `v*` tag, and **that tag push starts four more**: `arch-package`, `homebrew-formula`, `android-apk` and `desktop-assets`. On a runner with capacity 1, where the APK build alone is tens of minutes and publishes a signed artifact to a public registry. So a mistyped type is not "the changelog looks odd". It is six workflow runs and two published releases containing no user-facing change. CLAUDE.md already warned that "a mistyped `feat` ships a minor version". That sentence was not enough, because the failure here was not a mistyped type — `fix` was typed deliberately, in the belief that the `(ci)` scope qualified it. The scope is decoration. ## The releases are staying `v0.2.1` and `v0.2.2` are published to Arch, Homebrew and the APK registry. A version that vanishes is worse for whoever pulled it than a version that turns out to contain only CI changes, so neither is being deleted or retracted. ## The change A paragraph in CLAUDE.md's commit section: the analyzer reads the type and ignores the scope, a CI-only change is `ci:` and never `fix(ci):`, and `make release-dry` answers "what would this merge release" before the merge rather than after — which is cheaper than any one of those six runs. ## Done when CLAUDE.md states the rule and the blast radius, so the next person does not have to learn it by publishing.
yonlu added the
Priority
Medium
3
Kind/DocumentationArea/Packaging
labels 2026-08-18 23:40:30 +00:00
yonlu self-assigned this 2026-08-18 23:40:31 +00:00
yonlu added the
Status
In Progress
label 2026-08-18 23:40:31 +00:00
Author
Owner

Starting work on this on docs/ci-commit-type.

Starting work on this on `docs/ci-commit-type`.
logan closed this issue 2026-08-19 16:23:21 +00:00
gitea-actions bot removed the
Status
In Progress
label 2026-08-19 16:23:49 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: yonlu/yellowjacket#111