{"repo":"NousResearch/hermes-agent","public_id":"126109","display_label":"Synthetic turns overwriting channel/prompt pins bug","summary":"Multiple fixes and a bug report address a gateway issue where synthetic goal-continuation, heartbeat, and resume turns incorrectly overwrite channel or prompt pins with None. The fixes aim to preserve existing pin state across these synthetic events.","subsystem":"gateway","counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":1,"attempt_prs":5},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":139865,"merged_at":"2026-10-16T21:41:45+00:00"},"resolution":{"state":"resolved","by":"pr-139865"},"freshness":{"state":"verified","last_verified_at":"2026-10-16T21:41:45+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":126109,"pr_number":139865,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-16T21:41:45+00:00"},{"issue_number":131031,"pr_number":139865,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-16T21:41:45+00:00"}],"members":[{"kind":"issue","number":126109,"title":"[Bug]: Goal-continuation / heartbeat / resume synthetic events overwrite the channel pin with None → system prompt flip, agent rebuild","url":null,"state":"closed"},{"kind":"pr","number":126151,"title":"fix(gateway): preserve channel pins for synthetic turns","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":126155,"title":"fix(gateway): stop synthetic goal/heartbeat turns from stomping channel_pin","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"abe539acdd303cdff13bddc4bd8a739dfa03bf58","number":0},{"kind":"pr","value":"#126155","number":126155},{"kind":"pr","value":"#126109","number":126109},{"kind":"pr","value":"#126167","number":126167},{"kind":"pr","value":"#126092","number":126092}],"category":"partial_fix","implication":"needs_llm"},"merged":false},{"kind":"pr","number":126167,"title":"fix(gateway): preserve prompt pins and pending turn ownership","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"5dd5193b32c4fc0dbc3aa595df6c51b6f4341840","number":0},{"kind":"commit","value":"8cd3d8149ead2b86aad825a539b1efabf7781963","number":0},{"kind":"pr","value":"#372451","number":372451},{"kind":"pr","value":"#127944","number":127944}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":127208,"title":"fix(gateway): preserve prompt pins across synthetic goal/heartbeat/resume turns","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"69c12764dfc6","number":0},{"kind":"pr","value":"#126167","number":126167}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":132681,"title":"fix(gateway): never downgrade channel pin to None on synthetic turns (fixes #126109)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#126167","number":126167}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":139865,"title":"fix(gateway): synthetic goal/heartbeat turns and post-eviction wakes keep the system prompt byte-stable (#126109, #131031, salvage #131032 #126155)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/platforms/event.py","gateway/run_agent_cache.py","gateway/run_busy.py","gateway/run_goals.py","gateway/run_turn.py","gateway/run_turn_prepare.py","gateway/session_envelope.py","gateway/slash_commands_goals.py","tests/gateway/test_internal_event_pin_wiring.py","tests/gateway/test_queue_consumption.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}