Stop the guard from blocking commands that only mention the CLI #29
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Summary
tea-guardсчитает командойteaлюбую строку, где словоteaокруженопробелами, — в том числе внутри закавыченного аргумента. Обычный вызов
python3 issue_new.py --title "..."блокируется, если в заголовке issueупомянута команда CLI.
Spec
hooks/tea-guard.shSteps to reproduce
Все четыре случая пойманы на живой работе, тремя независимыми агентами.
правки, которая эти вызовы и убирает:
teaи написан:Expected
Все четыре проходят.
python3,git,grep,echo— это не CLI Gitea,никакой идентичности они не используют,
--loginим не нужен. Гвард сторожитзапуски
tea, а не тексты о них. Проверка должна смотреть на то, что реальноисполняется — первое слово команды и первые слова после
;,&&,||,|,(— а не на любое вхождение токена в строку.Actual
Каждая из четырёх блокируется с exit 2:
Совет в сообщении невыполним: добавлять
--loginвissue_new.pyили вgit commitбессмысленно, а слой issue про логины вообще не знает. Обойтиможно только переписав человеческий текст под детектор — положить сообщение
коммита в файл и звать
git commit -F <файл>, или выбросить слово из заголовкаissue. Заголовок issue #38 не содержит слова отдельным токеном именно поэтому.
Ложное срабатывание безопасно в смысле идентичности (хук блокирует, а не
пропускает под чужим логином), но оно ломает офлайновые слои, которые к гварду
отношения не имеют, диктует, какие слова можно писать в прозе, и
диагностируется только чтением исходника хука: сообщение говорит про
--login,а виновата прозаическая строка.
Environment
hooks/tea-guard.sh:88(в других ветках:92) —re.search(r'(^|[;&|(]|\s)tea(\s|$)', cmd)применяется ко всей строкекоманды, без разбора на слова оболочки. Heredoc, кавычки и
-m "…"для неёнеотличимы от кода.
hooks/tea-guard.sh:28,127— модульshlexуже импортирован и используется:shlex.split(cmd)дал бы список слов, и проверять надо только те, что стоятна позиции команды.
Задевает именно этот репозиторий: он про
tea, и слово встречается взаголовках, телах issue и сообщениях коммитов постоянно.
macOS 25.5.0,
tea0.14.1, Python 3.14.5. Воспроизведено на веткахmain,feat/close-script,fix/no-store-for-label-payloads.Acceptance criteria
python3 …/issue_new.py --title "… tea …"выполняется, а не блокируетсяgit commit -m "…"иgit commit -F-с heredoc, где слово стоитотдельным токеном, проходят хук
grep -rn " tea " docs/иecho teaпроходят хукtea issues listбез--login "$GITEA_LOGIN"по-прежнему блокируется
логин
cd x && tea issues list …,x | tea …,( tea … ), подстановкиtests/, который разводит по разным веткам строку, толькоупоминающую слово, и строку, которая его запускает — покрыты все четыре
случая выше
fix/no-store-for-label-payloadsto fix/no-store-for-label-payloads