Scope tea-guard to real CLI invocations #30
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
hooks/tea-guard.sh:92считает командой CLI любую строку, где словоteaстоит отдельным токеном, — включая текст внутри heredoc, кавычек и сообщения
коммита. В результате хук блокирует обычные bash-команды, которые ничего не
запускают, а лишь упоминают CLI: например
git commit, чьё сообщение цитируетвызов, который эта же правка и убирает.
Spec
hooks/tea-guard.sh:91-93
Steps to reproduce
Внутри репозитория с закреплённым логином выполнить коммит, в теле
сообщения которого слово стоит отдельным токеном:
То же самое происходит на любой команде с таким токеном, ни одна из которых
не запускает CLI:
Expected
Хук пропускает команду:
git,python3иgrep— это не CLI,--loginим не нужен. Проверка должна смотреть на то, что реально исполняется —
первое слово команды и первые слова после
;,&&,||,|,(— а не налюбое вхождение токена в строку.
Actual
Команда блокируется с exit 2:
Обойти это можно только переписав текст: положить сообщение коммита в файл и
звать
git commit -F <файл>, или выбросить слово из заголовка issue. То естьхук диктует, какие слова можно писать в прозе, — а сообщение коммита о правке,
которая убирает сырые вызовы, обязано их цитировать.
Причина в
hooks/tea-guard.sh:92:re.searchидёт по всей строке команды, а heredoc, кавычки и-m "…"для неёнеотличимы от кода. Ложное срабатывание безопасно в смысле идентичности (хук
блокирует, а не пропускает), но ломает рабочий процесс и не ловится глазами:
сообщение об ошибке говорит про
--login, а виновата прозаическая строка.Environment
tea0.14.1, Python 3.14.5feat/close-script.claude/settings.local.jsonAcceptance criteria
git commit, чьё сообщение содержит слово отдельным токеном, проходитхук
python3 …/issue_new.py --title "… tea …"иgrep -rn " tea " docs/проходят хук
--loginпо-прежнему блокируется, в том числепосле
;,&&,||,|и в подоболочке( … )--login "$GITEA_LOGIN"по-прежнему переписывается назакреплённый логин
команда, которая его запускает, разводятся хуком по разным веткам
Дубликат #29 — закрываю в его пользу.
Ложное срабатывание гварда поймали три независимых агента на трёх разных
командах, поэтому каноническая issue собирает все четыре случая в одни Steps to
reproduce — заголовок issue,
git commit -F-с heredoc,git commit -m,grep/echo— чтобы тест на регрессию покрыл их разом, а не по одному.Уникальные вклады этой issue перенесены в #29 целиком:
обязано их цитировать;
grep -rn " tea " docs/как третий класс ложного срабатывания;;,&&,||,|,(» — она и стала критерием посегментного разбора;( … )»;Расхождение в номере строки (
:88против:92) отмечено в #29 — это одна и таже проверка на разных ветках.