Client or integration
Codex CLI
Area
Proxy and routing
Summary
src/server/responses/account-change-state.ts detects file_id/file_ids in a request (:85-109, :133-144) and classifies that state as non-portable across an account change (:208-218).
scrubUnportableConversationStateInPlace() then removes only previous_response_id and conversation (:152-171). A request whose only account-bound state is an uploaded file reference returns scrubbed === false and is replayed unchanged against the new account, which may not be able to read that file.
Existing tests exercise the classifier, or bodies that also contain previous_response_id; the file-only path is not covered. The gap predates 2.56.0, but it leaves the advertised safety fix of 2b43c14c03 incomplete.
Reproduction
- Send a pooled request that references an uploaded file by
file_id and carries no previous_response_id and no provider conversation id.
- Cause routing to change the serving account for that turn.
- The request is forwarded unchanged; the new account receives a reference this module already declared account-bound.
Suggested fix: fail closed or retain the issuing account when uploaded-file references are present. If dropping them is the chosen contract, remove every detected reference explicitly and cover the file-only case through applyAccountChangeConversationStateScrub().
Version
2.56.0 (e4a8539)
Operating system
macOS 15.5
Logs or error output
(upstream may answer with an inaccessible-file error for the rotated account)
Checks
Client or integration
Codex CLI
Area
Proxy and routing
Summary
src/server/responses/account-change-state.tsdetectsfile_id/file_idsin a request (:85-109,:133-144) and classifies that state as non-portable across an account change (:208-218).scrubUnportableConversationStateInPlace()then removes onlyprevious_response_idandconversation(:152-171). A request whose only account-bound state is an uploaded file reference returnsscrubbed === falseand is replayed unchanged against the new account, which may not be able to read that file.Existing tests exercise the classifier, or bodies that also contain
previous_response_id; the file-only path is not covered. The gap predates 2.56.0, but it leaves the advertised safety fix of2b43c14c03incomplete.Reproduction
file_idand carries noprevious_response_idand no provider conversation id.Suggested fix: fail closed or retain the issuing account when uploaded-file references are present. If dropping them is the chosen contract, remove every detected reference explicitly and cover the file-only case through
applyAccountChangeConversationStateScrub().Version
2.56.0 (e4a8539)
Operating system
macOS 15.5
Logs or error output
(upstream may answer with an inaccessible-file error for the rotated account)Checks