{"repo":"NousResearch/hermes-agent","public_id":"22992","display_label":"Approval prompt delivery and cancellation accuracy","summary":"These items address issues where approval flows incorrectly report user denial when no prompt was actually shown, and work to correctly distinguish between cancelled approvals and explicit user denials. Related fixes also ensure approval, sudo, and secret prompts are properly rendered so tools do not silently time out.","subsystem":"agent","counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":112554,"merged_at":"2026-09-16T04:46:38+00:00"},"resolution":{"state":"resolved","by":"pr-112554"},"freshness":{"state":"verified","last_verified_at":"2026-09-16T04:46:38+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":22992,"pr_number":112308,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-16T01:44:47+00:00"},{"issue_number":22992,"pr_number":112554,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-16T04:46:38+00:00"},{"issue_number":112026,"pr_number":112308,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-16T01:44:47+00:00"}],"members":[{"kind":"issue","number":22992,"title":"Approval flow can return 'User denied' when no prompt is delivered","url":null,"state":"closed"},{"kind":"pr","number":25305,"title":"fix(approval): distinguish cancelled approval from explicit user deny","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"1e2cb57973","number":0},{"kind":"pr","value":"#112308","number":112308}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":112308,"title":"fix(approval): withdrawn gateway approval prompts no longer read as a user deny (#112026, #22992, salvage #25305, #112032)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/gateway/test_session_boundary_security_state.py","tests/tools/test_approval_cancelled_attribution.py","tests/tools/test_approval_interrupt.py","tools/approval.py","tools/approval_gateway_wait.py","tools/approval_prompt.py","tools/delegate_tool_child_run.py","tools/file_tools_write_guards.py","website/docs/developer-guide/observer-hooks.md","website/docs/user-guide/features/hooks.md"]},{"kind":"pr","number":112554,"title":"CLI approval prompts that were never answered no longer read as a user denial (#22992)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/observability/schemas/hermes.shared_metrics.v2.schema.json","hermes_cli/observability/shared_metrics_contract.py","tests/hermes_cli/test_relay_shared_metrics.py","tests/tools/test_approval.py","tests/tools/test_approval_cancelled_attribution.py","tools/approval.py","tools/approval_prompt.py","tools/file_tools_write_guards.py","website/docs/developer-guide/observer-hooks.md","website/docs/user-guide/features/hooks.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}