tests: add pre-turn context-diff compaction snapshots

This commit is contained in:
Charles Cunningham
2026-02-11 12:47:12 -08:00
parent 04f6e5dfc4
commit 277dd15df3
12 changed files with 213 additions and 84 deletions

View File

@@ -28,6 +28,7 @@ use core_test_support::test_codex::test_codex;
use core_test_support::wait_for_event;
use core_test_support::wait_for_event_match;
use std::collections::VecDeque;
use std::path::PathBuf;
use core_test_support::responses::ResponsesRequest;
use core_test_support::responses::ev_assistant_message;
@@ -66,6 +67,8 @@ const DUMMY_FUNCTION_NAME: &str = "test_tool";
const DUMMY_CALL_ID: &str = "call-multi-auto";
const FUNCTION_CALL_LIMIT_MSG: &str = "function call limit push";
const POST_AUTO_USER_MSG: &str = "post auto follow-up";
const PRETURN_CONTEXT_DIFF_CWD_MARKER: &str = "PRETURN_CONTEXT_DIFF_CWD";
const PRETURN_CONTEXT_DIFF_CWD: &str = "/tmp/PRETURN_CONTEXT_DIFF_CWD";
pub(super) const COMPACT_WARNING_MESSAGE: &str = "Heads up: Long threads and multiple compactions can cause the model to be less accurate. Start a new thread when possible to keep threads small and targeted.";
@@ -198,8 +201,8 @@ fn normalize_shape_text(text: &str) -> String {
if text.starts_with("# AGENTS.md instructions for ") {
return "<AGENTS_MD>".to_string();
}
if text.starts_with("<environment_context>") {
return "<ENVIRONMENT_CONTEXT>".to_string();
if let Some(env_context) = normalize_environment_context_for_shape(text) {
return env_context;
}
if text.contains("<permissions instructions>") {
return "<PERMISSIONS_INSTRUCTIONS>".to_string();
@@ -208,6 +211,25 @@ fn normalize_shape_text(text: &str) -> String {
text.replace('\n', "\\n")
}
fn normalize_environment_context_for_shape(text: &str) -> Option<String> {
if !text.starts_with("<environment_context>") {
return None;
}
let cwd = text.lines().find_map(|line| {
let trimmed = line.trim();
let cwd = trimmed.strip_prefix("<cwd>")?.strip_suffix("</cwd>")?;
Some(if cwd.contains(PRETURN_CONTEXT_DIFF_CWD_MARKER) {
PRETURN_CONTEXT_DIFF_CWD_MARKER.to_string()
} else {
"<CWD>".to_string()
})
});
Some(match cwd {
Some(cwd) => format!("<ENVIRONMENT_CONTEXT:cwd={cwd}>"),
None => "<ENVIRONMENT_CONTEXT:cwd=<NONE>>".to_string(),
})
}
fn message_text_for_shape(item: &Value) -> String {
item.get("content")
.and_then(Value::as_array)
@@ -310,12 +332,13 @@ fn request_input_shape(request: &ResponsesRequest) -> String {
.join("\n")
}
fn sectioned_request_shapes(sections: &[(&str, &ResponsesRequest)]) -> String {
sections
fn sectioned_request_shapes(scenario: &str, sections: &[(&str, &ResponsesRequest)]) -> String {
let sections = sections
.iter()
.map(|(title, request)| format!("## {title}\n{}", request_input_shape(request)))
.collect::<Vec<String>>()
.join("\n\n")
.join("\n\n");
format!("Scenario: {scenario}\n\n{sections}")
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
@@ -3121,6 +3144,20 @@ async fn snapshot_request_shape_pre_turn_compaction_including_incoming_user_mess
.expect("submit user input");
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
}
codex
.submit(Op::OverrideTurnContext {
cwd: Some(PathBuf::from(PRETURN_CONTEXT_DIFF_CWD)),
approval_policy: None,
sandbox_policy: None,
windows_sandbox_level: None,
model: None,
effort: None,
summary: None,
collaboration_mode: None,
personality: None,
})
.await
.expect("override turn context");
let image_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNgYAAAAAMAASsJTYQAAAAASUVORK5CYII="
.to_string();
codex
@@ -3147,15 +3184,22 @@ async fn snapshot_request_shape_pre_turn_compaction_including_incoming_user_mess
let follow_up_shape = request_input_shape(&requests[3]);
insta::assert_snapshot!(
"pre_turn_compaction_including_incoming_shapes",
sectioned_request_shapes(&[
("Local Compaction Request", &requests[2]),
("Local Post-Compaction History Layout", &requests[3]),
])
sectioned_request_shapes(
"Pre-turn auto-compaction with a context override emits the context diff in the compact request while the incoming user message is still excluded on main.",
&[
("Local Compaction Request", &requests[2]),
("Local Post-Compaction History Layout", &requests[3]),
]
)
);
assert!(
compact_shape.contains("<SUMMARIZATION_PROMPT>"),
"expected compact request to include summarization prompt"
);
assert!(
compact_shape.contains(PRETURN_CONTEXT_DIFF_CWD_MARKER),
"expected compact request to include pre-turn context diff"
);
assert!(
!compact_shape.contains("USER_THREE"),
"current main behavior excludes incoming user message from pre-turn compaction input"
@@ -3262,10 +3306,13 @@ async fn snapshot_request_shape_pre_turn_compaction_context_window_exceeded() {
let include_attempt_shape = request_input_shape(&requests[1]);
insta::assert_snapshot!(
"pre_turn_compaction_context_window_exceeded_shapes",
sectioned_request_shapes(&[(
"Local Compaction Request (Incoming User Excluded on main)",
&requests[1]
),])
sectioned_request_shapes(
"Pre-turn auto-compaction context-window failure on main: compaction request excludes the incoming user message and the turn errors.",
&[(
"Local Compaction Request (Incoming User Excluded on main)",
&requests[1]
),]
)
);
assert!(
@@ -3333,10 +3380,13 @@ async fn snapshot_request_shape_mid_turn_continuation_compaction() {
let follow_up_shape = request_input_shape(&requests[2]);
insta::assert_snapshot!(
"mid_turn_compaction_shapes",
sectioned_request_shapes(&[
("Local Compaction Request", &requests[1]),
("Local Post-Compaction History Layout", &requests[2]),
])
sectioned_request_shapes(
"Mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.",
&[
("Local Compaction Request", &requests[1]),
("Local Post-Compaction History Layout", &requests[2]),
]
)
);
assert!(
compact_shape.contains("function_call_output"),
@@ -3396,7 +3446,10 @@ async fn snapshot_request_shape_manual_compact_without_previous_user_messages()
let follow_up_shape = request_input_shape(&requests[0]);
insta::assert_snapshot!(
"manual_compact_without_prev_user_shapes",
sectioned_request_shapes(&[("Local Post-Compaction History Layout", &requests[0]),])
sectioned_request_shapes(
"Manual /compact with no prior user turn behaves as a no-op and follow-up turn carries only canonical initial context plus the new user message.",
&[("Local Post-Compaction History Layout", &requests[0]),]
)
);
assert!(
!follow_up_shape.contains("<SUMMARY:MANUAL_EMPTY_SUMMARY>"),
@@ -3470,10 +3523,13 @@ async fn snapshot_request_shape_manual_compact_with_previous_user_messages() {
let follow_up_shape = request_input_shape(&requests[2]);
insta::assert_snapshot!(
"manual_compact_with_history_shapes",
sectioned_request_shapes(&[
("Local Compaction Request", &requests[1]),
("Local Post-Compaction History Layout", &requests[2]),
])
sectioned_request_shapes(
"Manual /compact with prior user history compacts existing history and the follow-up turn includes the compact summary plus new user message.",
&[
("Local Compaction Request", &requests[1]),
("Local Post-Compaction History Layout", &requests[2]),
]
)
);
assert!(
compact_shape.contains("USER_ONE"),

View File

@@ -1,6 +1,7 @@
#![allow(clippy::expect_used)]
use std::fs;
use std::path::PathBuf;
use anyhow::Result;
use codex_core::CodexAuth;
@@ -42,6 +43,8 @@ fn estimate_compact_payload_tokens(request: &responses::ResponsesRequest) -> i64
}
const DUMMY_FUNCTION_NAME: &str = "test_tool";
const PRETURN_CONTEXT_DIFF_CWD_MARKER: &str = "PRETURN_CONTEXT_DIFF_CWD";
const PRETURN_CONTEXT_DIFF_CWD: &str = "/tmp/PRETURN_CONTEXT_DIFF_CWD";
fn summary_with_prefix(summary: &str) -> String {
format!("{SUMMARY_PREFIX}\n{summary}")
@@ -66,8 +69,8 @@ fn normalize_shape_text(text: &str) -> String {
if text.starts_with("# AGENTS.md instructions for ") {
return "<AGENTS_MD>".to_string();
}
if text.starts_with("<environment_context>") {
return "<ENVIRONMENT_CONTEXT>".to_string();
if let Some(env_context) = normalize_environment_context_for_shape(text) {
return env_context;
}
if text.contains("<permissions instructions>") {
return "<PERMISSIONS_INSTRUCTIONS>".to_string();
@@ -76,6 +79,25 @@ fn normalize_shape_text(text: &str) -> String {
text.replace('\n', "\\n")
}
fn normalize_environment_context_for_shape(text: &str) -> Option<String> {
if !text.starts_with("<environment_context>") {
return None;
}
let cwd = text.lines().find_map(|line| {
let trimmed = line.trim();
let cwd = trimmed.strip_prefix("<cwd>")?.strip_suffix("</cwd>")?;
Some(if cwd.contains(PRETURN_CONTEXT_DIFF_CWD_MARKER) {
PRETURN_CONTEXT_DIFF_CWD_MARKER.to_string()
} else {
"<CWD>".to_string()
})
});
Some(match cwd {
Some(cwd) => format!("<ENVIRONMENT_CONTEXT:cwd={cwd}>"),
None => "<ENVIRONMENT_CONTEXT:cwd=<NONE>>".to_string(),
})
}
fn message_text_for_shape(item: &Value) -> String {
item.get("content")
.and_then(Value::as_array)
@@ -178,12 +200,16 @@ fn request_input_shape(request: &responses::ResponsesRequest) -> String {
.join("\n")
}
fn sectioned_request_shapes(sections: &[(&str, &responses::ResponsesRequest)]) -> String {
sections
fn sectioned_request_shapes(
scenario: &str,
sections: &[(&str, &responses::ResponsesRequest)],
) -> String {
let sections = sections
.iter()
.map(|(title, request)| format!("## {title}\n{}", request_input_shape(request)))
.collect::<Vec<String>>()
.join("\n\n")
.join("\n\n");
format!("Scenario: {scenario}\n\n{sections}")
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
@@ -1515,6 +1541,21 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_including_incoming_us
.await;
for user in ["USER_ONE", "USER_TWO", "USER_THREE"] {
if user == "USER_THREE" {
codex
.submit(Op::OverrideTurnContext {
cwd: Some(PathBuf::from(PRETURN_CONTEXT_DIFF_CWD)),
approval_policy: None,
sandbox_policy: None,
windows_sandbox_level: None,
model: None,
effort: None,
summary: None,
collaboration_mode: None,
personality: None,
})
.await?;
}
codex
.submit(Op::UserInput {
items: vec![UserInput::Text {
@@ -1540,10 +1581,17 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_including_incoming_us
let follow_up_shape = request_input_shape(&requests[2]);
insta::assert_snapshot!(
"remote_pre_turn_compaction_including_incoming_shapes",
sectioned_request_shapes(&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[2]),
])
sectioned_request_shapes(
"Remote pre-turn auto-compaction with a context override emits the context diff in the compact request while excluding the incoming user message on main.",
&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[2]),
]
)
);
assert!(
compact_shape.contains(PRETURN_CONTEXT_DIFF_CWD_MARKER),
"expected remote compact request to include pre-turn context diff"
);
assert!(
!compact_shape.contains("USER_THREE"),
@@ -1640,10 +1688,13 @@ async fn snapshot_request_shape_remote_pre_turn_compaction_failure_stops_without
let include_attempt_shape = request_input_shape(&include_attempt_request);
insta::assert_snapshot!(
"remote_pre_turn_compaction_failure_shapes",
sectioned_request_shapes(&[(
"Remote Compaction Request (Incoming User Excluded on main)",
&include_attempt_request
),])
sectioned_request_shapes(
"Remote pre-turn auto-compaction parse failure on main: compaction request excludes the incoming user message and the turn stops.",
&[(
"Remote Compaction Request (Incoming User Excluded on main)",
&include_attempt_request
),]
)
);
assert!(
!include_attempt_shape.contains("USER_TWO"),
@@ -1721,10 +1772,13 @@ async fn snapshot_request_shape_remote_mid_turn_continuation_compaction() -> Res
let follow_up_shape = request_input_shape(&requests[1]);
insta::assert_snapshot!(
"remote_mid_turn_compaction_shapes",
sectioned_request_shapes(&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[1]),
])
sectioned_request_shapes(
"Remote mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.",
&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[1]),
]
)
);
assert!(
compact_shape.contains("function_call_output"),
@@ -1787,10 +1841,13 @@ async fn snapshot_request_shape_remote_manual_compact_without_previous_user_mess
let follow_up_shape = request_input_shape(&follow_up_request);
insta::assert_snapshot!(
"remote_manual_compact_without_prev_user_shapes",
sectioned_request_shapes(&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &follow_up_request),
])
sectioned_request_shapes(
"Remote manual /compact with no prior user turn still issues a compact request on main; follow-up turn carries canonical context and new user message.",
&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &follow_up_request),
]
)
);
assert!(
!follow_up_shape.contains("<SUMMARY:REMOTE_MANUAL_EMPTY_SUMMARY>"),
@@ -1873,10 +1930,13 @@ async fn snapshot_request_shape_remote_manual_compact_with_previous_user_message
let follow_up_shape = request_input_shape(&requests[1]);
insta::assert_snapshot!(
"remote_manual_compact_with_history_shapes",
sectioned_request_shapes(&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[1]),
])
sectioned_request_shapes(
"Remote manual /compact with prior user history compacts existing history and follow-up includes compact summary plus new user message.",
&[
("Remote Compaction Request", &compact_request),
("Remote Post-Compaction History Layout", &requests[1]),
]
)
);
assert!(
compact_shape.contains("USER_ONE"),

View File

@@ -1,12 +1,13 @@
---
source: core/tests/suite/compact.rs
assertion_line: 3086
expression: "sectioned_request_shapes(&[(\"Local Compaction Request\", &requests[1]),\n(\"Local Post-Compaction History Layout\", &requests[2]),])"
expression: "sectioned_request_shapes(\"Manual /compact with prior user history compacts existing history and the follow-up turn includes the compact summary plus new user message.\",\n&[(\"Local Compaction Request\", &requests[1]),\n(\"Local Post-Compaction History Layout\", &requests[2]),])"
---
Scenario: Manual /compact with prior user history compacts existing history and the follow-up turn includes the compact summary plus new user message.
## Local Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:FIRST_REPLY
05:message/user:<SUMMARIZATION_PROMPT>
@@ -14,7 +15,7 @@ expression: "sectioned_request_shapes(&[(\"Local Compaction Request\", &requests
## Local Post-Compaction History Layout
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/user:<SUMMARY:MANUAL_SUMMARY>
05:message/user:USER_TWO

View File

@@ -1,10 +1,11 @@
---
source: core/tests/suite/compact.rs
assertion_line: 3015
expression: "sectioned_request_shapes(&[(\"Local Post-Compaction History Layout\",\n&requests[0]),])"
expression: "sectioned_request_shapes(\"Manual /compact with no prior user turn behaves as a no-op and follow-up turn carries only canonical initial context plus the new user message.\",\n&[(\"Local Post-Compaction History Layout\", &requests[0]),])"
---
Scenario: Manual /compact with no prior user turn behaves as a no-op and follow-up turn carries only canonical initial context plus the new user message.
## Local Post-Compaction History Layout
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:<SUMMARIZATION_PROMPT>

View File

@@ -1,11 +1,13 @@
---
source: core/tests/suite/compact.rs
expression: "sectioned_request_shapes(&[(\"Local Compaction Request\", &requests[1]),\n(\"Local Post-Compaction History Layout\", &requests[2]),])"
expression: "sectioned_request_shapes(\"Mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.\",\n&[(\"Local Compaction Request\", &requests[1]),\n(\"Local Post-Compaction History Layout\", &requests[2]),])"
---
Scenario: Mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.
## Local Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:function_call/<TOOL_CALL>
05:function_call_output:<TOOL_ERROR_OUTPUT>
@@ -14,6 +16,6 @@ expression: "sectioned_request_shapes(&[(\"Local Compaction Request\", &requests
## Local Post-Compaction History Layout
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/user:<SUMMARY:MID_TURN_SUMMARY>

View File

@@ -1,12 +1,13 @@
---
source: core/tests/suite/compact.rs
assertion_line: 2878
expression: "sectioned_request_shapes(&[(\"Local Compaction Request (Incoming User Excluded on main)\",\n&requests[1]),])"
expression: "sectioned_request_shapes(\"Pre-turn auto-compaction context-window failure on main: compaction request excludes the incoming user message and the turn errors.\",\n&[(\"Local Compaction Request (Incoming User Excluded on main)\",\n&requests[1]),])"
---
Scenario: Pre-turn auto-compaction context-window failure on main: compaction request excludes the incoming user message and the turn errors.
## Local Compaction Request (Incoming User Excluded on main)
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:FIRST_REPLY
05:message/user:<SUMMARIZATION_PROMPT>

View File

@@ -1,22 +1,24 @@
---
source: core/tests/suite/compact.rs
assertion_line: 2763
expression: "sectioned_request_shapes(&[(\"Local Compaction Request\", &requests[2]),\n(\"Local Post-Compaction History Layout\", &requests[3]),])"
expression: "sectioned_request_shapes(\"Pre-turn auto-compaction with a context override emits the context diff in the compact request while the incoming user message is still excluded on main.\",\n&[(\"Local Compaction Request\", &requests[2]),\n(\"Local Post-Compaction History Layout\", &requests[3]),])"
---
Scenario: Pre-turn auto-compaction with a context override emits the context diff in the compact request while the incoming user message is still excluded on main.
## Local Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:FIRST_REPLY
05:message/user:USER_TWO
06:message/assistant:SECOND_REPLY
07:message/user:<SUMMARIZATION_PROMPT>
07:message/user:<ENVIRONMENT_CONTEXT:cwd=PRETURN_CONTEXT_DIFF_CWD>
08:message/user:<SUMMARIZATION_PROMPT>
## Local Post-Compaction History Layout
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=PRETURN_CONTEXT_DIFF_CWD>
03:message/user:USER_ONE
04:message/user:USER_TWO
05:message/user:<SUMMARY:PRE_TURN_SUMMARY>

View File

@@ -1,12 +1,13 @@
---
source: core/tests/suite/compact_remote.rs
assertion_line: 1879
expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[1]),])"
expression: "sectioned_request_shapes(\"Remote manual /compact with prior user history compacts existing history and follow-up includes compact summary plus new user message.\",\n&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[1]),])"
---
Scenario: Remote manual /compact with prior user history compacts existing history and follow-up includes compact summary plus new user message.
## Remote Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:REMOTE_MANUAL_FIRST_REPLY
@@ -14,6 +15,6 @@ expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact
00:message/user:USER_ONE
01:message/developer:<PERMISSIONS_INSTRUCTIONS>
02:message/user:<AGENTS_MD>
03:message/user:<ENVIRONMENT_CONTEXT>
03:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
04:message/user:<SUMMARY:REMOTE_MANUAL_WITH_HISTORY_SUMMARY>
05:message/user:USER_TWO

View File

@@ -1,15 +1,16 @@
---
source: core/tests/suite/compact_remote.rs
assertion_line: 1793
expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &follow_up_request),])"
expression: "sectioned_request_shapes(\"Remote manual /compact with no prior user turn still issues a compact request on main; follow-up turn carries canonical context and new user message.\",\n&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &follow_up_request),])"
---
Scenario: Remote manual /compact with no prior user turn still issues a compact request on main; follow-up turn carries canonical context and new user message.
## Remote Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
## Remote Post-Compaction History Layout
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE

View File

@@ -1,12 +1,13 @@
---
source: core/tests/suite/compact_remote.rs
assertion_line: 1727
expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[1]),])"
expression: "sectioned_request_shapes(\"Remote mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.\",\n&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[1]),])"
---
Scenario: Remote mid-turn continuation compaction after tool output: compact request includes tool artifacts and follow-up request includes the summary.
## Remote Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:function_call/<TOOL_CALL>
05:function_call_output:<TOOL_ERROR_OUTPUT>
@@ -15,5 +16,5 @@ expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact
00:message/user:USER_ONE
01:message/developer:<PERMISSIONS_INSTRUCTIONS>
02:message/user:<AGENTS_MD>
03:message/user:<ENVIRONMENT_CONTEXT>
03:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
04:message/user:<SUMMARY:REMOTE_MID_TURN_SUMMARY>

View File

@@ -1,11 +1,12 @@
---
source: core/tests/suite/compact_remote.rs
assertion_line: 1646
expression: "sectioned_request_shapes(&[(\"Remote Compaction Request (Incoming User Excluded on main)\",\n&include_attempt_request),])"
expression: "sectioned_request_shapes(\"Remote pre-turn auto-compaction parse failure on main: compaction request excludes the incoming user message and the turn stops.\",\n&[(\"Remote Compaction Request (Incoming User Excluded on main)\",\n&include_attempt_request),])"
---
Scenario: Remote pre-turn auto-compaction parse failure on main: compaction request excludes the incoming user message and the turn stops.
## Remote Compaction Request (Incoming User Excluded on main)
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:REMOTE_FIRST_REPLY

View File

@@ -1,16 +1,18 @@
---
source: core/tests/suite/compact_remote.rs
assertion_line: 1546
expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[2]),])"
expression: "sectioned_request_shapes(\"Remote pre-turn auto-compaction with a context override emits the context diff in the compact request while excluding the incoming user message on main.\",\n&[(\"Remote Compaction Request\", &compact_request),\n(\"Remote Post-Compaction History Layout\", &requests[2]),])"
---
Scenario: Remote pre-turn auto-compaction with a context override emits the context diff in the compact request while excluding the incoming user message on main.
## Remote Compaction Request
00:message/developer:<PERMISSIONS_INSTRUCTIONS>
01:message/user:<AGENTS_MD>
02:message/user:<ENVIRONMENT_CONTEXT>
02:message/user:<ENVIRONMENT_CONTEXT:cwd=<CWD>>
03:message/user:USER_ONE
04:message/assistant:REMOTE_FIRST_REPLY
05:message/user:USER_TWO
06:message/assistant:REMOTE_SECOND_REPLY
07:message/user:<ENVIRONMENT_CONTEXT:cwd=PRETURN_CONTEXT_DIFF_CWD>
## Remote Post-Compaction History Layout
00:message/user:USER_ONE
@@ -18,6 +20,6 @@ expression: "sectioned_request_shapes(&[(\"Remote Compaction Request\", &compact
02:message/user:USER_THREE
03:message/developer:<PERMISSIONS_INSTRUCTIONS>
04:message/user:<AGENTS_MD>
05:message/user:<ENVIRONMENT_CONTEXT>
05:message/user:<ENVIRONMENT_CONTEXT:cwd=PRETURN_CONTEXT_DIFF_CWD>
06:message/user:<SUMMARY:REMOTE_PRE_TURN_SUMMARY>
07:message/user:USER_THREE