06fc4680f4
CachingPageFetcher — декоратор над загрузчиком карточек (SelfRenderClient/ XfetchClient): кэширует в общем Cache (Redis/file) по ключу URL на N дней ТОЛЬКО карточки (/firm/ 2ГИС, /maps/org/ Яндекс). Поиск (/search/) и ленты — всегда мимо кэша (свежее добывание новых фирм). Пустое не кэшируем — разовый сбой не отравит кэш. Кэш ОБЩИЙ для шага 1 (поиск) и шага 2 (изучение+разворот) и повторных прогонов: ключ по URL → любые экземпляры делят один кэш. Вшит в AutopodborServiceProvider через wrapCache(); 2ГИС-база RoutingBatchFetcher и self-render card reader обёрнуты, яндекс-Playwright/ленты — нет. Флаг AUTOPODBOR_RENDER_CACHE (ВЫКЛ по умолчанию) + render_cache_ttl_days (5). TDD: 8 тестов CachingPageFetcher + 4 теста проводки — зелёные. Живой замер ДСК: тёплый прогон — 26 карточек из кэша, 0 обращений к 2ГИС/Яндексу, источников 11=11. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>