fix(tradein/domclick): бан сайдкара наследуется от httpx-ошибки и уезжал в транспортные сбои (#3283) #3287

Merged
lekss361 merged 1 commit from fix/3283b-sidecar-ban-is-httpx-subclass into main 2026-08-30 20:25:24 +00:00
Owner

Продолжение #3286. Дыру в моей же правке нашёл первый прод-прогон после её деплоя.

Что показал прод

Прогон 5406, первая карточка:

СБОЙ #1/400 (подряд=1/10, http=401, kind=platform, не блок площадки):
DomClick detail: sidecar detected platform refusal for .../sale__flat__2078904209

Заголовок «не блок площадки» стоит над записью, где kind=platform и код 401 — то есть над самым что ни на есть отказом площадки, распознанным сайдкаром по маркерам тела.

Причина

#3286 разделяет отказы площадки и сбои нашей стороны по природе исключения: httpx-ошибка в цепочке причин означает транспорт. Но:

class SidecarBanPageError(httpx.HTTPStatusError):

Генуинный бан по типу является httpx-ошибкой, поэтому проверка на httpx, стоявшая первой, забирала его себе. Признак был выбран верно, порядок применения — нет.

Правка

Бан сайдкара отсекается до общей httpx-ветки. Одна строка плюс объяснение в докстринге, чтобы следующий читатель не переставил проверки обратно как «избыточные». Остальное поведение #3286 не тронуто: обычная 500 от сайдкара по-прежнему транспортный сбой.

Тесты

+4 к десяти существующим:

  • test_sidecar_ban_page_is_a_subclass_of_httpx_error — закрепляет саму предпосылку. Если иерархия однажды изменится, тест скажет об этом прямо, а не молча перестанет проверять то, ради чего написан.
  • бан сайдкара считается блоком и рвёт прогон после трёх — как было до #3283;
  • обычная 500 осталась сбоем — страховка, что эта правка не отменяет предыдущую.

Проверено мутацией. Снятие порядка роняет тест, и лог под мутацией сам себе противоречит:

ABORT -- 10 сбоев подряд без единого отказа площадки, диагнозы: {'platform': 10}

Набор целиком — 5210 passed, 37 skipped.

Замечание о методе

Тесты #3286 эту ошибку пропустили, потому что я строил заглушку транспортного сбоя из голого httpx.HTTPStatusError, а форму реального бана сайдкара не воспроизвёл — предположил, что это разные ветки, вместо того чтобы проверить иерархию. Новый тест на issubclass закрывает именно этот пробел: теперь предпосылка проверяется, а не подразумевается.

Продолжение #3286. Дыру в моей же правке нашёл первый прод-прогон после её деплоя. ## Что показал прод Прогон 5406, первая карточка: ``` СБОЙ #1/400 (подряд=1/10, http=401, kind=platform, не блок площадки): DomClick detail: sidecar detected platform refusal for .../sale__flat__2078904209 ``` Заголовок «не блок площадки» стоит над записью, где `kind=platform` и код 401 — то есть над самым что ни на есть отказом площадки, распознанным сайдкаром по маркерам тела. ## Причина #3286 разделяет отказы площадки и сбои нашей стороны по природе исключения: httpx-ошибка в цепочке причин означает транспорт. Но: ```python class SidecarBanPageError(httpx.HTTPStatusError): ``` Генуинный бан **по типу является httpx-ошибкой**, поэтому проверка на httpx, стоявшая первой, забирала его себе. Признак был выбран верно, порядок применения — нет. ## Правка Бан сайдкара отсекается **до** общей httpx-ветки. Одна строка плюс объяснение в докстринге, чтобы следующий читатель не переставил проверки обратно как «избыточные». Остальное поведение #3286 не тронуто: обычная 500 от сайдкара по-прежнему транспортный сбой. ## Тесты +4 к десяти существующим: - `test_sidecar_ban_page_is_a_subclass_of_httpx_error` — закрепляет саму предпосылку. Если иерархия однажды изменится, тест скажет об этом прямо, а не молча перестанет проверять то, ради чего написан. - бан сайдкара считается блоком и рвёт прогон после трёх — как было до #3283; - обычная 500 осталась сбоем — страховка, что эта правка не отменяет предыдущую. **Проверено мутацией.** Снятие порядка роняет тест, и лог под мутацией сам себе противоречит: ``` ABORT -- 10 сбоев подряд без единого отказа площадки, диагнозы: {'platform': 10} ``` Набор целиком — `5210 passed, 37 skipped`. ## Замечание о методе Тесты #3286 эту ошибку пропустили, потому что я строил заглушку транспортного сбоя из голого `httpx.HTTPStatusError`, а форму реального бана сайдкара не воспроизвёл — предположил, что это разные ветки, вместо того чтобы проверить иерархию. Новый тест на `issubclass` закрывает именно этот пробел: теперь предпосылка проверяется, а не подразумевается.
lekss361 added 1 commit 2026-08-30 14:03:20 +00:00
fix(tradein/domclick): бан сайдкара наследуется от httpx-ошибки и уезжал в транспортные сбои (#3283)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m5s
1e02badbe9
Правка #3286 разделила отказы площадки и сбои нашей стороны по природе
исключения: httpx-ошибка в цепочке причин = транспорт. Прод показал дыру
на первом же прогоне (5406):

  СБОЙ #1/400 (подряд=1/10, http=401, kind=platform, не блок площадки):
  DomClick detail: sidecar detected platform refusal

Заголовок «не блок площадки» стоит над записью, где kind=platform и код 401,
то есть над самым что ни на есть отказом площадки. Причина в иерархии:
SidecarBanPageError объявлен как подкласс httpx.HTTPStatusError, поэтому
проверка на httpx, стоявшая первой, забирала генуинный бан себе.

Порядок проверок перевёрнут: бан сайдкара отсекается ДО общей httpx-ветки.
Остальное поведение #3286 не тронуто — обычная 500 от сайдкара по-прежнему
транспортный сбой.

Тесты: +4, включая закрепление самой предпосылки (issubclass проверяется
явно, чтобы смена иерархии не отключила проверку молча) и страховку, что
обычная 500 осталась сбоем. Проверено мутацией: снятие порядка роняет тест
и печатает самопротиворечивый лог «10 сбоев подряд без единого отказа
площадки, диагнозы: {'platform': 10}». Набор целиком — 5210 passed.
lekss361 merged commit 189ae63e53 into main 2026-08-30 20:25:24 +00:00
lekss361 deleted branch fix/3283b-sidecar-ban-is-httpx-subclass 2026-08-30 20:25:24 +00:00
Sign in to join this conversation.
No reviewers
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#3287
No description provided.