deb54ae1a4
Accessibility (Pa11y live) / a11y (push) Has been cancelled
Прошлая правка лечила последствие: временный отказ возвращал задание в очередь.
Причина осталась. Она была в одной строке src/session.js:
await gotoStable(page, config.cabinetUrl, config); // ответ ВЫБРАСЫВАЛСЯ
gotoStable уже возвращал признак «страница так и не ожила» — его игнорировали,
а дальше отсутствие меню объявляли разлогином. Отсюда ложное «Вход слетел»
на живой сессии (приёмка 02.08, 1 прогон из 2).
Теперь checkSession различает четыре разных случая:
- in — меню кабинета на месте;
- out — видна страница входа: сессии правда нет. Повтор бесполезен,
сдаёмся СРАЗУ с «нужен вход руками» (retryable=false);
- ne-otrisovalos — ни меню, ни формы входа: SPA завис. Три попытки с паузой 5с,
потом временный отказ (retryable=true);
- zablokirovan — «Доступ … запрещён»: МТС не пускает адрес. Сдаёмся сразу,
со своей внятной причиной (retryable=false).
Пустую страницу про меню не спрашиваем вовсе — минус 10 секунд на попытку.
Побочно вылечен сторож входа bin/keepalive.js: он болел тем же и слал владельцу
письмо «Вход в кабинет слетел» на каждом зависании кабинета. Теперь в письме
стоит настоящая причина, а временная беда не считается падением сторожа.
Смена смысла: SessionLostError раньше был retryable=true (правка часом раньше).
Теперь настоящий разлогин НЕ повторяется — повтор его не лечит, нужен человек.
Повторяется только зависшая страница.
Тесты писались красными: робот 143/143 (+9 новых, новый файл session-check),
портал 254/254 без изменений — кода портала правка не касается.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>