@@ -1775,7 +1775,7 @@ defmodule CodexPoolerWeb.Runtime.BackendCodexControllerTest do
17751775 end
17761776 end
17771777
1778- test "POST /backend-api/codex/responses prefers x-codex-session -id over opencode continuity headers" ,
1778+ test "POST /backend-api/codex/responses prefers x-codex-window -id over broader continuity headers" ,
17791779 % { conn: conn } do
17801780 upstream =
17811781 start_upstream (
@@ -1788,10 +1788,14 @@ defmodule CodexPoolerWeb.Runtime.BackendCodexControllerTest do
17881788
17891789 setup = gateway_setup ( upstream )
17901790
1791+ raw_window_id = "window-session-wins-fixture"
1792+ expected_session_key = hashed_window_session_key ( raw_window_id )
1793+
17911794 conn =
17921795 conn
17931796 |> auth ( setup )
1794- |> put_req_header ( "x-codex-session-id" , "codex-session-wins-fixture" )
1797+ |> put_req_header ( "x-codex-window-id" , raw_window_id )
1798+ |> put_req_header ( "x-codex-session-id" , "codex-session-lower-priority-fixture" )
17951799 |> put_req_header ( "session-id" , "session-id-lower-priority-fixture" )
17961800 |> put_req_header ( "x-session-affinity" , "session-affinity-lower-priority-fixture" )
17971801 |> put_req_header ( "session_id" , "session-underscore-lower-priority-fixture" )
@@ -1805,16 +1809,17 @@ defmodule CodexPoolerWeb.Runtime.BackendCodexControllerTest do
18051809
18061810 assert % CodexSession { } =
18071811 session =
1808- Repo . get_by ( CodexSession , session_key: "codex-session-wins-fixture" )
1812+ Repo . get_by ( CodexSession , session_key: expected_session_key )
18091813
1814+ refute Repo . get_by ( CodexSession , session_key: "codex-session-lower-priority-fixture" )
18101815 refute Repo . get_by ( CodexSession , session_key: "session-id-lower-priority-fixture" )
18111816 refute Repo . get_by ( CodexSession , session_key: "session-affinity-lower-priority-fixture" )
18121817 refute Repo . get_by ( CodexSession , session_key: "session-underscore-lower-priority-fixture" )
18131818 refute Repo . get_by ( CodexSession , session_key: "conversation-lower-priority-fixture" )
18141819
18151820 assert [ request ] = Repo . all ( from ( r in Request , where: r . pool_id == ^ setup . pool . id ) )
18161821 assert request . request_metadata [ "codex_session_id" ] == session . id
1817- assert request . request_metadata [ "codex_session_key" ] == "codex-session-wins-fixture"
1822+ assert request . request_metadata [ "codex_session_key" ] == expected_session_key
18181823
18191824 assert [ captured ] = FakeUpstream . requests ( upstream )
18201825 captured_headers = Map . new ( captured . headers )
@@ -8812,6 +8817,14 @@ defmodule CodexPoolerWeb.Runtime.BackendCodexControllerTest do
88128817 refute inspect ( captured . headers ) =~ "lineage-unrelated"
88138818 end
88148819
8820+ defp hashed_window_session_key ( raw_window_id ) do
8821+ digest =
8822+ :crypto . hash ( :sha256 , raw_window_id )
8823+ |> Base . encode16 ( case: :lower )
8824+
8825+ "x-codex-window-id:" <> digest
8826+ end
8827+
88158828 defp assert_lineage_metadata_not_persisted! ( setup , metadata ) do
88168829 requests = Repo . all ( from ( r in Request , where: r . pool_id == ^ setup . pool . id ) )
88178830
@@ -8958,6 +8971,7 @@ defmodule CodexPoolerWeb.Runtime.BackendCodexControllerTest do
89588971 assert recovery [ "anchor_removal" ] [ "headers" ] == [
89598972 "x-codex-previous-response-id" ,
89608973 "x-codex-turn-state" ,
8974+ "x-codex-window-id" ,
89618975 "x-codex-session-id" ,
89628976 "session-id" ,
89638977 "x-session-affinity" ,
0 commit comments