{"repo":"NousResearch/hermes-agent","public_id":"104462","display_label":"Fix token accounting for compaction decisions","summary":"These items address how compaction and overflow decisions use token counts, shifting from a rough bytes-divided-by-4 estimate to the provider's actual reported usage, and preventing provider-safe prompts from incorrectly triggering local compaction.","subsystem":"agent","counts":{"members":3,"open_issues":1,"open_issues_distinct":1,"open_prs":0,"closed_issues":0,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":104555,"merged_at":"2026-09-06T20:21:18+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-06T20:21:18+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":99421,"pr_number":104555,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-06T20:21:18+00:00"},{"issue_number":100381,"pr_number":104555,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-06T20:21:18+00:00"},{"issue_number":103391,"pr_number":104555,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-06T20:21:18+00:00"},{"issue_number":104462,"pr_number":104555,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-06T20:21:18+00:00"}],"members":[{"kind":"issue","number":104462,"title":"Token accounting: every compaction/overflow decision uses the provider's real usage, never the bytes/4 estimate","url":null,"state":"open"},{"kind":"pr","number":104516,"title":"fix(compression): stop provider-safe prompts from triggering local compaction","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"1d06f7a95a","number":0},{"kind":"commit","value":"a9e56c048a","number":0},{"kind":"pr","value":"#104555","number":104555},{"kind":"pr","value":"#104462","number":104462}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":104555,"title":"fix(compression): compaction gates follow the provider's real usage, never the bytes/4 estimate (#104462, salvage #99585 #100447)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/agent_init.py","agent/codex_runtime.py","agent/context_breakdown.py","agent/context_compressor.py","agent/conversation_compression.py","agent/conversation_loop.py","agent/model_metadata.py","agent/turn_context.py","agent/turn_context_compaction.py","agent/turn_preflight.py","agent/turn_preflight_gate.py","agent/turn_request_assembly.py","agent/turn_usage.py","agent/usage_anchor.py","evals/token_accounting/replay_gates.py","gateway/run_turn.py","hermes_cli/cli_status_bar_mixin.py","tests/agent/test_budget_reasoning_details_exclusion.py","tests/agent/test_context_compressor.py","tests/agent/test_context_compressor_cross_session_guard.py","tests/agent/test_context_compressor_session_end_clears_state.py","tests/agent/test_replay_budget_accounting.py","tests/agent/test_turn_base_display_anchor.py","tests/agent/test_turn_context_overflow_warning.py","tests/agent/test_usage_anchor.py","tests/run_agent/test_413_compression.py","tests/run_agent/test_compression_budget_rearm.py","website/docs/developer-guide/context-compression-and-caching.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}