(low) check-no-print.py/normalize_path: rfind берёт последнее 'backend/' — ломает allow-prefix для вложенных backend-каталогов #1496

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

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

check-no-print.py:38-40 — rfind('backend/') берёт последнее вхождение, поэтому при вложенном каталоге 'backend' внутри backend/ нормализация теряет ведущие сегменты. Эмпирически '/repo/backend/app/backend/tests/x.py' -> 'backend/tests/x.py' (ALLOW=True, строка 62) — прод-код ошибочно пропущен, print не блокируется; '/repo/backend/tests/sub/backend/foo.py' -> 'backend/foo.py' (ALLOW=False) — реальный тест начнёт ошибочно блокироваться. Импакт: и тихий пропуск print в проде, и ложные блокировки тестов (низкий, узкий хук). Чинить: вычислять repo-relative путь от ПЕРВОГО сегмента 'backend' через Path.parts, а не rfind по подстроке (общий фикс с [0]).

Почему баг: ALLOW_PATH_PREFIXES (backend/tests/, backend/scripts/) и WATCH сравниваются через startswith по нормализованной строке. Обрезка по последнему вхождению 'backend/' меняет, какой именно сегмент окажется в начале строки, что напрямую влияет на срабатывание allow-логики (строки 60-63). Эмпирически '/repo/backend/app/scrapers/backend/util.py' -> 'backend/util.py'. Это и ложные пропуски (print проходит в проде-коде), и ложные блокировки тестов.

Как чинить: Использовать первое вхождение корневого сегмента 'backend' (или привязку к корню репо), а не rfind; сравнивать по компонентам пути, чтобы allow-префиксы tests/scripts проверялись по реальной структуре, а не по случайному последнему 'backend/'.


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

**Severity:** low · **Категория:** logic · **Файл:** `scripts/claude-hooks/check-no-print.py:38-40` check-no-print.py:38-40 — rfind('backend/') берёт последнее вхождение, поэтому при вложенном каталоге 'backend' внутри backend/ нормализация теряет ведущие сегменты. Эмпирически '/repo/backend/app/backend/tests/x.py' -> 'backend/tests/x.py' (ALLOW=True, строка 62) — прод-код ошибочно пропущен, print не блокируется; '/repo/backend/tests/sub/backend/foo.py' -> 'backend/foo.py' (ALLOW=False) — реальный тест начнёт ошибочно блокироваться. Импакт: и тихий пропуск print в проде, и ложные блокировки тестов (низкий, узкий хук). Чинить: вычислять repo-relative путь от ПЕРВОГО сегмента 'backend' через Path.parts, а не rfind по подстроке (общий фикс с [0]). **Почему баг:** ALLOW_PATH_PREFIXES (backend/tests/, backend/scripts/) и WATCH сравниваются через startswith по нормализованной строке. Обрезка по последнему вхождению 'backend/' меняет, какой именно сегмент окажется в начале строки, что напрямую влияет на срабатывание allow-логики (строки 60-63). Эмпирически '/repo/backend/app/scrapers/backend/util.py' -> 'backend/util.py'. Это и ложные пропуски (print проходит в проде-коде), и ложные блокировки тестов. **Как чинить:** Использовать первое вхождение корневого сегмента 'backend' (или привязку к корню репо), а не rfind; сравнивать по компонентам пути, чтобы allow-префиксы tests/scripts проверялись по реальной структуре, а не по случайному последнему 'backend/'. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.88 · unit U112</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:43 +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#1496
No description provided.