---
name: zemlya-failed-check-no-ai
description: "Земля без риска: несостоявшаяся проверка не должна предлагать AI-отчёт — только повтор; гейт нужен в двух местах"
metadata: 
  node_type: memory
  type: project
  originSessionId: d0c6c5aa-4d05-42e2-a1f9-034482b88603
  modified: 2026-07-31T06:52:14.928Z
---

**Правило продукта (zemlya, 2026-07-31).** Если проверка участка не состоялась, единственная кнопка под результатом — «🔄 Повторить проверку». Ни AI-отчёта, ни «открыть полный отчёт», ни «Продать/Купить», ни «Поделиться», ни оценки: открывать, продавать и расшаривать нечего. Если объекта нет в реестрах — кнопок нет совсем.

**Инцидент.** Таймаут 180 с → бот вернул бесплатную проверку и в том же сообщении предложил AI-отчёт. Клик списал кредит и выдал PDF на 2.2 МБ поверх пустой заглушки. Клавиатура смотрела только на `saved_report_id`, а отчёт сохранялся всегда, включая ошибку.

**Гейт обязателен в ДВУХ местах** (`bot/handlers/cadastral.py`): при сборке клавиатуры и внутри обработчика AI-callback. Второе — не паранойя: старые сообщения остаются в истории чата с рабочими кнопками, их нажимают, и только проверка в обработчике это ловит. Тот же приём применим к любой кнопке, которая тратит деньги.

**Классы ошибок не смешивать.** «Не найдены объявления / сопоставимые объекты» — это РЕЗУЛЬТАТ, а не сбой: право, площадь, ограничения и НСПД на месте, AI-отчёт осмыслен, всё работает как раньше. Блокируют только фатальные: таймаут, «ошибка при запросе данных», «источники временно недоступны», «объект не найден».

**Как воспроизвести таймаут для проверки:** `CADASTRAL_TIMEOUT=8` в `~/Services/zemlya-bot/.env` + рестарт, прогнать `tests/e2e/e2e_timeout_retry.py`, вернуть 180 и сверить `.env` с копией. Трафик перед этим оценить по `reports` за последние часы.

**На сайте эта дыра не воспроизводится** и переносить гейт туда не нужно: AI-отчёт там — отдельный заказ со своим прогоном, а `web_report_worker.py` уже делит ошибки так же и возвращает кредит при сбое (`_refund_paid_credit`). Добавлена только кнопка «Повторить проверку» на упавшем отчёте → `/dashboard/new?kn=<тот же КН>`; раньше единственная кнопка вела «попробовать другой КН», что при таймауте — неверный совет.

**Гоча деплоя фронта:** zemlya-web крутится в ДВУХ launchd-инстансах (`local.zemlya-web-frontend` :20141 и `-2` :20142) из одной папки — перезапускать оба, иначе половина трафика видит старую сборку из памяти. См. [[deployed_is_not_running]].

Родств.: [[zemlya_web_overview]], [[zemlya_ai_report_cebersresearch]], [[zemlya_launch_prep_session]].
