{"repo":"NousResearch/hermes-agent","public_id":"111007","display_label":"Codex usage endpoint 401 token refresh handling","summary":"A bug report and related fix attempts addressing how the Codex /usage path handles server-revoked access tokens, specifically adding a forced refresh on 401 rather than relying solely on local JWT expiry.","subsystem":"agent","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":111476,"merged_at":"2026-09-15T11:53:40+00:00"},"resolution":{"state":"resolved","by":"pr-111476"},"freshness":{"state":"verified","last_verified_at":"2026-09-15T11:53:40+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":111007,"pr_number":111476,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-15T11:53:40+00:00"}],"members":[{"kind":"issue","number":111007,"title":"[Bug]: Codex /usage never recovers from a server-revoked access token — refresh trusts local JWT exp only, no 401-triggered retry on the quota path","url":null,"state":"closed"},{"kind":"pr","number":111022,"title":"fix(auth): restore Codex usage after revoked-token 401","url":null,"state":"open","close_reason":{"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":111476,"title":"fix(codex): /usage recovers from a server-revoked token with a forced refresh on 401 (#111007, salvage #111022)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/account_usage.py","hermes_cli/auth_codex.py","tests/agent/test_account_usage.py","tests/hermes_cli/test_auth_codex_provider.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}