Skip to content

[Bug]: Kanban dispatcher fails to claim tasks assigned to "jules" due to case sensitivity in profile validation #18498

@Vivere-Vitalis-LLC

Description

@Vivere-Vitalis-LLC

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?

  • I'd like to fix this myself and submit a PR

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — degraded but workaround existscomp/cronCron scheduler and job managementtype/bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions