{"repo":"NousResearch/hermes-agent","public_id":"98382","display_label":"Fix dropped/blocked concurrent plugin hook invocations","summary":"These items address a bug where parallel calls to the same plugin hook were incorrectly dropped or blocked, treating healthy concurrent invocations as if they had timed out. The fixes involve serializing overlapping callbacks and scoping gate keys more precisely to allow legitimate concurrent calls.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":111177,"merged_at":"2026-09-15T05:18:50+00:00"},"resolution":{"state":"resolved","by":"pr-111177"},"freshness":{"state":"verified","last_verified_at":"2026-09-15T05:18:50+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":98382,"pr_number":111177,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-15T05:18:50+00:00"}],"members":[{"kind":"issue","number":98382,"title":"Concurrent observer-hook invocations are dropped as if a callback had timed out","url":null,"state":"closed"},{"kind":"pr","number":98385,"title":"fix(plugins): don't drop healthy concurrent fail-open hook invocations","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"73f808e47f","number":0},{"kind":"pr","value":"#111177","number":111177},{"kind":"pr","value":"#110470","number":110470}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":104763,"title":"fix(plugins): serialize overlapping hook callback fires instead of dropping","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"75e9567ca7","number":0},{"kind":"pr","value":"#118844","number":118844}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":111177,"title":"Plugin hook gate keys on the call, so parallel same-tool calls are no longer blocked (#98382, salvage #110470)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/turn_finalizer.py","contributors/emails/deadczarvc@users.noreply.github.com","hermes_cli/plugins.py","hermes_cli/plugins_dispatch.py","hermes_cli/plugins_ledger.py","tests/hermes_cli/test_plugins.py","tools/terminal_tool_result.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}