diff --git a/tradein-mvp/backend/tests/test_3402_cian_captcha_http200.py b/tradein-mvp/backend/tests/test_3402_cian_captcha_http200.py
index 86df109b..24a71a1b 100644
--- a/tradein-mvp/backend/tests/test_3402_cian_captcha_http200.py
+++ b/tradein-mvp/backend/tests/test_3402_cian_captcha_http200.py
@@ -1,26 +1,37 @@
"""#3402: капча Циана приходит с HTTP 200 — это отказ площадки, а не «не разобрали».
Замер прода 06.09.2026: Циан отдаёт капчу (`
Captcha - база объявлений ЦИАН`,
-44 КБ) и страницу ошибки (`Ошибка - Циан`, 374 КБ) с кодом **200**. Детектор
-сайдкара их не знал (`_REFUSAL_STATUSES` = {403,429}, маркеры сняты с Авито/Домклика),
-HTML уезжал клиенту как успех, `extract_state` возвращал None и провайдер печатал
-«defaultState extraction failed» — то есть отказ ПЛОЩАДКИ читался как дрейф НАШЕЙ
-разметки. Аренда не менялась: `fetch()` уже отрапортовал `mark_health(ok=True)`
-(HTTP-уровень успешен), fail-streak обнулялся, и один капча-узел сжигал весь батч —
-прогоны 6200: 0/210; 6123/6091/6052/6032/6010/5981: 0/400 при 161/162 через здоровый
-узел на прогоне 13.
+44 КБ; `Вы не робот?`, 16 КБ) и страницу ошибки (`Ошибка - Циан`, 374 КБ)
+с кодом **200**. Детектор сайдкара их не знал (`_REFUSAL_STATUSES` = {403,429}, маркеры
+сняты с Авито/Домклика), HTML уезжал клиенту как успех, `extract_state` возвращал None
+и провайдер печатал «defaultState extraction failed» — то есть отказ ПЛОЩАДКИ читался
+как дрейф НАШЕЙ разметки. Аренда не менялась: `fetch()` уже отрапортовал
+`mark_health(ok=True)` (HTTP-уровень успешен), fail-streak обнулялся, и один капча-узел
+сжигал весь батч — прогоны 6200: 0/210; 6123/6091/6052/6032/6010/5981: 0/400 при 161/162
+через здоровый узел на прогоне 13.
+
+ДВА КЛАССА, а не один (проба прода 06.09.2026 09:25 UTC — одна карточка по узлам):
+ * КАПЧА («Captcha - база объявлений ЦИАН», «Вы не робот?») — безусловный отказ
+ площадки: `report_platform_ban` + `CianBlockedError`. Снимается за 1-2 часа (узел 14,
+ час назад отдававший капчу, вернул настоящую карточку) — TTL бана по назначению;
+ * «Ошибка - Циан» — ТОЛЬКО ЛОГ, прежний `None`. Природа не доказана: страница может
+ быть транзиентной 5xx-заглушкой под кодом 200, а не отказом конкретному узлу (узел 1
+ за час сменил её на «Вы не робот?»). `mark_banned` эскалирует TTL до часов — по этой
+ догадке 20-минутный сбой Циана выбил бы из выдачи весь пул. Решение — по частоте в
+ логах за цикл наблюдения.
Этот файл покрывает ВТОРОЙ слой (kit) — он нужен потому, что образы backend и browser
деплоятся раздельно и расходятся на часы: в это окно сайдкар ещё отдаёт 200 с капчей.
Первый слой (сайдкар: 403 + ban_page) — `browser/test_server_cian_captcha.py`.
Красное на main:
- * `fetch_detail` на капче возвращал None и НЕ звал `report_platform_ban`;
+ * `fetch_detail` на капче возвращала None и НЕ звала `report_platform_ban`;
* батч из двух объявлений давал 0 успехов — второй листинг шёл через тот же узел.
"""
from __future__ import annotations
+import logging
import os
from typing import Any
from unittest.mock import AsyncMock, MagicMock, patch
@@ -43,6 +54,11 @@ _CAPTCHA_HTML = (
""
"