fix(validate): check for [agents] instead of [agent] in HAND.toml (#15)

* fix(validate): check for [agents] instead of [agent] in HAND.toml

All 14 hands use [agents.main] (plural) for multi-agent config,
but the validator was checking for [agent] (singular), causing
all hands to fail validation.

* fix(routing): resolve 19 routing alias collisions

Agent is a sub-unit of hand, so hands take priority for routing.
Remove conflicting aliases from agent side when hand already owns them.

- analyst: remove data analysis, analyze data, dashboard (owned by hand/analytics)
- data-scientist: remove statistical analysis, forecast, prediction (owned by hand/analytics, hand/predictor)
- sales-assistant: remove prospecting, sales, pipeline (owned by hand/lead, hand/devops)
- devops-lead: remove incident response, kubernetes, terraform (owned by hand/devops)
- researcher: remove deep research, research, literature review (owned by hand/researcher)
- academic-researcher: remove literature review, systematic review (owned by hand/researcher)
- social-media: remove duplicate content calendar from weak_aliases
- hand/collector: remove competitive analysis (owned by hand/strategist)
This commit is contained in:
Evan authored and GitHub committed 2026-03-23 09:41:29 +09:00
1 parent 31776736d0
commit d778da72a2
9 files changed
+8 -17

No files matched your search

+2 -2
View File
@@ -162,8 +162,8 @@ def validate_hand_file(filepath: Path, integration_ids: set[str]) -> list[str]:
if category and category not in VALID_HAND_CATEGORIES:
errors.append(f"{rel}: Invalid category '{category}' (valid: {', '.join(sorted(VALID_HAND_CATEGORIES))})")
if "agent" not in data:
errors.append(f"{rel}: Missing [agent] section")
if "agents" not in data:
errors.append(f"{rel}: Missing [agents] section")
# Cross-reference: check that [[requires]] with requirement_type = "integration"
# reference existing integration TOML files