HUB-1: зелёный main — граница workspace и UTF-8 в verification #2
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: ochenstarik/hermes-hub#2
Loading…
Reference in a new issue
No description provided.
Delete branch "hub/audit-p0-green-main"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задание
agents/inbox/2026-09-02-HUB1-audit-p0-green-main.md, P0-1.Обе причины красного CI воспроизведены локально до правки и проверены после.
1. Инвариант A37 не держался на Windows
rm -rf $HOME/.hermesпроходил мимо защиты: переменнойHOMEв окруженииWindows нет,
expandvarsоставлял$HOMEкак есть, путь переставал бытьабсолютным, склеивался с каталогом проекта и оказывался «внутри разрешённого
корня». Зеркальная дыра на Linux:
%USERPROFILE%\.hermesиC:\Windowsпроходили ровно так же.
Разбор пути сведён в один конвейер: классификация диалекта shell по самой
команде (а не по системе-хозяину) → раскрытие распознанных переменных, с
разрешением
HOME/USERPROFILEв домашний каталог даже когда их нет вокружении → нормализация разделителей → канонизация → сравнение с защищёнными
корнями. Каждый несостоявшийся шаг закрывает проход: непроверяемый путь не
считается разрешённым. Через тот же конвейер пропущены
validate_path,is_forbidden_path,is_inside_allowed_root.2. UTF-8 ронял verification-скрипт
UnicodeEncodeErrorна cp1252-консоли Windows-раннера — падал вывод, не логика.Общий помощник
console_encoding.force_utf8_outputставит UTF-8 на потоки иоставляет запасной путь, если поток перекодировать нельзя. Той же реализацией
заменён самодельный блок в
cli_commands.Проверено
scripts/verify_multi_provider_router.py: 10/10 подPYTHONIOENCODING=cp1252и подascii(до правки — падал на строке 63).ruff check .— чисто.Остальные P0 аудита (release gate, publication gate, CSRF на
/api/action) — вработе, отдельными коммитами: по заданию каждый сначала подтверждается
исполнением.
🤖 Generated with Claude Code