From 4a21de9908233ee1c2356a56c27353a20a6e3a34 Mon Sep 17 00:00:00 2001 From: Eric Traut Date: Mon, 6 Apr 2026 15:25:26 -0700 Subject: [PATCH] Lock alarm RPCs behind experimental gating --- .../src/protocol/common.rs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index 3227cb54fc..574206882b 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -1836,6 +1836,41 @@ mod tests { assert_eq!(reason, Some("thread/realtime/outputAudio/delta")); } + #[test] + fn thread_alarm_create_is_marked_experimental() { + let request = ClientRequest::ThreadAlarmCreate { + request_id: RequestId::Integer(1), + params: v2::ThreadAlarmCreateParams { + thread_id: "thr_123".to_string(), + cron_expression: "@after-turn".to_string(), + prompt: "run tests".to_string(), + run_once: Some(false), + delivery: v2::AlarmDelivery::AfterTurn, + }, + }; + let reason = crate::experimental_api::ExperimentalApi::experimental_reason(&request); + assert_eq!(reason, Some("thread/alarm/create")); + } + + #[test] + fn thread_alarm_fired_notification_is_marked_experimental() { + let notification = ServerNotification::ThreadAlarmFired(v2::ThreadAlarmFiredNotification { + thread_id: "thr_123".to_string(), + alarm: v2::ThreadAlarm { + id: "alarm_123".to_string(), + cron_expression: "@after-turn".to_string(), + prompt: "run tests".to_string(), + run_once: false, + delivery: v2::AlarmDelivery::AfterTurn, + created_at: 1, + next_run_at: None, + last_run_at: None, + }, + }); + let reason = crate::experimental_api::ExperimentalApi::experimental_reason(¬ification); + assert_eq!(reason, Some("thread/alarm/fired")); + } + #[test] fn command_execution_request_approval_additional_permissions_is_marked_experimental() { let params = v2::CommandExecutionRequestApprovalParams {