{"repo":"NousResearch/hermes-agent","public_id":"96811","display_label":"Prompt cache affinity key and session ID fixes","summary":"These issues and pull requests address bugs in how conversation affinity keys, prompt cache scopes, and per-response session IDs are generated or rotated, including host-declared key handling, scope isolation, and epoch mixing on new conversation rotation.","subsystem":null,"counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":3},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":97704,"merged_at":"2026-08-29T06:03:06+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-29T06:03:06+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":95514,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96570,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96597,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96811,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":97281,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"}],"members":[{"kind":"issue","number":96811,"title":"Per-response session ids churn every conversation-affinity key (prompt_cache_key, sticky session_id, x-grok-conv-id)","url":null,"state":"closed"},{"kind":"pr","number":96768,"title":"test(cache): pin the prompt-cache scope isolation invariant for per-response session ids","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#97704","number":97704}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":97158,"title":"fix(cache): honor the host-declared conversation key on the affinity-key path","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#96811","number":96811},{"kind":"pr","value":"#79017","number":79017},{"kind":"pr","value":"#86733","number":86733},{"kind":"pr","value":"#97709","number":97709},{"kind":"pr","value":"#98170","number":98170}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":97704,"title":"fix: P0 batch — five prompt-cache fixes + two desktop persistence fixes (salvage of #97618 #96755 #97327 #96768 #96608 #95886)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/bedrock_adapter.py","agent/chat_completion_helpers.py","agent/prompt_cache_boundary.py","agent/prompt_caching.py","agent/transcript_repair.py","agent/transports/chat_completions.py","agent/turn_finalizer.py","apps/desktop/electron/gateway-file-download-transport.test.ts","apps/desktop/electron/gateway-file-download.fs.test.ts","apps/desktop/electron/gateway-file-download.test.ts","apps/desktop/electron/gateway-file-download.ts","apps/desktop/electron/main.ts","apps/desktop/src/app/session/hooks/use-message-stream/index.ts","apps/desktop/src/app/session/hooks/use-message-stream/session-info-side-effects.test.tsx","apps/desktop/src/lib/chat-messages.test.ts","apps/desktop/src/lib/chat-messages/parts.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","hermes_state.py","run_agent.py","tests/agent/test_bedrock_adapter.py","tests/agent/test_prompt_cache_boundary.py","tests/agent/test_prompt_cache_scope.py","tests/agent/test_system_prompt_restore.py","tests/agent/test_turn_finalizer_final_response_persistence.py","tests/agent/transports/test_chat_completions.py","tests/run_agent/test_tool_call_incremental_persistence.py"]},{"kind":"pr","number":98795,"title":"fix(cache): mix conversation epoch into declared scope for /new rotation (#96811)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#98811","number":98811},{"kind":"pr","value":"#96811","number":96811}],"category":"superseded_by_pr","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}