`_fetch_json_once` делает goto(origin, domcontentloaded) → фиксированный settle →
page.evaluate. Если страница за это время уходит в клиентскую навигацию, playwright
рвёт JS-контекст и бросает «Execution context was destroyed». Такая ошибка не
попадала ни в одну ветку восстановления: `_is_browser_crash` матчит только закрытие
цели/браузера/соединения — значит для сайдкара это окончательный отказ, 500 наверх.
Правка:
1. `_is_page_context_lost` — отдельный признак, не смешанный с крашем браузера.
Маркер взят из САМОГО playwright (driver 1.60.0, coreBundle.js в образе
сайдкара), а не из строки в нашем логе: обе формы сообщения — короткая и
«..., most likely because of a navigation.» — имеют общий префикс.
2. Повтор на СВЕЖЕЙ странице без `_relaunch_browser`: браузер жив, умерла одна
страница. Relaunch стоил бы ~10-20с и тёплый профиль инстанса (cookies,
фингерпринт) ради здорового браузера.
3. Повтор ждёт `load` (FETCH_JSON_LOAD_WAIT_MS, best-effort). Без этого повтор
попадает ровно в то же окно навигации: в логе один и тот же адрес падал дважды
подряд, то есть гонка воспроизводится, а не «рассасывается». Happy-path не
удлиняется — ожидание только на ретрае.
Ретрай строго один и только по этому признаку: чужая ошибка (напр.
ERR_PROXY_CONNECTION_FAILED) уезжает наверх сразу — повтор невосстановимого стоит
полной ре-навигации на каждый дом.
Refs #2676