AGPL-3.0-or-later · forever.

ADR-025

Per-crate semver via release-plz (publishable crates only)

accepted · 2026-04-16 · L5 · cites 3

0

ADR-025: Per-crate semver + release-plz #

Context #

Workspace currently uses single version = "0.80.0" shared across all crates. With the foundation publish = false strategy (ADR-022), only nika (binary) and future nika-sdk reach crates.io. Their semver should evolve independently of internal foundation crate refactors.

Decision #

Two-tier semver policy:

  1. Foundation crates (`publish = false`) — keep workspace-shared version version.workspace = true. Not published, semver irrelevant for ecosystem.
  2. Publishable crates (`nika`, future `nika-sdk`) — independent semver via release-plz GitHub workflow. Each crate has its own version field, bumped semantically based on conventional-commit messages affecting that crate.

Initial publishable versions:

  • [email protected] — binary republish from legacy v0.47.1 (yank old, fresh start with diamond architecture once binary is wired)
  • [email protected] — first publication when v0.90 reaches stable surface

release-plz workflow runs on push-to-main, opens a PR with version bumps

  • CHANGELOG entries derived from commits, auto-publishes on PR merge.

Consequences #

  • nika binary version reflects user-facing API stability, not internal refactor churn
  • nika-sdk ships independently — bug-fix release doesn't bump main binary
  • ✅ release-plz handles changelog generation + GitHub releases automatically
  • ❌ One-time workflow setup (~2h, one commit)
  • ⚠️ Conventional commit discipline becomes load-bearing (already mostly true via commitlint hook)

Crates.io legacy cleanup (handled in Phase B.0) #

text
cargo yank [email protected]      # diamond renames it; legacy abandonedcargo yank [email protected]     # legacycargo yank [email protected]    # legacy, rebranded as nika# [email protected] stays; republish at v0.80+ when binary is wired

Reference #

  • release-plz docs: https://release-plz.ieni.dev/
  • ADR-022 (publish=false strategy)
  • ~/.claude/.../memory/feedback_publish_false_foundation_strategy.md

read at v0.107.0 · the decision record ships with the engine