{"record":{"id":"fd5b35ad8bb14d48","repo":"openai/codex","slug":"guardian-review-completed-without-an-assessment-pa","errorCode":null,"errorMessage":"guardian review completed without an assessment payload","messagePattern":"guardian review completed without an assessment payload","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/core/src/guardian/prompt.rs","lineNumber":708,"sourceCode":"            }\n            continue;\n        }\n    }\n\n    if suffix_start < prefix_end {\n        suffix_start = prefix_end;\n    }\n\n    (&content[..prefix_end], &content[suffix_start..])\n}\n\n/// The model is asked for strict JSON, but we still accept a surrounding prose\n/// wrapper so transient formatting drift fails less noisily during dogfooding.\n/// Non-JSON output is still a review failure; this is only a thin recovery path\n/// for cases where the model wrapped the JSON in extra prose.\npub(crate) fn parse_guardian_assessment(text: Option<&str>) -> anyhow::Result<GuardianAssessment> {\n    let Some(text) = text else {\n        anyhow::bail!(\"guardian review completed without an assessment payload\");\n    };\n    let parsed_payload =\n        if let Ok(payload) = serde_json::from_str::<GuardianAssessmentPayload>(text) {\n            payload\n        } else if let (Some(start), Some(end)) = (text.find('{'), text.rfind('}'))\n            && start < end\n            && let Some(slice) = text.get(start..=end)\n        {\n            serde_json::from_str::<GuardianAssessmentPayload>(slice)?\n        } else {\n            anyhow::bail!(\"guardian assessment was not valid JSON\");\n        };\n\n    let outcome = parsed_payload.outcome;\n    let risk_level = parsed_payload.risk_level.unwrap_or(match outcome {\n        super::GuardianAssessmentOutcome::Allow => GuardianRiskLevel::Low,\n        super::GuardianAssessmentOutcome::Deny => GuardianRiskLevel::High,\n    });","sourceCodeStart":690,"sourceCodeEnd":726,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/core/src/guardian/prompt.rs#L690-L726","documentation":"Error \"guardian review completed without an assessment payload\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/core/src/guardian/prompt.rs:708 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the guardian review; if it repeats, report it, since the review model returned no assessment payload."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}