diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock
index 30ccb0edf6..94deb8b6d9 100644
--- a/codex-rs/Cargo.lock
+++ b/codex-rs/Cargo.lock
@@ -3423,6 +3423,7 @@ dependencies = [
"codex-http-client",
"codex-login",
"codex-protocol",
+ "codex-rollout",
"flate2",
"http 1.4.0",
"httpdate",
diff --git a/codex-rs/app-server/src/request_processors/feedback_processor.rs b/codex-rs/app-server/src/request_processors/feedback_processor.rs
index 1365cf7ecb..4179b8d500 100644
--- a/codex-rs/app-server/src/request_processors/feedback_processor.rs
+++ b/codex-rs/app-server/src/request_processors/feedback_processor.rs
@@ -206,7 +206,7 @@ impl FeedbackRequestProcessor {
.await
&& seen_attachment_paths.insert(rollout_path.clone())
{
- thread.rollout_filename = rollout_path
+ thread.rollout_filename = codex_rollout::plain_rollout_path(&rollout_path)
.file_name()
.map(|name| name.to_string_lossy().into_owned());
attachment_paths.push(FeedbackAttachmentPath {
diff --git a/codex-rs/feedback/Cargo.toml b/codex-rs/feedback/Cargo.toml
index 303cde11fe..2fa8d1f118 100644
--- a/codex-rs/feedback/Cargo.toml
+++ b/codex-rs/feedback/Cargo.toml
@@ -13,6 +13,7 @@ bytes = { workspace = true }
codex-http-client = { workspace = true }
codex-login = { workspace = true }
codex-protocol = { workspace = true }
+codex-rollout = { workspace = true }
flate2 = { workspace = true }
http = { workspace = true }
httpdate = { workspace = true }
diff --git a/codex-rs/feedback/src/lib.rs b/codex-rs/feedback/src/lib.rs
index 5cf7f76ddb..7c86bfefd0 100644
--- a/codex-rs/feedback/src/lib.rs
+++ b/codex-rs/feedback/src/lib.rs
@@ -395,6 +395,10 @@ enum AttachmentReadMode {
Prefix,
}
+#[cfg(test)]
+#[path = "rollout_attachment_tests.rs"]
+mod rollout_attachment_tests;
+
impl FeedbackAttachmentPath {
/// Read a whole regular file within the caller's size limit.
pub fn read_attachment(&self, max_bytes: usize) -> io::Result