{"repo":"NousResearch/hermes-agent","public_id":"6068","display_label":"Fix invalid emoji reactions in Telegram integration","summary":"These issues and pull requests address a bug where Telegram message reactions were not appearing correctly, specifically because invalid or improperly typed emoji values were being used for reaction events like processing completion.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":7175,"merged_at":"2026-04-10T12:34:33+00:00"},"resolution":{"state":"resolved","by":"pr-7175"},"freshness":{"state":"stale","last_verified_at":"2026-04-10T12:34:33+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":6068,"pr_number":7175,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-04-10T12:34:33+00:00"}],"members":[{"kind":"issue","number":6068,"title":"bug(telegram): on_processing_complete reaction not firing — ✅ never appears after response","url":null,"state":"closed"},{"kind":"pr","number":6097,"title":"fix(telegram): use valid Telegram reaction emojis in processing hooks","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":6685,"title":"fix(telegram): use ReactionTypeEmoji for message reactions","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#7175","number":7175}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":7175,"title":"fix(telegram): use valid reaction emojis for processing completion","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/platforms/telegram.py","tests/gateway/test_telegram_reactions.py"],"fix_hunks":[{"file":"gateway/platforms/telegram.py","hunks":["@@ -2802,5 +2802,5 @@ async def on_processing_complete(self, event: MessageEvent, outcome: ProcessingO\n             await self._set_reaction(\n                 chat_id,\n                 message_id,\n-                \"\\u2705\" if outcome == ProcessingOutcome.SUCCESS else \"\\u274c\",\n+                \"\\U0001f44d\" if outcome == ProcessingOutcome.SUCCESS else \"\\U0001f44e\",\n             )"]},{"file":"tests/gateway/test_telegram_reactions.py","hunks":["@@ -175,7 +175,7 @@ async def test_on_processing_start_handles_missing_ids(monkeypatch):\n \n @pytest.mark.asyncio\n async def test_on_processing_complete_success(monkeypatch):\n-    \"\"\"Successful processing should set check mark reaction.\"\"\"\n+    \"\"\"Successful processing should set thumbs-up reaction.\"\"\"\n     monkeypatch.setenv(\"TELEGRAM_REACTIONS\", \"true\")\n     adapter = _make_adapter()\n     event = _make_event()","@@ -185,13 +185,13 @@ async def test_on_processing_complete_success(monkeypatch):\n     adapter._bot.set_message_reaction.assert_awaited_once_with(\n         chat_id=123,\n         message_id=456,\n-        reaction=\"\\u2705\",\n+        reaction=\"\\U0001f44d\",\n     )\n \n \n @pytest.mark.asyncio\n async def test_on_processing_complete_failure(monkeypatch):\n-    \"\"\"Failed processing should set cross mark reaction.\"\"\"\n+    \"\"\"Failed processing should set thumbs-down reaction.\"\"\"\n     monkeypatch.setenv(\"TELEGRAM_REACTIONS\", \"true\")\n     adapter = _make_adapter()\n     event = _make_event()","@@ -201,7 +201,7 @@ async def test_on_processing_complete_failure(monkeypatch):\n     adapter._bot.set_message_reaction.assert_awaited_once_with(\n         chat_id=123,\n         message_id=456,\n-        reaction=\"\\u274c\",\n+        reaction=\"\\U0001f44e\",\n     )\n \n \n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}