(low) check-no-print.py/main: matcher только Edit|Write — print через MultiEdit не блокируется #1498

Closed
opened 2026-06-15 05:58:46 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: logic · Файл: scripts/claude-hooks/check-no-print.py:50-52

check-no-print.py:50-52 (+ docstring строка 5) — set {"Edit","Write"} не включает MultiEdit, штатный batch-инструмент Claude Code; для него хук сразу return 0 и print( проходит мимо запрета. Заявленная цель (строка 3) — блокировать любые новые print( в backend/**/*.py — шире фактического покрытия. Импакт: тихая дыра в гарантии конвенции при массовых правках (низкий). Чинить: добавить 'MultiEdit' в множество (строка 51) и в matcher hooks.PostToolUse в .claude/settings.json; учесть, что MultiEdit передаёт правки массивом edits[].new_string, а не одиночным new_string (строка 68) — нужно собрать текст из всех элементов edits.

Почему баг: Заявленная цель хука — блокировать любые новые print( в backend/**/*.py. Но реальный покрываемый набор инструментов уже, чем набор инструментов, которыми Claude правит файлы. MultiEdit — распространённый путь массовых правок; через него print проскользнёт без проверки, что делает гарантию хука дырявой (тихая дыра в покрытии).

Как чинить: Добавить 'MultiEdit' в множество и обработать его формат tool_input (массив edits с new_string у каждого элемента), либо синхронизировать множество с matcher в settings.json.


deep-audit «армия ботов 2» · verify+harden, confidence 0.8 · unit U112

**Severity:** low · **Категория:** logic · **Файл:** `scripts/claude-hooks/check-no-print.py:50-52` check-no-print.py:50-52 (+ docstring строка 5) — set {"Edit","Write"} не включает MultiEdit, штатный batch-инструмент Claude Code; для него хук сразу return 0 и print( проходит мимо запрета. Заявленная цель (строка 3) — блокировать любые новые print( в backend/**/*.py — шире фактического покрытия. Импакт: тихая дыра в гарантии конвенции при массовых правках (низкий). Чинить: добавить 'MultiEdit' в множество (строка 51) и в matcher hooks.PostToolUse в .claude/settings.json; учесть, что MultiEdit передаёт правки массивом edits[].new_string, а не одиночным new_string (строка 68) — нужно собрать текст из всех элементов edits. **Почему баг:** Заявленная цель хука — блокировать любые новые print( в backend/**/*.py. Но реальный покрываемый набор инструментов уже, чем набор инструментов, которыми Claude правит файлы. MultiEdit — распространённый путь массовых правок; через него print проскользнёт без проверки, что делает гарантию хука дырявой (тихая дыра в покрытии). **Как чинить:** Добавить 'MultiEdit' в множество и обработать его формат tool_input (массив edits с new_string у каждого элемента), либо синхронизировать множество с matcher в settings.json. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.8 · unit U112</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:46 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:14 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1498
No description provided.