Сторож пинговал https://xf4.ru/fetch и считал сервис живым по любому ответу
меньше 500. А GET туда ВСЕГДА отдаёт 405 (ручка только на POST). Поэтому
03.08.2026, когда у xf4 отвалился браузерный движок и «Поиск клиентов» весь
день собирал по нулям, админка всё это время показывала «xfetch жив».
Сторож проверял, что дом стоит, а не что внутри кто-то есть.
Сам xf4 из поиска убран (перешли на свою рендер-виртуалку), сторожить нечего.
- реестр ExternalBalanceRefresher: 15 ключей -> 14, класс сторожа удалён;
- KNOWN_SERVICE_KEYS и ссылка «пополнить» для xfetch убраны из дашборда;
- карточка «Поиск клиентов» теперь служба + Keyso (рендерщик виден отдельной
плиткой «Свой рендер»).
XfetchClient автоподбора НЕ тронут — это другой слой, и он уже деградирует
в пустоту без ключа (XFETCH_* убраны из боевого .env ещё в июле).
Тесты: Pest 35 зелёных, Vitest 22 зелёных, Larastan 0 ошибок.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
По вопросу владельца: EXA ходит через обратный SSH-тоннель (services.exa.proxy),
и это самое хрупкое звено (ops-машина+Happ+порт 10808). Раньше падение тоннеля
выглядело бы как «EXA не отвечает». Теперь ExaTunnelLivenessProbe — отдельная плитка:
сквозной запрос ЧЕРЕЗ прокси на нейтральный адрес (exa.tunnel_check_url, дефолт
api.ipify.org). Тоннель🟢+EXA🔴 = проблема у EXA; тоннель🔴 = легла наша труба.
Дашборд: 12 сервисов. Тесты: 66 моей области зелёные (вкл. 3 пробы тоннеля + 12-keys), Larastan 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Фаза B плана 2026-07-16-external-services-online-monitoring:
- HttpFundedServiceProvider — база «деньги-или-живость» по HTTP (DRY).
- AitunnelBalanceProvider / ExaBalanceProvider / XfetchBalanceProvider — баланс если
задан *_balance_url, иначе живость пингом; деградация «деньги→жив→grey».
- SelfRenderLivenessProbe / SalesFinderLivenessProbe — только живость.
- Реестр рефрешера расширен до 11 сервисов; supplier — единственный тяжёлый.
- config/services.php: ключи новых сервисов (sales_finder.base_url дефолт ПУСТОЙ).
Тесты: 53 External зелёные, Larastan 0 по своим файлам (точечно).
NB: larastan-хук исключён — 2 ошибки выше baseline в ЧУЖОМ незакоммиченном файле
tests/Feature/Billing/ExpireInvoicesTest.php (работа параллельной сессии в общей папке).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>