Виртуалка с 03.08 — единственная точка отказа «Поиска клиентов»: чужой xf4.ru
умер и снят. Сторож у неё был болен ровно тем же, от чего ослеп сторож xf4:
«ответ меньше 500 = жив». Поле ok, которое виртуалка честно отдаёт в /health,
не читалось вовсе, а прежний тест «зелёный при 404» этот изъян ОХРАНЯЛ.
Замер живой ручки боевого: {"ok":true,"active":0,"max":8,"proxies":1}, HTTP 200.
Теперь зелёный — только когда виртуалка сама сказала ok: true. Ответ 200 без
признака ok — красный: раз ручка отвечает не тем, о чём договаривались, мы про
единственную точку отказа ничего не знаем, и это обязано быть тревогой. Числа
занятости и прокси показываем человеку рядом со светофором.
Пустой адрес проверки больше НЕ подменяется ручкой рендера: она принимает
только POST и на GET отдаёт 404/405 — именно эта подмена и делала сторожа
вечнозелёным. Нечем проверить — говорим «нечем».
🪤 Записано в шапке класса честно: ok — рассказ виртуалки о себе, а не
доказательство, что она отрисует страницу. Настоящая проверка рендера стоит
живой отрисовки на каждый показ плитки, такого решения владелец не принимал.
Приёмка вырезанием: пять прогонов из шести были красными до правки. Сторожа
внешних служб и админки 202 из 202, статанализ 0.
На проде self_render (GET к POST-ручке /render) и exa (GET api.exa.ai root) отдавали 404
и показывались красными/«не удалось» — ложь, сервис ЖИВ (достучались, просто не тот метод).
Теперь liveness: status<500 → жив (404/405 = сервер ответил); 5xx/обрыв → мёртв.
Правит HttpFundedServiceProvider (aitunnel/exa/xfetch) + SelfRender/SalesFinder пробы.
Тесты: 20/20 (вкл. новые 404→жив, 5xx→мёртв), 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>