---
name: vakhunter-full-audit-2026-07
description: "Полный аудит бота+сайта VakHunter (relevance/подписки/лимиты/AI/мёртвый код) по явному запросу, Ultracode; near-miss при удалении мёртвого кода и восстановление"
metadata: 
  node_type: memory
  type: project
  originSessionId: 805ead91-dfa3-49d2-a5e6-01a980e715fd
  modified: 2026-07-29T21:25:14.142Z
---

Полный аудит бота и сайта VakHunter завершён 2026-07-29 — 7 коммитов
(`c5e63f0`…`88c87da`), детали в [[vakhunter_overview]] и Obsidian
`Projects/VakHunter/Changelog.md` (раздел R48) + `Decisions.md` (D26).

**Why:** явный запрос владельца — «полный аудит… удали весь мёртвый
код… ИИ должна быть булочка… ты senior разработчик, можешь приступать»
с Ultracode включённым для этой задачи (авторизация на крупный
Workflow-фан-аут явно подтверждена системным напоминанием в моменте
запроса).

**Ключевой урок процесса (для любых будущих массовых удалений кода):**
при удалении диапазона строк по «от def start() до def shutdown()» я
случайно снёс 3 ЖИВЫХ метода, физически лежавших между ними —
немедленный краш бота (`AttributeError`) при рестарте. Восстановлено из
`git show HEAD`, полнота проверена диффом полного списка
def/async-def методов до/после (`comm -23`). С этого момента —
**любое массовое удаление функций/методов только через AST**
(`ast.parse` → `lineno`/`end_lineno`), никогда вручную по диапазону
строк или текстовым маркерам-соседям. Скрипт-паттерн у меня уже
отработан (delete_dead_class_methods.py по имени + AST), можно
переиспользовать в других проектах.

**How to apply:** если пользователь просит следующий раунд аудита/чистки
кода VakHunter — начинать с чтения Changelog.md R48 + Decisions.md D26,
не переоткрывать уже закрытые находки. Оставшиеся НЕ выполненные
рекомендации (озвучены пользователю, не сделаны самовольно): судьба
всей retry-подсистемы `bot/ai_queue.py` (очередь не наполняется — стоит
ли держать `process_queue`/`process_request`), антифрод рефералки по
IP, TOCTOU per-user `asyncio.Lock` на подписках, auto-apply как
продуктовый гэп с конкурентами (юридический риск, не код-баг).
