# role-hint.sh: подсказка роли по session_title, никогда не блокирует. H="$ROOT/hooks/role-hint.sh" assert_file "role-hint.sh существует" "$H" run(){ printf '%s' "$1" | bash "$H" 2>/dev/null; echo "rc=$?"; } assert_eq "admin: … → подсказка" "$(run '{"session_title":"admin: спринт 3","source":"startup"}')" \ "[claude-harness] Роль сессии: admin. Вызови /role admin до первого ответа. rc=0" assert_eq "qa без двоеточия → подсказка" "$(run '{"session_title":"qa прогон Q1"}')" \ "[claude-harness] Роль сессии: qa. Вызови /role qa до первого ответа. rc=0" assert_eq "регистр и пробелы в начале" "$(run '{"session_title":" Admin — Jira"}')" \ "[claude-harness] Роль сессии: admin. Вызови /role admin до первого ответа. rc=0" assert_eq "префикс алиаса cc-" "$(run '{"session_title":"cc-analyst ТЗ v4"}')" \ "[claude-harness] Роль сессии: analyst. Вызови /role analyst до первого ответа. rc=0" assert_eq "чужое слово → тишина" "$(run '{"session_title":"harness: роли"}')" "rc=0" assert_eq "слово с продолжением (devops) → тишина" "$(run '{"session_title":"devops"}')" "rc=0" assert_eq "без заголовка → тишина" "$(run '{"cwd":"/tmp","source":"resume"}')" "rc=0" assert_eq "пустой stdin → тишина, exit 0" "$(run '')" "rc=0" assert_eq "не JSON → тишина, exit 0" "$(run 'not json at all')" "rc=0" assert_grep "settings.hooks.json регистрирует role-hint" 'role-hint\.sh' "$ROOT/hooks/settings.hooks.json"