feat(kanban): validate skill names at create + swarm time - #59691
feat(kanban): validate skill names at create + swarm time#59691ashgupta236-commits wants to merge 1 commit into
Conversation
Bad skill names passed via --skill crashed workers at spawn, burning the retry budget without doing the work. For swarms, a bad worker skill stalled the whole graph (verifier/synthesizer never started). Add _validate_skill_names() which resolves each name against the installed skills dirs via _find_skill(). Reject at _cmd_create and _cmd_swarm with a clear error + hint naming the unresolvable skills. Import-failures fall through to the existing spawn-time safety net.
Duplicate of #44101 (earliest open PR) -- both add create-time validation of |
|
Thanks for addressing the retry-burning failure and for adding swarm-time coverage. The problem is still present on current main: Problems
Suggested changes
Automated hermes-sweeper review. |
What
Passing an unresolvable skill name via
--skill(e.g.web-searchwhen the installed path isuniversal/web-search) crashed the worker at spawn and burned the retry budget without doing the work. In a swarm, a bad worker skill stalled the whole graph — the verifier and synthesizer never started because the worker never completed.Fix
Add
_validate_skill_names()which resolves each name against the installed skills dirs via_find_skill()(the same resolverskill_viewuses). Reject at:_cmd_create—--skillnames checked before the card is created_cmd_swarm— every worker's skills checked before the graph is builtBoth paths return a clear error naming the unresolvable skill(s) + a hint pointing to the trailing path component. Import/resolver failures fall through to the existing spawn-time error as the safety net (validation is additive, never blocking on resolver hiccups).
Why
A bad skill name is a typo, not a runtime condition — it should fail fast at creation with a message, not silently crash-loop 3x and block the card. The swarm case is worse: one bad worker skill dead-locks the entire fan-out.
Verification
--skill web-search→ rejected at create:kanban: --skill: unresolvable skill name(s): web-search+ hint--skill humanizer→ accepted, card created and auto-dispatched normally--worker researcher:bad:web-search→ rejected before graph creation