{"repo":"NousResearch/hermes-agent","public_id":"102194","display_label":"CLI agent api_content sidecar persistence fixes","summary":"Multiple fixes and a bug report addressing the CLI path failing to persist api_content sidecar data, which caused injected decorations and prompt cache to be lost at turn boundaries. The work involves backfilling, row-addressed persistence, and handling pre-flushed user context.","subsystem":null,"counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":5},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":105842},"resolution":{"state":"resolved","by":"pr-105842"},"freshness":{"state":"verified","last_verified_at":"2026-09-09T05:02:01+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":102194,"pr_number":105842,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":102194,"title":"[Bug]: CLI path never persists api_content sidecar → injected <memory-context>/tool-result decorations dropped at turn boundary → first API call of every new turn misses prompt cache","url":null,"state":"closed"},{"kind":"pr","number":102239,"title":"fix(agent): persist api_content sidecar on the normal CLI path","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#102411","number":102411}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":102255,"title":"fix(agent): backfill stamped api_content for pre-persisted CLI rows","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#102239","number":102239}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":102411,"title":"fix(agent): row-addressed api_content backfill for pre-persisted user turns (#102194)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"db9ad7019b","number":0},{"kind":"pr","value":"#105842","number":105842}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":103565,"title":"fix(agent): persist pre-flushed user context by exact row identity","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#105842","number":105842},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#105842","number":105842}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":103721,"title":"fix(agent): row-addressed api_content backfill for pre-persisted user turns (#102194)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#103565","number":103565},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#102194","number":102194},{"kind":"pr","value":"#102411","number":102411},{"kind":"pr","value":"#103565","number":103565}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":105842,"title":"CLI keeps the api_content sidecar when a turn was persisted early — prompt cache survives (#102194, salvage #102411)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/session_persistence.py","agent/turn_context.py","hermes_state_messages.py","tests/agent/test_api_content_row_addressed_backfill.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}