From 9fec3a2b005f0a5fa28482b25500ce89f47fe978 Mon Sep 17 00:00:00 2001 From: Yvette Carlisle Date: Thu, 11 Jun 2026 10:23:01 +0800 Subject: [PATCH] {"schema":"decodex/commit/1","summary":"Remove legacy review config compatibility","authority":"manual"} --- apps/decodex/src/config.rs | 88 ++++++++++---------------------------- 1 file changed, 23 insertions(+), 65 deletions(-) diff --git a/apps/decodex/src/config.rs b/apps/decodex/src/config.rs index 835d5a690..0dafc6a14 100644 --- a/apps/decodex/src/config.rs +++ b/apps/decodex/src/config.rs @@ -187,15 +187,14 @@ impl ProjectGitHubConfig { #[serde(deny_unknown_fields)] #[derive(Default)] pub struct ProjectCodexConfig { - review: Option, - external_review_enabled: Option, - internal_review_mode: Option, + #[serde(default = "default_review_level")] + review: ReviewLevel, accounts: Option, } impl ProjectCodexConfig { /// Review level Decodex should apply for agent runs. pub fn review_level(&self) -> ReviewLevel { - self.review.unwrap_or_else(|| self.legacy_review_level()) + self.review } /// Optional ChatGPT accounts used to seed Codex app-server auth. @@ -220,22 +219,6 @@ impl ProjectCodexConfig { Ok(()) } - - fn legacy_review_level(&self) -> ReviewLevel { - match self.external_review_enabled { - Some(true) => ReviewLevel::Strict, - Some(false) => - match self.internal_review_mode.unwrap_or(LegacyInternalReviewMode::Prompt) { - LegacyInternalReviewMode::Prompt => ReviewLevel::Standard, - LegacyInternalReviewMode::Off => ReviewLevel::Basic, - }, - None => match self.internal_review_mode { - Some(LegacyInternalReviewMode::Prompt) => ReviewLevel::Standard, - Some(LegacyInternalReviewMode::Off) => ReviewLevel::Basic, - None => default_review_level(), - }, - } - } } /// Optional local-only classifier for public Linear projection text. @@ -441,13 +424,6 @@ impl Default for ReviewLevel { } } -#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize)] -#[serde(rename_all = "snake_case")] -enum LegacyInternalReviewMode { - Prompt, - Off, -} - /// Canonical repository root for the current Git checkout. pub fn canonical_repo_root_for_checkout(cwd: &Path) -> Result> { let worktree_root = git_absolute_rev_parse(cwd, "show-toplevel")? @@ -1220,36 +1196,15 @@ mod tests { } #[test] - fn parses_legacy_codex_review_fields() { - let temp_dir = TempDir::new().expect("temp dir should exist"); - let config_path = write_config_file( - temp_dir.path(), - r#" - service_id = "pubfi" - - [tracker] - api_key_env_var = "HOME" - - [github] - token_env_var = "HOME" - - [codex] - external_review_enabled = false - internal_review_mode = "prompt" - "#, - ); - let config = ServiceConfig::from_path(&config_path) - .expect("legacy codex review fields should parse"); - - assert_eq!(config.codex().review_level(), ReviewLevel::Standard); - } - - #[test] - fn explicit_codex_review_field_overrides_legacy_review_fields() { - let temp_dir = TempDir::new().expect("temp dir should exist"); - let config_path = write_config_file( - temp_dir.path(), - r#" + fn rejects_legacy_codex_review_fields() { + for (removed_field, removed_value) in + [("external_review_enabled", "false"), ("internal_review_mode", "\"prompt\"")] + { + let temp_dir = TempDir::new().expect("temp dir should exist"); + let config_path = write_config_file( + temp_dir.path(), + &format!( + r#" service_id = "pubfi" [tracker] @@ -1259,15 +1214,18 @@ mod tests { token_env_var = "HOME" [codex] - review = "basic" - external_review_enabled = true - internal_review_mode = "prompt" - "#, - ); - let config = - ServiceConfig::from_path(&config_path).expect("explicit review field should parse"); + {removed_field} = {removed_value} + "# + ), + ); + let error = ServiceConfig::from_path(&config_path) + .expect_err("legacy codex review field should be rejected"); - assert_eq!(config.codex().review_level(), ReviewLevel::Basic); + assert!( + error.to_string().contains(removed_field), + "error should identify removed field {removed_field}: {error:?}" + ); + } } #[test]