2.5 KiB
| title | status | type | priority | created_at | updated_at |
|---|---|---|---|---|---|
| 'VERSION file: compile into binary via include_str! and add nbd version subcommand' | todo | feature | normal | 2026-03-10T23:30:30Z | 2026-03-10T23:30:30Z |
Problem
The current version string is assembled in main.rs from CARGO_PKG_VERSION (Cargo.toml) and GIT_SHORT_SHA (build.rs). There is no nbd version subcommand — only --version. And the /work skill does not bump any version on completion.
Changes required
1. Create VERSION file
Create a VERSION file at the crate root (nbd/VERSION) containing the initial version:
0.1.0
2. Use VERSION in the binary
In src/main.rs, replace CARGO_PKG_VERSION with an include_str\! of the VERSION file (trimmed):
const VERSION: &str = concat\!(
env\!("CARGO_PKG_VERSION"), // keep for crate metadata
"+",
env\!("GIT_SHORT_SHA"),
);
Actually, use include_str\!("../VERSION") trimmed and concatenated with the git SHA:
const VERSION_FILE: &str = include_str\!("../VERSION");
const VERSION: &str = /* VERSION_FILE.trim() + "+" + GIT_SHORT_SHA at runtime or via concat */ ;
Note: include_str\! and concat\! cannot trim at compile time. Use a build.rs approach: read VERSION in build.rs, trim it, and emit it via cargo:rustc-env=NBD_VERSION=.... Then:
const VERSION: &str = concat\!(env\!("NBD_VERSION"), "+", env\!("GIT_SHORT_SHA"));
Update build.rs to read VERSION and emit NBD_VERSION.
3. Add nbd version subcommand
Add a Version variant to the Commands enum:
/// Print the nbd version string and exit.
Version,
Handler prints the same string as --version. With --json, output {"version": "X.Y.Z+sha"}.
4. Update /work skill
Edit .claude/skills/work/SKILL.md to add a version-bump step after marking a ticket complete:
- Breaking changes (major rework, API change) → bump major:
X.0.0 - Features (
ticket_type == feature) → bump minor:X.Y.0 - Tasks and bugs (
ticket_type == task | bug) → bump patch:X.Y.Z
The skill should read VERSION, parse the semver, increment the appropriate component, and write it back. Also update Cargo.toml version to match (keep in sync).
Relevant files
nbd/VERSION(new)nbd/build.rs(update: emitNBD_VERSION)nbd/src/main.rs(update: useNBD_VERSION, addVersionsubcommand)nbd/Cargo.toml(keep version in sync withVERSIONfile).claude/skills/work/SKILL.md(update: add version-bump step)