From c0749c349f9e8017451e53291b221d1d56102d6d Mon Sep 17 00:00:00 2001 From: jif-oai Date: Fri, 13 Feb 2026 16:17:21 +0000 Subject: [PATCH] Fix memories output schema requirements (#11748) Summary - make the phase1 memories schema require `rollout_slug` while still allowing it to be `null` - update the corresponding test to check the required fields and nullable type list Testing - Not run (not requested) --- codex-rs/core/src/memories/phase1.rs | 4 ++-- codex-rs/core/src/memories/tests.rs | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/codex-rs/core/src/memories/phase1.rs b/codex-rs/core/src/memories/phase1.rs index 1d5fc9e506..654e062e3e 100644 --- a/codex-rs/core/src/memories/phase1.rs +++ b/codex-rs/core/src/memories/phase1.rs @@ -118,10 +118,10 @@ pub fn output_schema() -> Value { "type": "object", "properties": { "rollout_summary": { "type": "string" }, - "rollout_slug": { "type": "string" }, + "rollout_slug": { "type": ["string", "null"] }, "raw_memory": { "type": "string" } }, - "required": ["rollout_summary", "raw_memory"], + "required": ["rollout_summary", "rollout_slug", "raw_memory"], "additionalProperties": false }) } diff --git a/codex-rs/core/src/memories/tests.rs b/codex-rs/core/src/memories/tests.rs index 900cc21840..92fd69e4df 100644 --- a/codex-rs/core/src/memories/tests.rs +++ b/codex-rs/core/src/memories/tests.rs @@ -22,7 +22,7 @@ fn memory_root_uses_shared_global_path() { } #[test] -fn stage_one_output_schema_keeps_rollout_slug_optional() { +fn stage_one_output_schema_requires_rollout_slug_and_keeps_it_nullable() { let schema = crate::memories::phase1::output_schema(); let properties = schema .get("properties") @@ -43,7 +43,24 @@ fn stage_one_output_schema_keeps_rollout_slug_optional() { properties.contains_key("rollout_slug"), "schema should declare rollout_slug" ); - assert_eq!(required_keys, vec!["raw_memory", "rollout_summary"]); + + let rollout_slug_type = properties + .get("rollout_slug") + .and_then(Value::as_object) + .and_then(|schema| schema.get("type")) + .and_then(Value::as_array) + .expect("rollout_slug type array"); + let mut rollout_slug_types = rollout_slug_type + .iter() + .map(|entry| entry.as_str().expect("type entry string")) + .collect::>(); + rollout_slug_types.sort_unstable(); + + assert_eq!( + required_keys, + vec!["raw_memory", "rollout_slug", "rollout_summary"] + ); + assert_eq!(rollout_slug_types, vec!["null", "string"]); } #[tokio::test]