{"repo":"NousResearch/hermes-agent","public_id":"70566","display_label":"Reclassify WAF/Cloudflare 403s away from auth errors","summary":"These issues and PRs address the misclassification of WAF and Cloudflare challenge responses (HTTP 403s) as authentication or API key failures. The work involves correctly identifying these as firewall or upstream blocks rather than rejected credentials.","subsystem":"agent","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":115812,"merged_at":"2026-09-19T16:57:22+00:00"},"resolution":{"state":"resolved","by":"pr-115812"},"freshness":{"state":"verified","last_verified_at":"2026-09-19T16:57:22+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":9721,"pr_number":115812,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-19T16:57:22+00:00"},{"issue_number":24293,"pr_number":115812,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-19T16:57:22+00:00"},{"issue_number":46000,"pr_number":115812,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-19T16:57:22+00:00"},{"issue_number":53099,"pr_number":115812,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-19T16:57:22+00:00"},{"issue_number":70566,"pr_number":115812,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-19T16:57:22+00:00"}],"members":[{"kind":"issue","number":70566,"title":"Cloudflare challenge 403s are misclassified as authentication failures","url":null,"state":"closed"},{"kind":"pr","number":70567,"title":"fix(agent): classify Cloudflare challenges as upstream","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"cb062f7bd3d1","number":0},{"kind":"pr","value":"#115812","number":115812},{"kind":"pr","value":"#24293","number":24293},{"kind":"pr","value":"#9721","number":9721},{"kind":"pr","value":"#53099","number":53099},{"kind":"pr","value":"#70566","number":70566},{"kind":"pr","value":"#46002","number":46002},{"kind":"pr","value":"#70567","number":70567},{"kind":"pr","value":"#53114","number":53114}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":115812,"title":"fix(providers): WAF 403s report as a firewall block, not a rejected key; anthropic_messages routes send custom extra_headers (#24293, #9721, #53099, #70566, salvage #46002 #70567 #53114)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/agent_runtime_helpers.py","agent/anthropic_adapter.py","agent/error_classifier.py","agent/error_surface.py","agent/turn_failure_copy.py","agent/turn_recovery.py","apps/desktop/src/i18n/en.ts","apps/desktop/src/lib/error-surface.test.ts","apps/desktop/src/lib/error-surface.ts","cli.py","cron/scheduler_failure_copy.py","hermes_cli/cli_chat_error_copy.py","tests/agent/test_anthropic_adapter_extra_headers.py","tests/agent/test_error_classifier.py","tests/agent/test_error_classifier_upstream_blocked.py","tests/agent/test_run_agent_codex_responses.py","tests/cron/test_cron_failure_notice_copy.py","tests/hermes_cli/test_single_query_exit_contract.py","tui_gateway/user_messages.py","ui-tui/src/app/userMessages.ts","website/docs/user-guide/configuring-models.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}