test_search_cache_hit был исключён из обоих пайплайнов с пояснением «падает
ТОЛЬКО в whole-suite ordering (401 vs 200; в изоляции проходит) — global-state
leak из другого test-модуля». Замер в полностью установленном окружении
опровергает обе половины: тест падает и в изоляции тоже — прогон одного этого
узла даёт 1 failed, тот же 401.
Причина не в порядке, а в самом тесте: он единственный в своём файле ходит по
HTTP и делает POST /api/v1/search БЕЗ заголовка X-Authenticated-User, а RBAC-гард
на запрос без него отвечает 401 — ровно тот инвариант, который отдельно
зафиксирован в tests/test_estimate_idor.py («No X-Authenticated-User header →
401»). Правка — один заголовок по идиоме самого репозитория; продуктовый код и
конфигурация авторизации не тронуты.
После этого deselect не нужен: полный прогон tradein-backend без единого
исключения даёт 3750 passed, 9 skipped, 0 failed.
Почему это часть #2722, а не отдельная уборка: задеселекченный тест — тот же
класс дефекта, что каталог вне пайплайна. Чек зелёный, знание о выключенной
проверке живёт в YAML, а не рядом с тестом, и следующий читатель наследует
неверное объяснение вместо симптома. В шаге pytest оставлено явное правило на
будущее: не deselect'ить молча — чинить или помечать xfail с причиной в коде.
Экземпляр того же deselect'а в deploy-tradein.yml не тронут: тот файл правит
открытый #2680. Расхождение безвредно — pre-merge гейт тест теперь гоняет.
Refs #2722