Промт называл один тест, который печатал сетевую ошибку. Сторож нашёл 93 теста
в 14 файлах: остальные 92 глушились чужими catch внутри рабочего кода и были
невидимы вообще. Запрета на выход наружу в тестах интерфейса не было ни одного
за всю историю — тот же класс, что закрыли 01.08 на PHP.
Сторож в app/tests/Frontend/setup.ts делает две вещи, и обе нужны: обрывает
запрос и запоминает адрес, роняя тест в afterEach. Без второй половины код,
который глушит отказ своим catch, снова всё прячет.
Там же поимённо заглушены четыре фоновые точки оболочки — счётчик сделок,
состояние автоподбора, статус баланса, отметка о посещении. Их не спрашивает
ни один тест разметки, а отказ у всех четырёх и так проглатывается. Остальные
семь файлов глушат свои вызовы у себя; общий ответ статусов воронки лежит в
tests/Frontend/support/fixtures.ts.
Заглушки повторяют то состояние, которое тесты видели при отказе сети, поэтому
ни одна проверка не переписывалась. track.spec.ts снимает общую заглушку через
vi.unmock — он проверяет сам заглушенный код.
Приёмка: сторож проверен красным трижды — обычный запрос, запрос с проглоченной
ошибкой, fetch. Полный набор интерфейса 233 файла / 1750 тестов / 3 пропущено /
0 падений / 0 ошибок. Линтер интерфейса 0, проверка типов 5 — те же
унаследованные, что были до смены. Рабочий код не тронут.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Групповое и одиночное создание теперь ТРЕБУЮТ регион (vsyaRf=false по умолчанию;
«Вся РФ» — явная галочка, дефолта больше нет — подтверждено владельцем). Тесты
были под старый дефолт «Вся РФ» → doCreate бэйлился на гейте региона. Добавлен
явный выбор «Вся РФ» перед doCreate. Плюс requisites_required теперь открывает
форму реквизитов (reqGate), а не тост — тест переведён на новое поведение,
reqGate добавлен в defineExpose для наблюдаемости. Спек 6/6 зелёный.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
FieldCompetitorScreen:
1) метки ✓ настоящий номер / 🎭 рекламный подменный + плейн-язык «где нашли»
+ легенда «как читать» (данные в БД и сверка с ЭТАЛОНом НЕ тронуты — перевод только в показе);
2) регион «впечатывается» — свой тайп-ахед в стиле экрана (без Vuetify, чтобы не ломать тесты)
в окнах «Создать проект» и «Настройки проекта»; чипы для мультивыбора, подпись округа;
3) галка «Вся РФ (все регионы)» даёт баннер-объявление;
4) групповое создание проектов из всех выбранных источников без проекта (source_ids пачкой),
заголовок/текст под «несколько». +тест на групповое создание. Фронт-спеки 24/24 зелёные.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Шаг 1 «Конкурентное поле» — чекпоинт:
- Финальный проход «Найти и объединить дубли» на поле и предложениях; клиент решает по каждой группе, ничего не склеиваем молча.
- Тихая склейка только по сайту и коду справочника; телефон и людный номер у более чем 4 фирм — на решение клиента.
- Колонка phones jsonb; телефон-дубли видны уже на «Предложениях».
- Sonar даёт только имя и тип, сайт всегда через EXA; вскрываем все карточки без гейта «есть сайт».
- Яндекс-карточки через локальный Playwright параллельно; рубрика из заголовка идёт в описание.
- Фикс рекламных номеров: 2ГИС-парсер разбирает телефоны пообъектно и выкидывает рекламные кнопки с platforms/caption чужих фирм.
Тесты: автоподбор 224/224 unit, 105/105 feature; фронт-спеки зелёные. Времянки app/scripts/diag-*/probe-* в гит не входят.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>