Skip to content

docs: switch to permanent v0.x.x versioning + salvage retired release notes#8

Merged
Arty2 merged 1 commit intomasterfrom
claude/v0-versioning
Apr 29, 2026
Merged

docs: switch to permanent v0.x.x versioning + salvage retired release notes#8
Arty2 merged 1 commit intomasterfrom
claude/v0-versioning

Conversation

@Arty2
Copy link
Copy Markdown
Owner

@Arty2 Arty2 commented Apr 29, 2026

Why

go.mod declares module github.com/arty2/onion (no /vN suffix). Per Go's semantic-import-versioning rule, any tag with major version ≥ 2 is unconsumable via the Go module proxy unless the path includes a matching /v2, /v3, … suffix. That made every existing v2.x and v3.x tag dead on arrival — hugo mod get github.com/arty2/onion@v3.1.0 errors with a module-path-mismatch.

Two fixes are available: add /v3 to go.mod (and bump it on every future major), or stay below v2.0 indefinitely. Per direction, this PR takes the second route. v0 and v1 are exempt from the suffix rule; the Go ecosystem has ample precedent for permanent v0 (golang.org/x/…, many libraries). For a Hugo theme — which doesn't ship API stability the way a library does — permanent v0 is the right tradeoff.

What

Docs-only. Three files:

  • CHANGELOG.md (new) — verbatim salvage of the 9 retired Releases' body text, newest-first, with a header explaining the renumbering. v2.3.0's detailed pre-AI → AI-orchestrated changelog is preserved in full; the terse early entries (v1.0, v2.0, v2.2) are preserved as historical placeholders so nothing of note is lost when the GitHub Releases get deleted in Phase 2.
  • RELEASING.md — "## Versioning" rewritten:
    • v0.X.0 covers BOTH features and breaking changes (in v0, breaking changes don't bump a major; downstream sites pin a minor they've tested).
    • v0.X.Y is patch.
    • First release under the new policy is v0.1.0.
    • Cites the Go module-suffix rule and points at CHANGELOG.md for retired tags.
  • README.md — "As a Hugo Module" install instructions pin @v0.1.0 by default; the dev-section boilerplate swapped from vX.Y.Z to v0.X.Y; pointer to CHANGELOG.md.

Two-phase rollout

This PR is Phase 1: docs only, zero behavioural change. Once it merges, Phase 2 is the destructive cleanup:

  1. Delete the 9 retired tags + 9 retired GitHub Releases (v1.0, v2.0, v2.1, v2.2, v2.3.0, v3.0.0, v3.0.1, v3.1.0, v3.2.0).
  2. Tag the merged commit (which contains CHANGELOG.md) as v0.1.0.
  3. Create a single new GitHub Release for v0.1.0 linking to the new policy.

Phase 2 runs as a separate one-shot operation, not a PR, since it's tag/Release plumbing rather than code changes.

Test plan

  • cd exampleSite && hugo --gc --logLevel warn clean — no template / build changes.
  • CHANGELOG.md cross-checked against the GitHub Releases API output for byte-faithful body preservation.
  • After merge: confirm hugo mod get github.com/arty2/onion@v0.1.0 resolves cleanly in a fresh test site (Go module proxy lag ~few minutes after tag push).
  • After merge: confirm hugo mod get github.com/arty2/onion@latest resolves to v0.1.0 (would require Phase 2's deletion of v1.0 first; otherwise @latest shadows v0.1.0 since v1.0 > v0.1.0 in semver).

Generated by Claude Code

The repo's go.mod declares `module github.com/arty2/onion` (no /vN
suffix). Per Go's semantic-import-versioning rule
(https://go.dev/ref/mod#major-version-suffixes), any tag with major
version ≥ 2 is unconsumable via the Go module proxy unless the path
includes a matching /v2, /v3, … suffix. That made every v2.x and
v3.x tag effectively dead — `hugo mod get github.com/arty2/onion@v3.1.0`
fails with a module-path-mismatch error.

Two fixes are possible: add /v3 to go.mod (and bump it on every
future major), or stay below v2.0 and live in v0.x.x permanently.
v0 and v1 are exempt from the suffix rule; the Go ecosystem has
ample precedent for indefinite v0 (golang.org/x/…, many libraries).
For a Hugo theme — which doesn't ship API stability the way a
library does — permanent v0 is the right tradeoff.

This commit is docs-only; the destructive cleanup (deleting the 9
existing tags + Releases, tagging v0.1.0) lands as a follow-up
once this PR is merged so the v0.1.0 tag points at a commit that
already contains CHANGELOG.md.

What changed:

* CHANGELOG.md (new) — verbatim salvage of the 9 retired Releases'
  body text, newest-first, with a header explaining the
  renumbering. v2.3.0's detailed pre-AI → AI-orchestrated changelog
  is preserved in full; the terse early entries (v1.0, v2.0) are
  preserved as historical placeholders.
* RELEASING.md — "## Versioning" rewritten. v0.X.0 covers both
  features and breaking changes (since in v0, breaking changes
  don't bump a major). v0.X.Y is patch. First release is v0.1.0.
  Cites the Go module-suffix rule and points at CHANGELOG.md for
  retired tags.
* README.md — "As a Hugo Module" install instructions pin v0.1.0
  by default; the boilerplate `hugo mod get` line at the bottom
  swapped from `vX.Y.Z` to `v0.X.Y`. Pointer added from the
  Development section to CHANGELOG.md.
@Arty2 Arty2 merged commit 247fbb5 into master Apr 29, 2026
2 checks passed
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.

2 participants