Bug Description
Kanban dispatcher fails to claim tasks assigned to "jules" due to case sensitivity in profile validation
When a task is explicitly assigned to the profile jules, the gateway-embedded Kanban dispatcher fails with:
> Invalid profile name 'Jules'. Must match [a-z0-9][a-z0-9_-]{0,63}
However, the same profile successfully auto-claims tasks when no assignee is set. Assigning Librarian (title case) sometimes works.
This is caused by inconsistent name canonicalization between the Kanban dashboard UI, task assignment, and the strict lowercase validation in profiles.py.
Code Locations
- hermes_cli/profiles.py:182 — validate_profile_name() + _PROFILE_ID_RE (strict lowercase)
- hermes_cli/profiles.py:193 — get_profile_dir() and profile_exists()
- hermes_cli/kanban_db.py:816 — assign_task()
- hermes_cli/kanban_db.py:1952 — dispatch_once()
- Kanban dashboard frontend (likely passing title-cased display names)
Suggested Fix
Add a normalize_profile_name(name: str) -> str helper that lowercases names (except "default") and update validation, assignment, and lookup paths to use it.
This would make profile handling robust to UI casing differences.
Debug report uploaded:
Report https://paste.rs/Veywd
agent.log https://paste.rs/6xy3u
gateway.log https://paste.rs/vyuH1
Steps to Reproduce
Reproduction
1. Have a profile named jules (lowercase directory).
2. Create a task in ready state.
3. Assign it to jules (either via dashboard or hermes kanban assign).
4. Trigger the dispatcher (hermes kanban dispatch or wait for gateway tick).
5. See validation error with 'Jules' (capital J).
Note: Leaving the assignee blank allows the default profile (jules) to auto-claim successfully.
Expected Behavior
Profile names should be normalized to lowercase consistently (or validation should be case-insensitive). Explicit assignment of the default profile should not fail.
Actual Behavior
Kanban dispatcher fails to claim tasks assigned to "jules" due to case sensitivity in profile validation
When a task is explicitly assigned to the profile jules, the gateway-embedded Kanban dispatcher fails with:
> Invalid profile name 'Jules'. Must match [a-z0-9][a-z0-9_-]{0,63}
Affected Component
Other
Messaging Platform (if gateway-related)
No response
Debug Report
Report https://paste.rs/Veywd
agent.log https://paste.rs/6xy3u
gateway.log https://paste.rs/vyuH1
Operating System
macOS Tahoe 26.3.1
Python Version
No response
Hermes Version
0.12.0
Additional Logs / Traceback (optional)
Root Cause Analysis (optional)
This is caused by inconsistent name canonicalization between the Kanban dashboard UI, task assignment, and the strict lowercase validation in profiles.py
Proposed Fix (optional)
Add a normalize_profile_name(name: str) -> str helper that lowercases names (except "default") and update validation, assignment, and lookup paths to use it.
Are you willing to submit a PR for this?
Bug Description
Kanban dispatcher fails to claim tasks assigned to "jules" due to case sensitivity in profile validation
When a task is explicitly assigned to the profile jules, the gateway-embedded Kanban dispatcher fails with:
Code Locations
Add a normalize_profile_name(name: str) -> str helper that lowercases names (except "default") and update validation, assignment, and lookup paths to use it.
This would make profile handling robust to UI casing differences.
Debug report uploaded:
Report https://paste.rs/Veywd
agent.log https://paste.rs/6xy3u
gateway.log https://paste.rs/vyuH1
Steps to Reproduce
Reproduction
Expected Behavior
Profile names should be normalized to lowercase consistently (or validation should be case-insensitive). Explicit assignment of the default profile should not fail.
Actual Behavior
Kanban dispatcher fails to claim tasks assigned to "jules" due to case sensitivity in profile validation
When a task is explicitly assigned to the profile jules, the gateway-embedded Kanban dispatcher fails with:
Affected Component
Other
Messaging Platform (if gateway-related)
No response
Debug Report
Operating System
macOS Tahoe 26.3.1
Python Version
No response
Hermes Version
0.12.0
Additional Logs / Traceback (optional)
Root Cause Analysis (optional)
This is caused by inconsistent name canonicalization between the Kanban dashboard UI, task assignment, and the strict lowercase validation in profiles.py
Proposed Fix (optional)
Add a normalize_profile_name(name: str) -> str helper that lowercases names (except "default") and update validation, assignment, and lookup paths to use it.
Are you willing to submit a PR for this?