ГЛАВНЫЙ unblock. Эмпирически (prod worker):
• flats endpoint /portal-kn/api/sales/portal/table @ concurrency=2 — 0 WAF-бан
на 250 объектах / 251 req, 77163 flat-строк (vs текущие 9 во всём sweep);
• extras /сервисы/api/object/{id}/* отдают 403 СРАЗУ (volume-independent, мертвы
с 2026-06-03) И травят cookies сессии → последующие flats на ней тоже 403.
flats_count рухнул 3670→9 именно из-за shared-session отравления.
Fix: flats и extras больше НИКОГДА не делят сессию.
- run_region_sweep(extras_isolated=True, дефолт): warm flats-сессия тянет ТОЛЬКО
flats (extras на ней не вызываются) → flats_count восстанавливается; extras
уходят отдельным best-effort проходом _run_extras_pass с recycle BrowserSession
на каждый WAF-403 (яд не накапливается, flats-сессия уже закрыта).
- _run_extras_pass: ранний обрыв после N подряд полностью-WAF объектов
(_EXTRAS_ABORT_AFTER_CONSEC_WAF=5) — extras мертвы целиком, нет смысла жечь
~1500 релончей браузера. Любой сбой паса → log, run НЕ падает.
- extras_isolated=False → старое combined-поведение (poison-prone).
- config: scrape_kn_extras_isolated=True (ENV SCRAPE_KN_EXTRAS_ISOLATED);
прокинут через оба worker call-site.
- рефактор: _process_flats_result / _process_extras_result / _extras_coros
делят upsert-логику между combined-loop и isolated-pass.
- tests: _extras_coros без flats, _is_waf_poisoned, recycle-на-poison,
early-abort на wholesale-WAF.
Сохраняет throttle + optional-proxy из предыдущего коммита.