Preserve null developer instructions (#16976)

Preserve explicit null developer-instruction overrides across app-server
resume and fork flows.
This commit is contained in:
Ahmed Ibrahim
2026-04-07 09:32:14 -07:00
committed by GitHub
parent feb4f0051a
commit cd591dc457
19 changed files with 121 additions and 1 deletions
+3
View File
@@ -56,6 +56,7 @@ async fn extract_metadata_from_rollout_uses_session_meta() {
agent_role: None,
model_provider: Some("openai".to_string()),
base_instructions: None,
developer_instructions: None,
dynamic_tools: None,
memory_mode: None,
};
@@ -107,6 +108,7 @@ async fn extract_metadata_from_rollout_returns_latest_memory_mode() {
agent_role: None,
model_provider: Some("openai".to_string()),
base_instructions: None,
developer_instructions: None,
dynamic_tools: None,
memory_mode: None,
};
@@ -369,6 +371,7 @@ fn write_rollout_in_sessions_with_cwd(
agent_role: None,
model_provider: Some("test-provider".to_string()),
base_instructions: None,
developer_instructions: None,
dynamic_tools: None,
memory_mode: None,
};
+5
View File
@@ -82,6 +82,7 @@ pub enum RolloutRecorderParams {
forked_from_id: Option<ThreadId>,
source: SessionSource,
base_instructions: Option<BaseInstructions>,
developer_instructions: Option<Option<String>>,
dynamic_tools: Vec<DynamicToolSpec>,
event_persistence_mode: EventPersistenceMode,
},
@@ -111,6 +112,7 @@ impl RolloutRecorderParams {
forked_from_id: Option<ThreadId>,
source: SessionSource,
base_instructions: Option<BaseInstructions>,
developer_instructions: Option<Option<String>>,
dynamic_tools: Vec<DynamicToolSpec>,
event_persistence_mode: EventPersistenceMode,
) -> Self {
@@ -119,6 +121,7 @@ impl RolloutRecorderParams {
forked_from_id,
source,
base_instructions,
developer_instructions,
dynamic_tools,
event_persistence_mode,
}
@@ -380,6 +383,7 @@ impl RolloutRecorder {
forked_from_id,
source,
base_instructions,
developer_instructions,
dynamic_tools,
event_persistence_mode,
} => {
@@ -409,6 +413,7 @@ impl RolloutRecorder {
source,
model_provider: Some(config.model_provider_id().to_string()),
base_instructions: Some(base_instructions),
developer_instructions,
dynamic_tools: if dynamic_tools.is_empty() {
None
} else {
+2
View File
@@ -74,6 +74,7 @@ async fn recorder_materializes_only_after_explicit_persist() -> std::io::Result<
/*forked_from_id*/ None,
SessionSource::Exec,
Some(BaseInstructions::default()),
/*developer_instructions*/ None,
Vec::new(),
EventPersistenceMode::Limited,
),
@@ -167,6 +168,7 @@ async fn metadata_irrelevant_events_touch_state_db_updated_at() -> std::io::Resu
/*forked_from_id*/ None,
SessionSource::Cli,
Some(BaseInstructions::default()),
/*developer_instructions*/ None,
Vec::new(),
EventPersistenceMode::Limited,
),
+1
View File
@@ -1140,6 +1140,7 @@ async fn test_updated_at_uses_file_mtime() -> Result<()> {
agent_role: None,
model_provider: Some("test-provider".into()),
base_instructions: None,
developer_instructions: None,
dynamic_tools: None,
memory_mode: None,
},