{"repo":"NousResearch/hermes-agent","public_id":"98728","display_label":"Fix approval bypass for API run transport scoping","summary":"These items address a bug where the /v1/runs approval transport was being bypassed due to incorrect classification or scoping of the api_server as unattended. Fixes scope API runs and unattended exclusions to the correct transport context.","subsystem":"gateway","counts":{"members":5,"open_issues":1,"open_issues_distinct":1,"open_prs":1,"closed_issues":0,"merged_prs":2,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":135049,"merged_at":"2026-10-08T10:50:23+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-10-08T10:50:23+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":71571,"pr_number":135049,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-08T10:50:23+00:00"},{"issue_number":98728,"pr_number":113820,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-17T16:04:39+00:00"},{"issue_number":98728,"pr_number":135049,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-10-08T10:50:23+00:00"},{"issue_number":100532,"pr_number":135049,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-08T10:50:23+00:00"},{"issue_number":112548,"pr_number":113820,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-17T16:04:39+00:00"}],"members":[{"kind":"issue","number":98728,"title":"[Bug]: /v1/runs approval transport is bypassed because api_server is classified as unattended","url":null,"state":"open"},{"kind":"pr","number":98735,"title":"fix(approval): make unattended exclusion transport-scoped so /v1/runs approval works","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"20119e7985","number":0},{"kind":"pr","value":"#98558","number":98558}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":109496,"title":"fix(approval): scope API runs to resolver capability","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"8918717b1a","number":0},{"kind":"commit","value":"e760a20d89","number":0},{"kind":"commit","value":"71ff5238ec","number":0},{"kind":"commit","value":"2afb405337","number":0},{"kind":"pr","value":"#98728","number":98728},{"kind":"pr","value":"#135049","number":135049},{"kind":"pr","value":"#113820","number":113820},{"kind":"pr","value":"#98735","number":98735},{"kind":"pr","value":"#125658","number":125658},{"kind":"pr","value":"#125367","number":125367}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":113820,"title":"fix(tui_gateway): old app builds no longer stall the agent on clarify/approval (closes remaining atoms of #112548)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/lib/json-rpc-gateway-heartbeat.test.ts","apps/shared/src/gateway-contract.generated.ts","apps/shared/src/gateway-contract.openrpc.json","apps/shared/src/json-rpc-channel.test.ts","apps/shared/src/json-rpc-channel.ts","tests/tools/test_approval_gateway_wait_late_choice.py","tests/tui_gateway/test_protocol.py","tools/approval.py","tools/approval_gateway_wait.py","tui_gateway/AGENTS.md","tui_gateway/contracts/liveness.py","tui_gateway/methods_voice.py","tui_gateway/server.py","tui_gateway/server_requests.py","tui_gateway/session_transports.py","ui-tui/src/__tests__/gatewayClient.test.ts","website/docs/developer-guide/programmatic-integration.md"]},{"kind":"pr","number":135049,"title":"Webhook and listener-less API runs deny flagged commands instantly instead of waiting on an approval nobody can answer (#100532, salvage #125367)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_approval_unattended_presence.py","tests/tools/test_cron_not_interactive.py","tools/approval.py","tools/approval_context.py","website/docs/user-guide/security.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}