From c99330372ca8f67e6c7bf271bb988811db5f2cfa Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 5 May 2026 04:20:12 +0900 Subject: [PATCH] fix(version): add build_date and executable_path to version JSON output `claw version --output-format json` was missing build_date and executable_path, making it impossible to identify which binary is running or correlate it with a specific build/commit. Fix: version_json_value() now includes: - build_date: compile-time BUILD_DATE env (already in text output) - executable_path: std::env::current_exe() at runtime Test: version_emits_json_when_requested extended to assert both fields are strings in the JSON envelope. Pinpoint: ROADMAP #507 --- rust/crates/rusty-claude-cli/src/main.rs | 3 +++ .../rusty-claude-cli/tests/output_format_contract.rs | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/rust/crates/rusty-claude-cli/src/main.rs b/rust/crates/rusty-claude-cli/src/main.rs index dbdbd07b..61ea906b 100644 --- a/rust/crates/rusty-claude-cli/src/main.rs +++ b/rust/crates/rusty-claude-cli/src/main.rs @@ -2627,12 +2627,15 @@ fn print_version(output_format: CliOutputFormat) -> Result<(), Box serde_json::Value { + let executable_path = env::current_exe().ok().map(|p| p.display().to_string()); json!({ "kind": "version", "message": render_version_report(), "version": VERSION, "git_sha": GIT_SHA, "target": BUILD_TARGET, + "build_date": DEFAULT_DATE, + "executable_path": executable_path, }) } diff --git a/rust/crates/rusty-claude-cli/tests/output_format_contract.rs b/rust/crates/rusty-claude-cli/tests/output_format_contract.rs index e5d8372c..e5ac08e8 100644 --- a/rust/crates/rusty-claude-cli/tests/output_format_contract.rs +++ b/rust/crates/rusty-claude-cli/tests/output_format_contract.rs @@ -30,6 +30,15 @@ fn version_emits_json_when_requested() { let parsed = assert_json_command(&root, &["--output-format", "json", "version"]); assert_eq!(parsed["kind"], "version"); assert_eq!(parsed["version"], env!("CARGO_PKG_VERSION")); + // Provenance fields must be present for binary identification (#507). + assert!( + parsed["build_date"].is_string(), + "build_date must be a string in version JSON" + ); + assert!( + parsed["executable_path"].is_string(), + "executable_path must be a string in version JSON so callers can identify which binary is running" + ); } #[test]