Move all five workspace crates (irtt-proto, irtt-client, irtt-server, irtt-stats, irtt-cli) from lockstep to independently-owned [package] version fields. Each crate keeps its own version explicitly; there is no shared workspace package version. This release happens to assign 0.5.0 to all five, but nothing about the manifests requires that to hold in the future.
Add a root CHANGELOG.md with a real, per-crate 0.5.0 section built from archaeology of every merge since v0.4.0 (110 first-parent merges), not a mechanical git log -- crates/<name>/** filter — including cross-crate effects (e.g. irtt-proto/irtt-client changes that materially affect irtt-stats/irtt-cli behavior).
Adopt crate-qualified release tags (irtt-proto/v0.5.0, irtt-client/v0.5.0, irtt-server/v0.5.0, irtt-stats/v0.5.0, irtt-cli/v0.5.0), replacing the old ambiguous vX.Y.Z convention.
Scope cargo-dist to irtt-cli only via dist-workspace.toml's tag-namespace = "irtt-cli", so only irtt-cli/vX.Y.Z tags trigger the release workflow (dist generate-regenerated as irtt-cli-release.yml). Library-crate tags no longer risk creating an empty/failing GitHub Release or Actions run — verified locally with dist plan --tag=... for both an irtt-cli tag (produces a real release plan) and a library tag (workflow tag-glob no longer matches at all).
crates.io publication model unchanged: all five crates were already publishable (no publish = false anywhere); only irtt-cli gets a GitHub binary Release via cargo-dist. irtt-server has never been published to crates.io before — this will be its first release there.
Along the way, fixed a real pre-existing bug: dist-workspace.toml still requested --features full, a feature removed from irtt-cli in a recent refactor (90c04b6) without updating the dist config — this was silently breaking every cargo-dist build. Dropped the stale override since default already covers everything.
Updated the handful of files that referenced the old .github/workflows/release.yml path by name (renovate.json, actions-security.yml, supply-chain.yml), and rescoped semver.yml's tag trigger to the same five crate-qualified tags so semver checks keep running under the new convention.
cargo metadata sanity check (all five crates report 0.5.0, dependency graph as expected: proto ← client/server ← stats ← cli)
git diff --check
cargo publish --dry-run for each of the five crates (packaging succeeds for all; full verify build succeeds standalone for irtt-proto; dependents can only fully verify once their registry deps are actually published, which is expected and will be exercised at publish time)
dist build --tag=irtt-cli/v0.5.0 locally — succeeds, produces all four CLI binaries (irtt-cli, irtt-rs, irtt-server, irtt-tui)
dist plan --tag=<crate>/v0.5.0 for all five crates — confirms tag parsing and per-package version matching
Confirmed the new tag-glob (irtt-cli**[0-9]+.[0-9]+.[0-9]+*) only matches tags starting with irtt-cli
## Summary
- Move all five workspace crates (`irtt-proto`, `irtt-client`, `irtt-server`, `irtt-stats`, `irtt-cli`) from lockstep to independently-owned `[package] version` fields. Each crate keeps its own version explicitly; there is no shared workspace package version. This release happens to assign `0.5.0` to all five, but nothing about the manifests requires that to hold in the future.
- Add a root `CHANGELOG.md` with a real, per-crate `0.5.0` section built from archaeology of every merge since `v0.4.0` (110 first-parent merges), not a mechanical `git log -- crates/<name>/**` filter — including cross-crate effects (e.g. `irtt-proto`/`irtt-client` changes that materially affect `irtt-stats`/`irtt-cli` behavior).
- Adopt crate-qualified release tags (`irtt-proto/v0.5.0`, `irtt-client/v0.5.0`, `irtt-server/v0.5.0`, `irtt-stats/v0.5.0`, `irtt-cli/v0.5.0`), replacing the old ambiguous `vX.Y.Z` convention.
- Scope cargo-dist to `irtt-cli` only via `dist-workspace.toml`'s `tag-namespace = "irtt-cli"`, so only `irtt-cli/vX.Y.Z` tags trigger the release workflow (`dist generate`-regenerated as `irtt-cli-release.yml`). Library-crate tags no longer risk creating an empty/failing GitHub Release or Actions run — verified locally with `dist plan --tag=...` for both an `irtt-cli` tag (produces a real release plan) and a library tag (workflow tag-glob no longer matches at all).
- crates.io publication model unchanged: all five crates were already publishable (no `publish = false` anywhere); only `irtt-cli` gets a GitHub binary Release via cargo-dist. `irtt-server` has never been published to crates.io before — this will be its first release there.
- Along the way, fixed a real pre-existing bug: `dist-workspace.toml` still requested `--features full`, a feature removed from `irtt-cli` in a recent refactor (`90c04b6`) without updating the dist config — this was silently breaking every cargo-dist build. Dropped the stale override since `default` already covers everything.
- Updated the handful of files that referenced the old `.github/workflows/release.yml` path by name (`renovate.json`, `actions-security.yml`, `supply-chain.yml`), and rescoped `semver.yml`'s tag trigger to the same five crate-qualified tags so semver checks keep running under the new convention.
## Test plan
- [x] `cargo fmt --all -- --check`
- [x] `cargo check --workspace --all-targets --all-features --locked`
- [x] `cargo test --workspace --all-features --locked` (all green, 0 failures)
- [x] `cargo clippy --workspace --all-targets --all-features --locked -- -D warnings`
- [x] `cargo check --workspace --no-default-features`
- [x] `cargo metadata` sanity check (all five crates report 0.5.0, dependency graph as expected: proto ← client/server ← stats ← cli)
- [x] `git diff --check`
- [x] `cargo publish --dry-run` for each of the five crates (packaging succeeds for all; full verify build succeeds standalone for `irtt-proto`; dependents can only fully verify once their registry deps are actually published, which is expected and will be exercised at publish time)
- [x] `dist build --tag=irtt-cli/v0.5.0` locally — succeeds, produces all four CLI binaries (`irtt-cli`, `irtt-rs`, `irtt-server`, `irtt-tui`)
- [x] `dist plan --tag=<crate>/v0.5.0` for all five crates — confirms tag parsing and per-package version matching
- [x] Confirmed the new tag-glob (`irtt-cli**[0-9]+.[0-9]+.[0-9]+*`) only matches tags starting with `irtt-cli`
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.
You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage).
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your [settings](https://chatgpt.com/codex/cloud/settings/code-review).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
irtt-proto,irtt-client,irtt-server,irtt-stats,irtt-cli) from lockstep to independently-owned[package] versionfields. Each crate keeps its own version explicitly; there is no shared workspace package version. This release happens to assign0.5.0to all five, but nothing about the manifests requires that to hold in the future.CHANGELOG.mdwith a real, per-crate0.5.0section built from archaeology of every merge sincev0.4.0(110 first-parent merges), not a mechanicalgit log -- crates/<name>/**filter — including cross-crate effects (e.g.irtt-proto/irtt-clientchanges that materially affectirtt-stats/irtt-clibehavior).irtt-proto/v0.5.0,irtt-client/v0.5.0,irtt-server/v0.5.0,irtt-stats/v0.5.0,irtt-cli/v0.5.0), replacing the old ambiguousvX.Y.Zconvention.irtt-clionly viadist-workspace.toml'stag-namespace = "irtt-cli", so onlyirtt-cli/vX.Y.Ztags trigger the release workflow (dist generate-regenerated asirtt-cli-release.yml). Library-crate tags no longer risk creating an empty/failing GitHub Release or Actions run — verified locally withdist plan --tag=...for both anirtt-clitag (produces a real release plan) and a library tag (workflow tag-glob no longer matches at all).publish = falseanywhere); onlyirtt-cligets a GitHub binary Release via cargo-dist.irtt-serverhas never been published to crates.io before — this will be its first release there.dist-workspace.tomlstill requested--features full, a feature removed fromirtt-cliin a recent refactor (90c04b6) without updating the dist config — this was silently breaking every cargo-dist build. Dropped the stale override sincedefaultalready covers everything..github/workflows/release.ymlpath by name (renovate.json,actions-security.yml,supply-chain.yml), and rescopedsemver.yml's tag trigger to the same five crate-qualified tags so semver checks keep running under the new convention.Test plan
cargo fmt --all -- --checkcargo check --workspace --all-targets --all-features --lockedcargo test --workspace --all-features --locked(all green, 0 failures)cargo clippy --workspace --all-targets --all-features --locked -- -D warningscargo check --workspace --no-default-featurescargo metadatasanity check (all five crates report 0.5.0, dependency graph as expected: proto ← client/server ← stats ← cli)git diff --checkcargo publish --dry-runfor each of the five crates (packaging succeeds for all; full verify build succeeds standalone forirtt-proto; dependents can only fully verify once their registry deps are actually published, which is expected and will be exercised at publish time)dist build --tag=irtt-cli/v0.5.0locally — succeeds, produces all four CLI binaries (irtt-cli,irtt-rs,irtt-server,irtt-tui)dist plan --tag=<crate>/v0.5.0for all five crates — confirms tag parsing and per-package version matchingirtt-cli**[0-9]+.[0-9]+.[0-9]+*) only matches tags starting withirtt-cliYou have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.