Compare commits

...

1 Commits

Author SHA1 Message Date
Roy Han
9ea38c0ff0 [codex-analytics] enable general analytics by default 2026-04-10 15:52:38 -07:00
7 changed files with 35 additions and 18 deletions

View File

@@ -40,11 +40,9 @@ struct AppServerArgs {
fn main() -> anyhow::Result<()> {
arg0_dispatch_or_else(|arg0_paths: Arg0DispatchPaths| async move {
let args = AppServerArgs::parse();
let managed_config_path = managed_config_path_from_debug_env();
let loader_overrides = LoaderOverrides {
managed_config_path,
..Default::default()
};
let loader_overrides = managed_config_path_from_debug_env()
.map(LoaderOverrides::with_managed_config_path_for_tests)
.unwrap_or_default();
let transport = args.listen;
let session_source = args.session_source;
let auth = args.auth.try_into_settings()?;

View File

@@ -136,6 +136,11 @@ impl McpProcess {
cmd.current_dir(codex_home);
cmd.env("CODEX_HOME", codex_home);
cmd.env("RUST_LOG", "info");
// Keep integration tests isolated from host managed configuration.
cmd.env(
"CODEX_APP_SERVER_MANAGED_CONFIG_PATH",
codex_home.join("managed_config.toml"),
);
cmd.env_remove(CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR);
cmd.args(args);

View File

@@ -565,7 +565,7 @@ fn create_config_toml_with_chatgpt_base_url(
let general_analytics_toml = if general_analytics_enabled {
"\ngeneral_analytics = true".to_string()
} else {
String::new()
"\ngeneral_analytics = false".to_string()
};
let config_toml = codex_home.join("config.toml");
std::fs::write(

View File

@@ -1901,7 +1901,7 @@ fn create_config_toml_with_chatgpt_base_url(
let general_analytics_toml = if general_analytics_enabled {
"\ngeneral_analytics = true".to_string()
} else {
String::new()
"\ngeneral_analytics = false".to_string()
};
let config_toml = codex_home.join("config.toml");
std::fs::write(

View File

@@ -221,11 +221,25 @@ async fn thread_start_does_not_track_thread_initialized_analytics_without_featur
.await??;
let _ = to_response::<ThreadStartResponse>(resp)?;
let payload = wait_for_analytics_payload(&server, Duration::from_millis(250)).await;
assert!(
payload.is_err(),
"thread analytics should be gated off when general_analytics is disabled"
);
assert_no_thread_initialized_analytics(&server, Duration::from_millis(250)).await?;
Ok(())
}
async fn assert_no_thread_initialized_analytics(
server: &MockServer,
wait_duration: Duration,
) -> Result<()> {
tokio::time::sleep(wait_duration).await;
let requests = server.received_requests().await.unwrap_or_default();
for request in requests.iter().filter(|request| {
request.method == "POST" && request.url.path() == "/codex/analytics-events/events"
}) {
let payload: Value = serde_json::from_slice(&request.body)?;
assert!(
thread_initialized_event(&payload).is_err(),
"thread analytics should be gated off when general_analytics is disabled; payload={payload}"
);
}
Ok(())
}
@@ -829,7 +843,7 @@ fn create_config_toml_with_chatgpt_base_url(
let general_analytics_toml = if general_analytics_enabled {
"\ngeneral_analytics = true".to_string()
} else {
String::new()
"\ngeneral_analytics = false".to_string()
};
let config_toml = codex_home.join("config.toml");
std::fs::write(

View File

@@ -652,8 +652,8 @@ pub const FEATURES: &[FeatureSpec] = &[
FeatureSpec {
id: Feature::GeneralAnalytics,
key: "general_analytics",
stage: Stage::UnderDevelopment,
default_enabled: false,
stage: Stage::Stable,
default_enabled: true,
},
FeatureSpec {
id: Feature::Sqlite,

View File

@@ -128,9 +128,9 @@ fn tool_search_is_under_development_and_disabled_by_default() {
}
#[test]
fn general_analytics_is_under_development_and_disabled_by_default() {
assert_eq!(Feature::GeneralAnalytics.stage(), Stage::UnderDevelopment);
assert_eq!(Feature::GeneralAnalytics.default_enabled(), false);
fn general_analytics_is_stable_and_enabled_by_default() {
assert_eq!(Feature::GeneralAnalytics.stage(), Stage::Stable);
assert_eq!(Feature::GeneralAnalytics.default_enabled(), true);
}
#[test]