Skip to content

Commit 2d5ba5f

Browse files
committed
cli: Centralize version source and lower default log level
Add repo-root `.version` file (0.1.0) as canonical source
1 parent 8b8a61c commit 2d5ba5f

16 files changed

+137
-45
lines changed

.github/workflows/release-agents.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
bump="${{ inputs.bump }}"
4949
5050
if [ -z "$latest" ]; then
51-
next="v0.1.0"
51+
next="v$(tr -d '\n' < .version)"
5252
else
5353
version="${latest#v}"
5454
IFS='.' read -r major minor patch <<< "$version"

.version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1.0

cli/flake.nix

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
name = "source";
2929
};
3030

31+
version = pkgs.lib.strings.trim (builtins.readFile "${src}/.version");
32+
3133
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
3234
extensions = [
3335
"rustfmt"
@@ -42,7 +44,7 @@
4244

4345
scePackage = rustPlatform.buildRustPackage {
4446
pname = "sce";
45-
version = "0.1.0";
47+
inherit version;
4648
inherit src;
4749
sourceRoot = "source/cli";
4850

@@ -75,7 +77,7 @@
7577
checks = {
7678
cli-tests = rustPlatform.buildRustPackage {
7779
pname = "sce-cli-tests";
78-
version = "0.1.0";
80+
inherit version;
7981
inherit src;
8082
sourceRoot = "source/cli";
8183

@@ -106,7 +108,7 @@
106108

107109
cli-clippy = rustPlatform.buildRustPackage {
108110
pname = "sce-cli-clippy";
109-
version = "0.1.0";
111+
inherit version;
110112
inherit src;
111113
sourceRoot = "source/cli";
112114

cli/src/services/agent_trace.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::collections::BTreeMap;
22

3-
pub const TRACE_VERSION: &str = "0.1.0";
3+
pub const TRACE_VERSION: &str = env!("CARGO_PKG_VERSION");
44
pub const VCS_TYPE_GIT: &str = "git";
55
pub const NOTES_REF: &str = "refs/notes/agent-trace";
66
pub const TRACE_CONTENT_TYPE: &str = "application/vnd.agent-trace.record+json";
@@ -548,7 +548,7 @@ mod tests {
548548
idempotency_key: None,
549549
});
550550

551-
assert_eq!(record.version, "0.1.0");
551+
assert_eq!(record.version, env!("CARGO_PKG_VERSION"));
552552
assert_eq!(record.id, "f8cabb2a-18e4-4e52-a6df-cf5bf8c0fbe7");
553553
assert_eq!(record.timestamp, "2026-03-04T10:11:12Z");
554554
assert_eq!(record.vcs.r#type, "git");

cli/src/services/config.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ where
288288
}
289289

290290
let mut resolved_log_level = ResolvedValue {
291-
value: LogLevel::Info,
291+
value: LogLevel::Error,
292292
source: ValueSource::Default,
293293
};
294294
if let Some(value) = file_config.log_level {
@@ -447,7 +447,35 @@ where
447447
}
448448

449449
fn resolve_default_global_config_path() -> Result<PathBuf> {
450-
crate::services::local_db::resolve_state_data_root()
450+
#[cfg(target_os = "linux")]
451+
{
452+
if let Some(state_dir) = dirs::state_dir() {
453+
return Ok(state_dir);
454+
}
455+
456+
let Some(home_dir) = dirs::home_dir() else {
457+
bail!("Unable to resolve state directory: neither XDG_STATE_HOME nor HOME is set");
458+
};
459+
460+
Ok(home_dir.join(".local").join("state"))
461+
}
462+
463+
#[cfg(any(target_os = "macos", target_os = "windows"))]
464+
{
465+
return dirs::data_dir().ok_or_else(|| anyhow!("Unable to resolve data directory"));
466+
}
467+
468+
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
469+
{
470+
if let Some(state_dir) = dirs::state_dir() {
471+
return Ok(state_dir);
472+
}
473+
if let Some(data_dir) = dirs::data_dir() {
474+
return Ok(data_dir);
475+
}
476+
477+
bail!("Unable to resolve state or data directory")
478+
}
451479
}
452480

453481
fn parse_file_config(raw: &str, path: &Path, source: ConfigPathSource) -> Result<FileConfig> {
@@ -874,7 +902,7 @@ mod tests {
874902
|| Ok(PathBuf::from("/state")),
875903
)?;
876904

877-
assert_eq!(resolved.log_level.value, LogLevel::Info);
905+
assert_eq!(resolved.log_level.value, LogLevel::Error);
878906
assert_eq!(resolved.log_level.source.as_str(), "default");
879907
assert_eq!(resolved.timeout_ms.value, 30000);
880908
assert_eq!(resolved.timeout_ms.source.as_str(), "default");
@@ -1160,7 +1188,7 @@ mod tests {
11601188
source: ConfigPathSource::DefaultDiscoveredLocal,
11611189
}],
11621190
log_level: ResolvedValue {
1163-
value: LogLevel::Info,
1191+
value: LogLevel::Error,
11641192
source: ValueSource::Default,
11651193
},
11661194
timeout_ms: ResolvedValue {
@@ -1201,7 +1229,7 @@ mod tests {
12011229
let runtime = RuntimeConfig {
12021230
loaded_config_paths: vec![],
12031231
log_level: ResolvedValue {
1204-
value: LogLevel::Info,
1232+
value: LogLevel::Error,
12051233
source: ValueSource::Default,
12061234
},
12071235
timeout_ms: ResolvedValue {
@@ -1243,7 +1271,7 @@ mod tests {
12431271
source: ConfigPathSource::DefaultDiscoveredLocal,
12441272
}],
12451273
log_level: ResolvedValue {
1246-
value: LogLevel::Info,
1274+
value: LogLevel::Error,
12471275
source: ValueSource::Default,
12481276
},
12491277
timeout_ms: ResolvedValue {

cli/src/services/observability.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ pub struct ObservabilityConfig {
251251
impl Default for ObservabilityConfig {
252252
fn default() -> Self {
253253
Self {
254-
level: LogLevel::Info,
254+
level: LogLevel::Error,
255255
format: LogFormat::Text,
256256
}
257257
}
@@ -571,12 +571,12 @@ mod tests {
571571
}
572572

573573
#[test]
574-
fn logger_defaults_to_info_text() {
574+
fn logger_defaults_to_error_text() {
575575
let logger = Logger::from_env_lookup(|_| None).expect("logger should parse defaults");
576-
let line = logger.render_line(LogLevel::Info, "sce.test.event", "hello", &[]);
576+
let line = logger.render_line(LogLevel::Error, "sce.test.event", "hello", &[]);
577577
assert_eq!(
578578
line,
579-
"log_format=text level=info event_id=sce.test.event message=hello"
579+
"log_format=text level=error event_id=sce.test.event message=hello"
580580
);
581581
}
582582

@@ -661,7 +661,7 @@ mod tests {
661661
})
662662
.expect("logger should initialize with file sink");
663663

664-
logger.info("sce.test.event", "hello", &[("command", "setup")]);
664+
logger.error("sce.test.event", "hello", &[("command", "setup")]);
665665

666666
let content = std::fs::read_to_string(&log_path).expect("should read log file");
667667
assert!(content.contains("event_id=sce.test.event"));
@@ -682,7 +682,7 @@ mod tests {
682682
})
683683
.expect("logger should initialize with append sink");
684684

685-
logger.info("sce.test.event", "hello", &[]);
685+
logger.error("sce.test.event", "hello", &[]);
686686

687687
let content = std::fs::read_to_string(&log_path).expect("should read log file");
688688
assert!(content.starts_with("first\n"));
@@ -707,7 +707,7 @@ mod tests {
707707
})
708708
.expect("logger should repair loose permissions");
709709

710-
logger.info("sce.test.event", "hello", &[]);
710+
logger.error("sce.test.event", "hello", &[]);
711711

712712
let mode = std::fs::metadata(&log_path)
713713
.expect("metadata should be readable")

context/architecture.md

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

context/cli/config-precedence-contract.md

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)