{"repo":"NousResearch/hermes-agent","public_id":"2745","display_label":"IndexError from whitespace-only input in build_plan_path","summary":"Multiple bug reports and proposed fixes addressing an unguarded str.split() index access in build_plan_path that raises an IndexError when given whitespace-only input. Related guards are also proposed for Slack command text parsing.","subsystem":"agent","counts":{"members":8,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":1,"attempt_prs":5},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":26245},"resolution":{"state":"partially_resolved","by":"pr-26245"},"freshness":{"state":"verified","last_verified_at":"2026-05-15T08:50:57+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.22714285714285712},"fix_edges":[{"issue_number":2745,"pr_number":26245,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":2745,"title":"[Bug]: Unchecked str.split() index access can raise IndexError","url":null,"state":"closed"},{"kind":"issue","number":7576,"title":"[Bug]: IndexError in build_plan_path on whitespace-only input","url":null,"state":"closed"},{"kind":"pr","number":2752,"title":"fix: guard str.split() index access against empty results","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#26245","number":26245}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":7474,"title":"fix(skills): prevent IndexError in build_plan_path on whitespace-only input","url":null,"state":"closed","close_reason":{"category":"volume_quota","implication":"active"},"merged":false},{"kind":"pr","number":7613,"title":"fix(plan): guard build_plan_path against whitespace-only input","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#7474","number":7474}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":7692,"title":"fix: guard build_plan_path against whitespace-only input","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#7474","number":7474},{"kind":"pr","value":"#7613","number":7613}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":9102,"title":"fix(agent): handle whitespace-only input in build_plan_path","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"b2e124d08","number":0},{"kind":"pr","value":"#15047","number":15047}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":26245,"title":"fix(slack): guard split()[0] against whitespace-only command text","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/platforms/slack.py","scripts/release.py"],"fix_hunks":[{"file":"gateway/platforms/slack.py","hunks":["@@ -2785,7 +2785,10 @@ async def _handle_slash_command(self, command: dict) -> None:\n             from hermes_cli.commands import slack_subcommand_map\n             subcommand_map = slack_subcommand_map()\n             subcommand_map[\"compact\"] = \"/compress\"\n-            first_word = text.split()[0] if text else \"\"\n+            # Guard against whitespace-only text where ``text`` is truthy but\n+            # ``text.split()`` returns ``[]`` (e.g. user sends ``/hermes   ``).\n+            parts = text.split() if text else []\n+            first_word = parts[0] if parts else \"\"\n             if first_word in subcommand_map:\n                 rest = text[len(first_word):].strip()\n                 text = f\"{subcommand_map[first_word]} {rest}\".strip() if rest else subcommand_map[first_word]"]},{"file":"scripts/release.py","hunks":["@@ -1069,6 +1069,8 @@\n     \"[redacted:email]\": \"yifengingit\",  # PR #25589 salvage (AUTOINCREMENT id ordering)\n     \"[redacted:email]\": \"vanthinh6886\",  # PR #25562 salvage (.env 0600 perms)\n     \"[redacted:email]\": \"Arkmusn\",  # PR #25559 salvage (approvals.timeout from config)\n+    \"[redacted:email]\": \"nidhi-singh02\",  # PR #2752 salvage (slack whitespace-only IndexError guard)\n+    \"[redacted:email]\": \"nidhi-singh02\",\n }\n \n \n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}