{"repo":"NousResearch/hermes-agent","public_id":"8044","display_label":"Missing RedactingFormatter import causing gateway crashes","summary":"The majority of these items concern a NameError crash caused by a missing RedactingFormatter import introduced after a logging refactor, with multiple duplicate bug reports and competing fix attempts. A smaller set of items covers related logging and CLI config display improvements.","subsystem":"gateway","counts":{"members":11,"open_issues":0,"open_issues_distinct":0,"open_prs":2,"closed_issues":4,"merged_prs":1,"attempt_prs":6},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":8103,"merged_at":"2026-04-12T02:38:05+00:00"},"resolution":{"state":"partially_resolved","by":"pr-8103"},"freshness":{"state":"stale","last_verified_at":"2026-04-12T02:38:05+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.18472727272727274},"fix_edges":[{"issue_number":8044,"pr_number":8103,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-04-12T02:38:05+00:00"},{"issue_number":8090,"pr_number":8103,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-04-12T02:38:05+00:00"}],"members":[{"kind":"issue","number":8044,"title":"`NameError: name 'RedactingFormatter' is not defined` crashes Gateway on startup","url":null,"state":"closed"},{"kind":"issue","number":8090,"title":"`NameError: name 'RedactingFormatter' is not defined` crashes gateway on startup after #7991","url":null,"state":"closed"},{"kind":"issue","number":8091,"title":"[Bug]: NameError: name 'RedactingFormatter' is not defined — gateway startup crash","url":null,"state":"closed"},{"kind":"issue","number":8173,"title":"[Bug]: gateway startup can crash because RedactingFormatter is used without import","url":null,"state":"closed"},{"kind":"pr","number":8046,"title":"fix(gateway): add missing RedactingFormatter import","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#8103","number":8103}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":8092,"title":"fix: add missing RedactingFormatter import to prevent gateway crash on -v (closes #8090)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#8046","number":8046},{"kind":"pr","value":"#8103","number":8103}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":8101,"title":"fix(gateway): restore lazy import of RedactingFormatter after #7991","url":null,"state":"closed","close_reason":{"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":8103,"title":"fix(gateway): add missing RedactingFormatter import (salvage #8046)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/run.py","tests/gateway/test_runner_startup_failures.py"],"fix_hunks":[{"file":"gateway/run.py","hunks":["@@ -8560,6 +8560,8 @@ async def start_gateway(config: Optional[GatewayConfig] = None, replace: bool =\n     # verbosity=1    (-v):         INFO and above\n     # verbosity=2+   (-vv/-vvv):   DEBUG\n     if verbosity is not None:\n+        from agent.redact import RedactingFormatter\n+\n         _stderr_level = {0: logging.WARNING, 1: logging.INFO}.get(verbosity, logging.DEBUG)\n         _stderr_handler = logging.StreamHandler()\n         _stderr_handler.setLevel(_stderr_level)"]},{"file":"tests/gateway/test_runner_startup_failures.py","hunks":["@@ -132,6 +132,39 @@ async def test_runner_records_connected_platform_state_on_success(monkeypatch, t\n     assert state[\"platforms\"][\"discord\"][\"error_message\"] is None\n \n \n[redacted:email]\n+async def test_start_gateway_verbosity_imports_redacting_formatter(monkeypatch, tmp_path):\n+    \"\"\"Verbosity != None must not crash with NameError on RedactingFormatter (#8044).\"\"\"\n+    monkeypatch.setenv(\"HERMES_HOME\", str(tmp_path))\n+\n+    class _CleanExitRunner:\n+        def __init__(self, config):\n+            self.config = config\n+            self.should_exit_cleanly = True\n+            self.exit_reason = None\n+            self.adapters = {}\n+\n+        async def start(self):\n+            return True\n+\n+        async def stop(self):\n+            return None\n+\n+    monkeypatch.setattr(\"gateway.status.get_running_pid\", lambda: None)\n+    monkeypatch.setattr(\"tools.skills_sync.sync_skills\", lambda quiet=True: None)\n+    monkeypatch.setattr(\"hermes_logging.setup_logging\", lambda hermes_home, mode: tmp_path)\n+    monkeypatch.setattr(\"hermes_logging._add_rotating_handler\", lambda *args, **kwargs: None)\n+    monkeypatch.setattr(\"gateway.run.GatewayRunner\", _CleanExitRunner)\n+\n+    from gateway.run import start_gateway\n+\n+    # verbosity=1 triggers the code path that uses RedactingFormatter.\n+    # Before the fix this raised NameError.\n+    ok = await start_gateway(config=GatewayConfig(), replace=False, verbosity=1)\n+\n+    assert ok is True\n+\n+\n @pytest.mark.asyncio\n async def test_start_gateway_replace_force_uses_terminate_pid(monkeypatch, tmp_path):\n     monkeypatch.setenv(\"HERMES_HOME\", str(tmp_path))\n"]}]},{"kind":"pr","number":8178,"title":"fix: resolve Feishu gateway startup and config status regressions","url":null,"state":"open","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":18914,"title":"fix(cli): expand show_config messaging platforms to include all adapters","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#8178","number":8178}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":64049,"title":"fix(cli): show all messaging platforms in config, not just Telegram/Discord","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"8a48c58bd","number":0},{"kind":"commit","value":"cb2fe3c7b803","number":0},{"kind":"pr","value":"#1322","number":1322},{"kind":"pr","value":"#8103","number":8103},{"kind":"pr","value":"#957","number":957},{"kind":"pr","value":"#1027","number":1027},{"kind":"pr","value":"#1198","number":1198},{"kind":"pr","value":"#1217","number":1217},{"kind":"pr","value":"#926","number":926},{"kind":"pr","value":"#8046","number":8046},{"kind":"pr","value":"#8047","number":8047},{"kind":"pr","value":"#8058","number":8058},{"kind":"pr","value":"#8092","number":8092},{"kind":"pr","value":"#8090","number":8090},{"kind":"pr","value":"#8099","number":8099},{"kind":"pr","value":"#8101","number":8101},{"kind":"pr","value":"#7991","number":7991},{"kind":"pr","value":"#8044","number":8044},{"kind":"pr","value":"#8091","number":8091},{"kind":"pr","value":"#8173","number":8173},{"kind":"pr","value":"#8178","number":8178},{"kind":"pr","value":"#64049","number":64049},{"kind":"pr","value":"#8238","number":8238},{"kind":"pr","value":"#8273","number":8273},{"kind":"pr","value":"#14622","number":14622},{"kind":"pr","value":"#18914","number":18914},{"kind":"pr","value":"#8175","number":8175},{"kind":"pr","value":"#18949","number":18949},{"kind":"pr","value":"#34668","number":34668},{"kind":"pr","value":"#34671","number":34671},{"kind":"pr","value":"#34653","number":34653},{"kind":"pr","value":"#374151","number":374151}],"category":"partial_fix","implication":"needs_llm"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}