75dded78a1
Корень: после переезда на Managed PG очередь ходит под ролью crm_app_user (RLS), и Tenant::query() в BalancePreflightSweepJob/BalanceFrozenReminderJob отдавал 0 строк без app.current_tenant_id — биллинг-преflight молча стал no-op с 26.06 (ни заморозок, ни снятия проектных блоков). Перечень тенантов теперь берётся через pgsql_supplier (BYPASSRLS), модель грузится внутри per-tenant SET LOCAL контекста. Логика проверена на боевых данных: t25/t26 снимутся, t27/t30 заморозятся. Playwright рантайма supplier-портала объявлен в dependencies ровно 1.59.0 под chromium-1217 + package-lock синхронизирован; деплой ставит его npm ci --omit=dev, durable к чистке node_modules. Тесты Billing 18/18, pint/phpstan чисто. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>