{"record":{"id":"00d779742d07c055","repo":"NousResearch/hermes-agent","slug":"no-chat-id-for-target-platform-value-delivery","errorCode":null,"errorMessage":"No chat ID for {target.platform.value} delivery","messagePattern":"No chat ID for (.+?) delivery","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"gateway/delivery.py","lineNumber":473,"sourceCode":"        env = os.getenv(\"HERMES_FILTER_SILENCE_NARRATION\")\n        if env is not None:\n            return env.strip().lower() in (\"1\", \"true\", \"yes\", \"on\")\n        return bool(getattr(self.config, \"filter_silence_narration\", True))\n\n    async def _deliver_to_platform(\n        self,\n        target: DeliveryTarget,\n        content: str,\n        metadata: Optional[Dict[str, Any]]\n    ) -> Dict[str, Any]:\n        \"\"\"Deliver content to a messaging platform.\"\"\"\n        transport = resolve_delivery_transport(target.platform, self.config, self.adapters)\n        if transport is None:\n            raise ValueError(f\"No adapter configured for {target.platform.value}\")\n        adapter = transport.adapter\n\n        if not target.chat_id:\n            raise ValueError(f\"No chat ID for {target.platform.value} delivery\")\n        \n        # Guard: handle oversized cron output.\n        #\n        # Two independent decisions:\n        #   1. AUDIT SAVE — when content exceeds MAX_PLATFORM_OUTPUT, the full\n        #      output is always written to disk as a recoverable audit trail.\n        #      This fires regardless of adapter capability (best-effort).\n        #   2. TRUNCATION — for non-chunking adapters, content above the cap is\n        #      truncated with a footer pointing to the saved file.  Chunking-\n        #      capable adapters (splits_long_messages=True) receive the full\n        #      payload and split natively in their send().\n        job_id = (metadata or {}).get(\"job_id\", \"unknown\")\n        saved_path: Optional[Path] = None\n\n        if len(content) > MAX_PLATFORM_OUTPUT:\n            # Step 1 — audit save (best-effort).  The save is a side-effect\n            # audit trail, not essential to delivery.  If it fails (full disk,\n            # permissions), delivery proceeds — the content reaches the adapter","sourceCodeStart":455,"sourceCodeEnd":491,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/gateway/delivery.py#L455-L491","documentation":"Error \"No chat ID for {target.platform.value} delivery\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at gateway/delivery.py:473 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a chat id for the delivery target on that platform.","Look up the correct chat/thread id for the destination."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}