v0.9.7 - Stable Pre-Release #8
jamesgober
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
CLI version surface
Version 0.9.7 - 2026-05-12
Follow-up to the
devCLI landing in 0.9.6. The version-reporting surfaceis now complete: the binary itself reports
dev 0.9.7through clap'sstandard
--versionflag, the newdev versionsubcommand prints astylized component table for the entire 14-crate collection, and every
subcommand exposes a
--versionoverride that reports the underlyingsub-crate version rather than the binary's version. Two-form lookup,
ASCII-fallback color, and exit codes wired through the same
worst()verdict-aggregation path the rest of the CLI uses.
The work is mechanically small (one new subcommand, six per-args
overrides, one global
propagate_versionflip) but it closes the"what am I actually running" gap that the 0.9.6 launch left open. A
user running
dev coverage --threshold 80against the publishedcrates.io build should be able to confirm, in one command, that they
have
dev-coverage 0.9.1driving the underlying llvm-cov subprocess— not a stale path-dep build of
dev-coverage 0.9.0. That answer isnow
dev coverage --version.Highlights
dev versionprints the full component table. Header line carriesthe binary version + tagline; the body lists every sibling crate
(
dev-report,dev-tools,dev-fixtures,dev-bench,dev-async,dev-stress,dev-chaos,dev-coverage,dev-security,dev-deps,dev-ci,dev-fuzz,dev-flaky,dev-mutate) right-aligned withANSI-colored versions. Color is suppressed when stdout is not a TTY
so
dev version | grep dev-works without escape-code leakage.dev version <name>filtered form accepts either the short alias(
coverage) or the full crate name (dev-coverage). Both spellingsresolve to the same row via a
strip_prefix("dev-")normaliser.Unknown names error with
unknown component: "foo". Known: report, tools, fixtures, bench, async, stress, chaos, coverage, security, deps, ci, fuzz, flaky, mutateso the user gets the valid setinline.
--versionoverrides — each subprocess-wrappingcommand (
coverage,audit,deps,fuzz,mutate,flaky,ci)carries a
#[command(version = "...")]on its args struct sodev coverage --versionreportsdev-coverage 0.9.1, not theparent's
dev 0.9.7. The non-wrapping commands (test,clippy,check,bench,report,diff,html) inherit the parent'sversion since they're features of
dev-toolsitself.propagate_version = trueat the root makes--version/-Vavailable on every subcommand uniformly. The 0.9.6 build onlyhonored the flag on the root command; subcommands errored with
unknown flag.Breaking changes
None. Pure additions. The 0.9.6 CLI surface (binary name, subcommand
names, argument structures, exit codes) is unchanged.
A user upgrading from 0.9.6 to 0.9.7 with
cargo install dev-tools --features cli --forcegets the new commands transparently. Existingshell scripts that called
dev coverage --threshold 80or any other0.9.6 form continue to work without modification.
Internals
SIBLINGSconst-table insrc/bin/dev.rsholds the (alias,crate-name, version) triples for every sub-crate. The table is the
single source of truth for both
dev version(full enumeration)and
dev version <name>(filtered lookup). Hand-maintained; doccomment flags the keep-in-sync-with-Cargo.toml requirement.
run_version()handles both forms in one function. Theshort-alias-or-full-name input is normalised via
strip_prefix("dev-")socoverageanddev-coveragebothresolve to the same row without a second lookup pass.
&'static strs in theargs-struct attribute. The clap derive macro emits the right
Command::versioncalls at expansion time, so there's no runtimecost — the version strings are baked into the binary as
.rodata.Tests
The version surface is exercised through clap's standard parse path,
so the existing 56 lib tests cover the structural integrity of the
Cmdenum +Argsderives transparently. TheSIBLINGStable issmall and hand-curated; a drift check (compare the table against the
^0.9pins inCargo.toml) is on the roadmap but not blocking for0.9.7.
Notes
clapwas already an opt-incli-feature depfrom 0.9.6; this release adds nothing on top.
patch versions from the audit-pass cascade earlier in the day.
dev-toolslibrary API surface is unchanged. Theclifeatureflag remains opt-in; library consumers continue to pay zero clap
compile time.
Deferred (with documented reason)
SIBLINGS— pulling the siblingversions out of the resolved
Cargo.lockat compile time wouldremove the drift risk entirely, but adds a
build.rs+ theassociated debugging surface. Tractable in 0.9.x scope; deferred
to avoid touching the build pipeline this close to RC. Current
cadence is "bump a sibling → bump the corresponding row in
SIBLINGS" and the table sits 14 lines from theCargo.tomlpin block.
dev version --json— emitting the component table asstructured JSON (consumed by other tooling, dashboards, CI
comparators) is a natural extension and slated for 0.9.8 alongside
the broader format-surface polish across the CLI.
Full Changelog: v0.9.5...v0.9.7
This discussion was created from the release v0.9.7 - Stable Pre-Release.
All reactions