diff --git a/codex-rs/core/src/guardian/review_session_setup.rs b/codex-rs/core/src/guardian/review_session_setup.rs index 58192bbc61..ce3fd4bd13 100644 --- a/codex-rs/core/src/guardian/review_session_setup.rs +++ b/codex-rs/core/src/guardian/review_session_setup.rs @@ -310,9 +310,9 @@ impl ReviewerRequest for PreparedReview { // may follow a valid allow before publication; new guidance during capture must // invalidate the attempt without overwriting the last committed review. if let GuardianReviewSessionOutcome::Completed(Ok(Some(message))) = &result.outcome - && codex_guardian_reviewer::parse_guardian_assessment(Some(message)).is_ok_and( - |assessment| assessment.outcome == super::super::GuardianAssessmentOutcome::Allow, - ) + && codex_guardian_reviewer::parse_guardian_assessment(message).is_ok_and(|assessment| { + assessment.outcome == super::super::GuardianAssessmentOutcome::Allow + }) && let Some(authorization) = &self.params.authorization && let Some(outcome) = authorization .invalidation( diff --git a/codex-rs/ext/guardian-reviewer/src/assessment.rs b/codex-rs/ext/guardian-reviewer/src/assessment.rs index 43c4024ec6..80c5af6b74 100644 --- a/codex-rs/ext/guardian-reviewer/src/assessment.rs +++ b/codex-rs/ext/guardian-reviewer/src/assessment.rs @@ -21,10 +21,7 @@ pub struct GuardianAssessment { /// wrapper so transient formatting drift fails less noisily during dogfooding. /// Non-JSON output is still a review failure; this is only a thin recovery path /// for cases where the model wrapped the JSON in extra prose. -pub fn parse_guardian_assessment(text: Option<&str>) -> anyhow::Result { - let Some(text) = text else { - anyhow::bail!("guardian review completed without an assessment payload"); - }; +pub fn parse_guardian_assessment(text: &str) -> anyhow::Result { let parsed_payload = if let Ok(payload) = serde_json::from_str::(text) { payload diff --git a/codex-rs/ext/guardian-reviewer/src/assessment_tests.rs b/codex-rs/ext/guardian-reviewer/src/assessment_tests.rs index 5cdd8e311e..7d0565ef5f 100644 --- a/codex-rs/ext/guardian-reviewer/src/assessment_tests.rs +++ b/codex-rs/ext/guardian-reviewer/src/assessment_tests.rs @@ -3,9 +3,9 @@ use pretty_assertions::assert_eq; #[test] fn parse_guardian_assessment_extracts_embedded_json() { - let parsed = parse_guardian_assessment(Some( + let parsed = parse_guardian_assessment( "preface {\"risk_level\":\"medium\",\"user_authorization\":\"low\",\"outcome\":\"allow\",\"rationale\":\"ok\"}", - )) + ) .expect("guardian assessment"); assert_eq!( @@ -21,8 +21,7 @@ fn parse_guardian_assessment_extracts_embedded_json() { #[test] fn parse_guardian_assessment_treats_bare_allow_as_low_risk() { - let parsed = - parse_guardian_assessment(Some(r#"{"outcome":"allow"}"#)).expect("guardian assessment"); + let parsed = parse_guardian_assessment(r#"{"outcome":"allow"}"#).expect("guardian assessment"); assert_eq!( parsed, @@ -37,8 +36,7 @@ fn parse_guardian_assessment_treats_bare_allow_as_low_risk() { #[test] fn parse_guardian_assessment_treats_bare_deny_as_high_risk() { - let parsed = - parse_guardian_assessment(Some(r#"{"outcome":"deny"}"#)).expect("guardian assessment"); + let parsed = parse_guardian_assessment(r#"{"outcome":"deny"}"#).expect("guardian assessment"); assert_eq!( parsed, diff --git a/codex-rs/ext/guardian-reviewer/src/feedback.rs b/codex-rs/ext/guardian-reviewer/src/feedback.rs index 3eef79d6f0..5e5b34a411 100644 --- a/codex-rs/ext/guardian-reviewer/src/feedback.rs +++ b/codex-rs/ext/guardian-reviewer/src/feedback.rs @@ -63,7 +63,7 @@ impl<'a> FailedReviewFeedback<'a> { } let (status, decision) = match outcome { GuardianReviewSessionOutcome::Completed(Ok(Some(decision))) => { - match parse_guardian_assessment(Some(decision)) { + match parse_guardian_assessment(decision) { Ok(assessment) if assessment.outcome == GuardianAssessmentOutcome::Allow => { return None; } diff --git a/codex-rs/ext/guardian-reviewer/src/outcome.rs b/codex-rs/ext/guardian-reviewer/src/outcome.rs index 4be1df6b81..9f9aca5918 100644 --- a/codex-rs/ext/guardian-reviewer/src/outcome.rs +++ b/codex-rs/ext/guardian-reviewer/src/outcome.rs @@ -96,7 +96,7 @@ impl From for GuardianReviewOutcome { fn from(outcome: GuardianReviewSessionOutcome) -> Self { match outcome { GuardianReviewSessionOutcome::Completed(Ok(Some(message))) => { - match crate::parse_guardian_assessment(Some(&message)) { + match crate::parse_guardian_assessment(&message) { Ok(assessment) => Self::Completed(assessment), Err(error) => Self::Error(GuardianReviewError::parse(error)), }