Каталог tradein-mvp/browser/ не гонял НИ ОДИН пайплайн: ci-tradein гейтит
backend/ и frontend/, deploy-tradein — тоже, а сам сайдкар не член uv-воркспейса
(members = backend + packages/*), так что и pytest из backend его не собирал.
Итог — 108 содержательных тестов вне охвата, из них 4 лежали красными на main
(с 2026-06-20 и 2026-07-02) при том, что файл дважды правился уже после поломки.
Красноту починил PR #2724, этот job закрывает причину, по которой её не видели.
Отдельный job, а не шаг в backend-job:
- сайдкар вне воркспейса → uv sync --frozen его зависимости не ставит;
- aiohttp (единственная не-stdlib зависимость сьюта) отсутствует в
tradein-mvp/uv.lock, то есть backend-окружение сьют просто не запустит;
- свой paths-filter: правка browser/ не обязана гонять backend-сьют и наоборот.
Окружение намеренно лёгкое: pytest + aiohttp, и всё. camoufox/playwright не
нужны — camoufox импортируется лениво внутри _launch_browser, а тесты мокают
_ensure_browser/_do_fetch. pytest-asyncio тоже не нужен: `async def test_` в
каталоге ноль, каждый тест сам крутит asyncio.run(). Проверено прогоном на venv
ровно из этих двух пакетов: 108 passed, 0 skipped — то есть в CI идёт весь
сьют целиком, без молча пропущенной интеграционной части.
timeout-minutes: 10 — у каталога нет своего pyproject, а значит и pytest-timeout
из backend'а (timeout=120) на него не распространяется; нативный job-таймаут
дешевле плагина ради одного каталога.
Refs #2722