Основной реестр требований и согласований: http://git.dira89kv.beget.tech:3000/anton/api/issues/313 . Задача создана при подготовке исполнения по поручению владельца 23.10.2026; реализация и выпуск в исследовательском этапе не начаты.
Объём Preland:
Общий с API заголовок «Улучшить изображение» mobile/desktop, на desktop заметнее (в эскизе предложены 24px/600).
Mobile: «Выберите фото», «Файлы (PDF и др.)», сначала скрытие декоративной иконки при нехватке высоты, затем уменьшение превью как запасной вариант. На просторном экране иконка остаётся.
Серая кнопка при существующей анимации загрузки на mobile И desktop; mobile files-link тоже серый; error/reset возвращает обычный вид и возможность повторить действие.
Обязательное дополнение владельца: JPEG/WebP-резервы для примеров, когда AVIF не поддержан/не декодируется/недоступен. Первая пара, все пять примеров, source/result/thumb и error/retry; не менять фотографии/кадрирование и не делать массовую замену runtime-наборов. Конкретный набор недостающих вариантов выявить по актуальным /1 и /2, сохранить исходные SHA и геометрию; генерировать только отсутствующие производные в Docker и адресно согласовывать доставку, если числовые runtime-каталоги требуют исключения из обычного deploy.
Общая mobile/desktop/browser-матрица и ограничения цели99% — в основном реестре api#313. Не считать один Chromium проверкой реальных Яндекс/Chrome/MIUI/Samsung/Safari. При недоступности данных/устройств явно оставлять обязательные проверки открытыми.
Подтверждённая диагностика23.10: при блокировке AVIF на zoomstage.online примеры переходят в state=error без fallback; на основном сайте JPEG работает. Обычный текущий режим трёх движков проходит smoke; это не обещание поддержки99% версий.
Сохранять claim/client_key, UTM/theme, лёгкий inline-контракт, загрузку пар без скачков и незрелого взаимодействия. CSS-копии/inline-доставка и release/assets.json должны оставаться синхронными.
Ограничение выпуска: только staging → zoomstage.online по отдельной команде; production zoompixel.ru/.online заморожены по preland#4. Старый production-дефект скрытой ошибки — отдельная preland#15, не выпускать его content попутно. Runtime config менять нельзя, числовые наборы обычным деплоем не перетирать.
Закрытие: результат/проверки/коммиты/выпуск или его отсутствие записать комментариями; незавершённые обязательные проверки не прятать. Данная задача не является разрешением на текущую реализацию или production-выкат.
Актуализация по последним уточнениям владельца 23.10.2026
Формальные 99% сняты как жёсткий gate: цель — обычный купленный трафик Яндекс.Директа mobile и desktop, без специальной лаборатории телевизоров/автомагнитол. Рассмотреть все именованные мобильные категории Радара; малая доля не является исключением для обычного браузера.
Весь Android-топ обязателен: Яндекс Браузер и поисковые приложения, Chrome/Google app, Android Browser, Samsung Internet, MIUI Browser, Opera; UC Browser также явно обязателен. Android Browser — самостоятельный приоритет: 9,75% Android-среза, 6,96% всех мобильных. Edge/Firefox mobile — контрольный smoke; Atom/MZBrowser/Amigo/IE — отдельные строки реестра с применимостью/версией/точечной проверкой или явным ограничением. Редкость браузера не равна экзотике устройства. Desktop: Яндекс/Chrome/Edge/Opera/Firefox/Safari macOS, самостоятельная регрессия.
Первый экран, picker/cancel, настоящая локальная upload→Tour, серое pending, error/retry и резервные кодеки обязательны по основному реестру api#313. Недоступный реальный браузер нельзя заменить UA и назвать PASS. Полный перенос стека на все исторические JS-движки не подразумевается.
Обязательный AVIF fallback подтверждён владельцем отдельно. Реализация и выпуск пока не начаты. Подготовленный актуальный план и критерии находятся в описании api#313 и KB; эта актуализация заменяет ранние формулировки о жёстком достижении99%. Все прежние ограничения stage/runtime/config/production сохраняются.
Основной реестр требований и согласований: http://git.dira89kv.beget.tech:3000/anton/api/issues/313 . Задача создана при подготовке исполнения по поручению владельца 23.10.2026; реализация и выпуск в исследовательском этапе не начаты.
Объём Preland:
- Общий с API заголовок «Улучшить изображение» mobile/desktop, на desktop заметнее (в эскизе предложены 24px/600).
- Mobile: «Выберите фото», «Файлы (PDF и др.)», сначала скрытие декоративной иконки при нехватке высоты, затем уменьшение превью как запасной вариант. На просторном экране иконка остаётся.
- Серая кнопка при существующей анимации загрузки на mobile И desktop; mobile files-link тоже серый; error/reset возвращает обычный вид и возможность повторить действие.
- Обязательное дополнение владельца: JPEG/WebP-резервы для примеров, когда AVIF не поддержан/не декодируется/недоступен. Первая пара, все пять примеров, source/result/thumb и error/retry; не менять фотографии/кадрирование и не делать массовую замену runtime-наборов. Конкретный набор недостающих вариантов выявить по актуальным /1 и /2, сохранить исходные SHA и геометрию; генерировать только отсутствующие производные в Docker и адресно согласовывать доставку, если числовые runtime-каталоги требуют исключения из обычного deploy.
- Общая mobile/desktop/browser-матрица и ограничения цели99% — в основном реестре api#313. Не считать один Chromium проверкой реальных Яндекс/Chrome/MIUI/Samsung/Safari. При недоступности данных/устройств явно оставлять обязательные проверки открытыми.
Подтверждённая диагностика23.10: при блокировке AVIF на zoomstage.online примеры переходят в state=error без fallback; на основном сайте JPEG работает. Обычный текущий режим трёх движков проходит smoke; это не обещание поддержки99% версий.
Сохранять claim/client_key, UTM/theme, лёгкий inline-контракт, загрузку пар без скачков и незрелого взаимодействия. CSS-копии/inline-доставка и release/assets.json должны оставаться синхронными.
Ограничение выпуска: только staging → zoomstage.online по отдельной команде; production zoompixel.ru/.online заморожены по preland#4. Старый production-дефект скрытой ошибки — отдельная preland#15, не выпускать его content попутно. Runtime config менять нельзя, числовые наборы обычным деплоем не перетирать.
Закрытие: результат/проверки/коммиты/выпуск или его отсутствие записать комментариями; незавершённые обязательные проверки не прятать. Данная задача не является разрешением на текущую реализацию или production-выкат.
## Актуализация по последним уточнениям владельца 23.10.2026
Формальные 99% сняты как жёсткий gate: цель — обычный купленный трафик Яндекс.Директа mobile и desktop, без специальной лаборатории телевизоров/автомагнитол. Рассмотреть все именованные мобильные категории Радара; малая доля не является исключением для обычного браузера.
Весь Android-топ обязателен: Яндекс Браузер и поисковые приложения, Chrome/Google app, Android Browser, Samsung Internet, MIUI Browser, Opera; UC Browser также явно обязателен. Android Browser — самостоятельный приоритет: 9,75% Android-среза, 6,96% всех мобильных. Edge/Firefox mobile — контрольный smoke; Atom/MZBrowser/Amigo/IE — отдельные строки реестра с применимостью/версией/точечной проверкой или явным ограничением. Редкость браузера не равна экзотике устройства. Desktop: Яндекс/Chrome/Edge/Opera/Firefox/Safari macOS, самостоятельная регрессия.
Первый экран, picker/cancel, настоящая локальная upload→Tour, серое pending, error/retry и резервные кодеки обязательны по основному реестру api#313. Недоступный реальный браузер нельзя заменить UA и назвать PASS. Полный перенос стека на все исторические JS-движки не подразумевается.
Обязательный AVIF fallback подтверждён владельцем отдельно. Реализация и выпуск пока не начаты. Подготовленный актуальный план и критерии находятся в описании api#313 и KB; эта актуализация заменяет ранние формулировки о жёстком достижении99%. Все прежние ограничения stage/runtime/config/production сохраняются.
Основной реестр api#313 обновлён итогом аудита и последними решениями владельца: весь Android-топ и отдельно UC обязательны, desktop учитывается;99% — ориентир, не формальныйgate. AVIF fallback обязателен. Актуальные шаги/матрица в описании api#313 и планеKB. Реализация/выкат ещё не поручены этим исследовательским этапом, обе задачиOPEN.
Основной реестр api#313 обновлён итогом аудита и последними решениями владельца: весь Android-топ и отдельно UC обязательны, desktop учитывается;99% — ориентир, не формальныйgate. AVIF fallback обязателен. Актуальные шаги/матрица в описании api#313 и планеKB. Реализация/выкат ещё не поручены этим исследовательским этапом, обе задачиOPEN.
Владелец дал команду на исполнение #313 и разрешил выпуск без повторных подтверждений при отсутствии новых продуктовых развилок. API выпускаем только tagged-master через production-release.yml; Preland сохраняет действующую цель staging→zoomstage.online, production ZoomPixel не обновляем. Созданы чистые worktree API wt/issue313 отd72691f и Preland preland-worktrees/issue313 от0193354; штатный инструмент app неприменим, т.к. корень объединения не Git. Workflow superpowers: ledger/конфликт-скан→RED baseline→UI/pending→review→резервные кодеки/runtime-manifest→review→поведенческая регрессия→финальное ревью→штатный выпуск→smoke/KB/закрытие только при выполненной приёмке. Роли объединены по реальным задачам, без нового микросервиса и без изменений Python-сервисов GP. Независимые readonly-аудит эксплуатации и QA возможны параллельно, продуктовые изменения — последовательно по общей поверхности.
Владелец дал команду на исполнение #313 и разрешил выпуск без повторных подтверждений при отсутствии новых продуктовых развилок. API выпускаем только tagged-master через production-release.yml; Preland сохраняет действующую цель staging→zoomstage.online, production ZoomPixel не обновляем. Созданы чистые worktree API wt/issue313 отd72691f и Preland preland-worktrees/issue313 от0193354; штатный инструмент app неприменим, т.к. корень объединения не Git. Workflow superpowers: ledger/конфликт-скан→RED baseline→UI/pending→review→резервные кодеки/runtime-manifest→review→поведенческая регрессия→финальное ревью→штатный выпуск→smoke/KB/закрытие только при выполненной приёмке. Роли объединены по реальным задачам, без нового микросервиса и без изменений Python-сервисов GP. Независимые readonly-аудит эксплуатации и QA возможны параллельно, продуктовые изменения — последовательно по общей поверхности.
Исполнение: изолированный Docker QA на PHP 8.3.36, отдельная БД/85 миграций/TLS. RED реального SSR Chromium до правок подтвердил старый заголовок; RED Preland — три расхождения текстов. UI/pending реализуются отдельно от codec loader, после этапа независимое review.
Runtime-аудит: все180 URL наборов /1 и /2 доступны. 150 совпали SHA с Git, ещё30 mobile JPEG/WebP /2 уже есть на stage, но отсутствуют в Git/manifest. Скачаны точные байты, декодирование и совпадение размеров с AVIF30/30. Решение: синхронизировать эти файлы в Git и подключить резервные форматы; не генерировать и не заливать заново. Визуальный QA отдельный. Конфиг и существующие изображения не менять; до push no-op preflight focus/brand, после — повтор SHA. План/спецификация актуализированы в known-base/Планы/2026-10-23 Index Preland — план исполнения 313.md.
Реальные Samsung/Redmi/UC/Android Browser без доступного экземпляра не будут объявлены PASS по эмуляции движка. Ограничения и остатки фиксируем явно.
Исполнение: изолированный Docker QA на PHP 8.3.36, отдельная БД/85 миграций/TLS. RED реального SSR Chromium до правок подтвердил старый заголовок; RED Preland — три расхождения текстов. UI/pending реализуются отдельно от codec loader, после этапа независимое review.
Runtime-аудит: все180 URL наборов /1 и /2 доступны. 150 совпали SHA с Git, ещё30 mobile JPEG/WebP /2 уже есть на stage, но отсутствуют в Git/manifest. Скачаны точные байты, декодирование и совпадение размеров с AVIF30/30. Решение: синхронизировать эти файлы в Git и подключить резервные форматы; не генерировать и не заливать заново. Визуальный QA отдельный. Конфиг и существующие изображения не менять; до push no-op preflight focus/brand, после — повтор SHA. План/спецификация актуализированы в known-base/Планы/2026-10-23 Index Preland — план исполнения 313.md.
Реальные Samsung/Redmi/UC/Android Browser без доступного экземпляра не будут объявлены PASS по эмуляции движка. Ограничения и остатки фиксируем явно.
UI-этап: API29b1f55+8c4b5d5, Preland198ba57+0e6611d. Независимое review нашло Important в каскаде min-height: новый fallback перекрывал min-height:0 вложенной error-section. Реальный RED506/810px→исправление scope+@supports→GREEN0px; адресные12/12 и UI/pending6/6. Повторное review: finding ADDRESSED, spec/quality PASS в проверенной области.
Интеграция в отдельном Docker QA:216/216 responsive (2surface×2theme×18sizes×3engine),15/15 picker-neighbours (Android/iOS-ветки и Private batch/clear),9/9 actual upload/claim/registration/dummy/Private,6/6 настоящая reload-recovery с прежним client_key и реальным успешным start200. Это Chromium/Firefox/WebKit, не утверждение о нативных брендовых браузерах. Нативный непроверенный остаток явно выделен в связанную открытую api#314; actual BFCache остаётся api#297. До завершения #314 нельзя объявлять весь Android-топ или99% фактически подтверждёнными.
Следующий этап выполняется: резервные кодеки и совместимый example-loader, потом независимое review и финальная проверка immutable image/штатный выпуск. Focus/brand stage preflight no-op,138 legacy cleanup URL404; runtime никуда не записывали.
UI-этап: API29b1f55+8c4b5d5, Preland198ba57+0e6611d. Независимое review нашло Important в каскаде min-height: новый fallback перекрывал min-height:0 вложенной error-section. Реальный RED506/810px→исправление scope+@supports→GREEN0px; адресные12/12 и UI/pending6/6. Повторное review: finding ADDRESSED, spec/quality PASS в проверенной области.
Интеграция в отдельном Docker QA:216/216 responsive (2surface×2theme×18sizes×3engine),15/15 picker-neighbours (Android/iOS-ветки и Private batch/clear),9/9 actual upload/claim/registration/dummy/Private,6/6 настоящая reload-recovery с прежним client_key и реальным успешным start200. Это Chromium/Firefox/WebKit, не утверждение о нативных брендовых браузерах. Нативный непроверенный остаток явно выделен в связанную открытую api#314; actual BFCache остаётся api#297. До завершения #314 нельзя объявлять весь Android-топ или99% фактически подтверждёнными.
Следующий этап выполняется: резервные кодеки и совместимый example-loader, потом независимое review и финальная проверка immutable image/штатный выпуск. Focus/brand stage preflight no-op,138 legacy cleanup URL404; runtime никуда не записывали.
Решение по кодекам: Preland сохраняет AVIF primary → WebP → JPEG для source/result/thumb; API сохраняет JPEG primary/preload пары и получает WebP reserve, миниатюры AVIF→WebP→JPEG. JPEG-primary в Preland отклонён: первая desktop-пара /1 AVIF127796bytes противJPEG309561, /2 AVIF66869 противJPEG266612. Общий loader синхронен, пары переключаются атомарно, существующая последовательная очередь остальных пар сохраняется.
Чтобы неподдерживаемый кодек не вызывал скачивание всех заведомо нечитаемых картинок, введена одноразовая локальная dataURI-проба, отдельно от сетевого отказа ресурса. Адресная диагностика обнаружила false-negative tinyAVIF1×1 в Firefox/WebKit при успешном decode реальной фотографии; заменили на AVIF16×16 (300bytes), WebP1×1 (68bytes). Новый normal AVIF baseline12 срезов (3engine×2sets×2device):15/15 decoded,15unique asset-запросов,CLS0. Это локальные измерения, не production p75.
Наборы не генерируем/не заливаем:150 прежних imageSHA/source сохранены,30 точных существующих mobileрезервов /2 добавляются в Git. Contactsheet45 картинок просмотрен: одинаковые фото/кадрирование, существующий Second в /2 не меняли. Manifest delta строго3CSSSHA+30image-записей. Постоянный --refresh в productionCLI не добавляли: одноразовое обновление snapshot через существующие нормализаторы достаточно.
Решение по кодекам: Preland сохраняет AVIF primary → WebP → JPEG для source/result/thumb; API сохраняет JPEG primary/preload пары и получает WebP reserve, миниатюры AVIF→WebP→JPEG. JPEG-primary в Preland отклонён: первая desktop-пара /1 AVIF127796bytes противJPEG309561, /2 AVIF66869 противJPEG266612. Общий loader синхронен, пары переключаются атомарно, существующая последовательная очередь остальных пар сохраняется.
Чтобы неподдерживаемый кодек не вызывал скачивание всех заведомо нечитаемых картинок, введена одноразовая локальная dataURI-проба, отдельно от сетевого отказа ресурса. Адресная диагностика обнаружила false-negative tinyAVIF1×1 в Firefox/WebKit при успешном decode реальной фотографии; заменили на AVIF16×16 (300bytes), WebP1×1 (68bytes). Новый normal AVIF baseline12 срезов (3engine×2sets×2device):15/15 decoded,15unique asset-запросов,CLS0. Это локальные измерения, не production p75.
Наборы не генерируем/не заливаем:150 прежних imageSHA/source сохранены,30 точных существующих mobileрезервов /2 добавляются в Git. Contactsheet45 картинок просмотрен: одинаковые фото/кадрирование, существующий Second в /2 не меняли. Manifest delta строго3CSSSHA+30image-записей. Постоянный --refresh в productionCLI не добавляли: одноразовое обновление snapshot через существующие нормализаторы достаточно.
Реализация и разрешённый выпуск завершены23.10.2026. Основной реестр — api#313, зеркальная часть — preland#16.
Изменения: заголовок «Улучшить изображение» mobile/desktop, desktop24px/600; mobile «Выберите фото»/«Файлы (PDF и др.)». Pending-кнопка серая на обеих платформах, mobile files-link серый и недоступный; error/reset возвращает доступность. На малой стабильной высоте первой скрывается декоративная иконка, превью сохраняет пропорции. Preland source/result/thumb AVIF→WebP→JPEG; API сохраняет JPEG-primary пары с WebP-резервом. Атомарное переключение после decode, pointer/keyboard-lock независимо от inert, базовые CSS-fallback сохранены.
Коммиты/выпуск: API491474a3c3a30d483febe43bd885d1a3a3ce27f9 в master, тег v2026.10.23.1, production run471, job670 SUCCESS. Prelandf87bef24435606129052351ce29e1c0e0cfd6996 в staging, run472, job672 SUCCESS. Фактический runner37 zoomzilla-prod-org в обоих случаях. Preland выпущен только на zoomstage.online; zoompixel production не обновлялся. API штатный regression gate/preflight/backup/deploy/smoke прошёл.
Проверки: независимые task reviews + итоговое review без открытых P0–P3. Docker QA Chromium/Firefox/WebKit:216/216 responsive,15/15 Android/iOS/Private picker,9/9 actual upload/claim/Tour/registration/PIN/dummy decline/retry/success/Private,6/6 настоящая reload-recovery,6/6 processing-error/retry/Join. На immutable image из полного чистого checkout491474a штатный image gate exit0, повтор UI6/reload6/picker15/codecs16/error-layout12 PASS. Production UI smoke12/12 (2поверхности×2темы×3размера): настоящий chooser/файл, серое pending, локально перехваченный422 и восстановление; файл на production не отправлялся. На stage8/8 fallback-срезов:2набора×2ширины×AVIF/AVIF+WebP отказ, в каждом клики всех5 и decode обеих сторон/миниатюр WebP/JPEG.
Два ранних внешних smoke получили timeout Playwright filechooser на разных срезах. Диагностика показала CDP Page.fileChooserOpened при таком timeout, trusted click и active userActivation; ошибок JS/блокировки picker нет. Сбой локализован в доставке события тестовому клиенту, продуктовую заплатку не делали. Полный12/12 проход и диагностические следы сохранены.
**Сохранность:**180/180 опубликованных изображений с точными SHA,213 static manifest PASS. Все30 добавленных в Git резервов уже существовали на stage, генерации/перезаливки не было; прежние150imageSHA не изменились. Runtime config SHA и обе domain SVG прежние, focus/brand no-op. Уточнение к предыдущему комментарию: CLS=0 измерен только в4Chromium-срезах; FF/WebKit null означает отсутствие измерительного API. Это локальные измерения, не полевой p75.
База знаний: commit b29b505 — актуальные спецификация/план/аудит, снимки статистики, ссылка DisplaysDB и результаты. Локальные evidence: output/issue313/, включая immutable-image/image-gate, финальные reviews, ops-release-postcheck, chooser-diagnosis, post-codecs и эскиз с панелями Яндекса (композиция, не физический Yandex smoke).
Явные открытые остатки:api#314 — обязательные настоящие Android-топ/UC/iOS/desktop-приложения, SamsungS25/RedmiA3, панели/крупный шрифт и browser zoom100/125/150%; api#297 — actual BFCache. Эти задачи OPEN, проверки NOTRUN. Реализация #313/#16 закрывается отдельно, весь Android-топ и99% не объявлены доказанными; телевизоры/автомагнитолы специально не тестировались по решению владельца. Собственная аналитика browser/version/viewport и полевой p75 не получены.
Реализация и разрешённый выпуск завершены23.10.2026. Основной реестр — api#313, зеркальная часть — preland#16.
**Изменения:** заголовок «Улучшить изображение» mobile/desktop, desktop24px/600; mobile «Выберите фото»/«Файлы (PDF и др.)». Pending-кнопка серая на обеих платформах, mobile files-link серый и недоступный; error/reset возвращает доступность. На малой стабильной высоте первой скрывается декоративная иконка, превью сохраняет пропорции. Preland source/result/thumb AVIF→WebP→JPEG; API сохраняет JPEG-primary пары с WebP-резервом. Атомарное переключение после decode, pointer/keyboard-lock независимо от inert, базовые CSS-fallback сохранены.
**Коммиты/выпуск:** API491474a3c3a30d483febe43bd885d1a3a3ce27f9 в master, тег **v2026.10.23.1**, [production run471](http://git.dira89kv.beget.tech:3000/anton/api/actions/runs/471), job670 SUCCESS. Prelandf87bef24435606129052351ce29e1c0e0cfd6996 в staging, [run472](http://git.dira89kv.beget.tech:3000/anton/preland/actions/runs/472), job672 SUCCESS. Фактический runner37 `zoomzilla-prod-org` в обоих случаях. Preland выпущен только на zoomstage.online; zoompixel production не обновлялся. API штатный regression gate/preflight/backup/deploy/smoke прошёл.
**Проверки:** независимые task reviews + итоговое review без открытых P0–P3. Docker QA Chromium/Firefox/WebKit:216/216 responsive,15/15 Android/iOS/Private picker,9/9 actual upload/claim/Tour/registration/PIN/dummy decline/retry/success/Private,6/6 настоящая reload-recovery,6/6 processing-error/retry/Join. На immutable image из полного чистого checkout491474a штатный image gate exit0, повтор UI6/reload6/picker15/codecs16/error-layout12 PASS. Production UI smoke12/12 (2поверхности×2темы×3размера): настоящий chooser/файл, серое pending, локально перехваченный422 и восстановление; файл на production не отправлялся. На stage8/8 fallback-срезов:2набора×2ширины×AVIF/AVIF+WebP отказ, в каждом клики всех5 и decode обеих сторон/миниатюр WebP/JPEG.
Два ранних внешних smoke получили timeout Playwright filechooser на разных срезах. Диагностика показала CDP Page.fileChooserOpened при таком timeout, trusted click и active userActivation; ошибок JS/блокировки picker нет. Сбой локализован в доставке события тестовому клиенту, продуктовую заплатку не делали. Полный12/12 проход и диагностические следы сохранены.
**Сохранность:**180/180 опубликованных изображений с точными SHA,213 static manifest PASS. Все30 добавленных в Git резервов уже существовали на stage, генерации/перезаливки не было; прежние150imageSHA не изменились. Runtime config SHA и обе domain SVG прежние, focus/brand no-op. Уточнение к предыдущему комментарию: CLS=0 измерен только в4Chromium-срезах; FF/WebKit null означает отсутствие измерительного API. Это локальные измерения, не полевой p75.
**База знаний:** commit b29b505 — актуальные спецификация/план/аудит, снимки статистики, ссылка DisplaysDB и результаты. Локальные evidence: `output/issue313/`, включая immutable-image/image-gate, финальные reviews, ops-release-postcheck, chooser-diagnosis, post-codecs и эскиз с панелями Яндекса (композиция, не физический Yandex smoke).
**Явные открытые остатки:** [api#314](http://git.dira89kv.beget.tech:3000/anton/api/issues/314) — обязательные настоящие Android-топ/UC/iOS/desktop-приложения, SamsungS25/RedmiA3, панели/крупный шрифт и browser zoom100/125/150%; [api#297](http://git.dira89kv.beget.tech:3000/anton/api/issues/297) — actual BFCache. Эти задачи OPEN, проверки NOTRUN. Реализация #313/#16 закрывается отдельно, весь Android-топ и99% не объявлены доказанными; телевизоры/автомагнитолы специально не тестировались по решению владельца. Собственная аналитика browser/version/viewport и полевой p75 не получены.
После выпуска313 владелец предоставил native Chrome155/Windows10 видео: Open-диалог открывается, после выбора JPG/GIF остаётся, DnD работает; проявляется на API иPreland. Отдельное критическое расследование api#315 OPEN содержит все факты, ограничения и автономную сравнительную страницу. Возможное восстановление после DnD — предположение владельца, причинность не доказана.
Уточнение к предыдущему итогу313: Playwright setFiles обходил Windows «Открыть», поэтому12/12 не доказывали этот native участок. Прежний вывод о доставке filechooser клиенту был слишком категоричным; на новое видео его переносить нельзя. Существование CDPopened не устанавливает причину зависшего Windowsдиалога. Причина315 НЕУСТАНОВЛЕНА, дефект неисправлен. Независимая новая подписьdesktop «Выберите файл» не является исправлением picker.
После выпуска313 владелец предоставил native Chrome155/Windows10 видео: Open-диалог открывается, после выбора JPG/GIF остаётся, DnD работает; проявляется на API иPreland. Отдельное критическое расследование **[api#315](http://git.dira89kv.beget.tech:3000/anton/api/issues/315)** OPEN содержит все факты, ограничения и автономную сравнительную страницу. Возможное восстановление после DnD — предположение владельца, причинность не доказана.
Уточнение к предыдущему итогу313: Playwright setFiles обходил Windows «Открыть», поэтому12/12 не доказывали этот native участок. Прежний вывод о доставке filechooser клиенту был слишком категоричным; на новое видео его переносить нельзя. Существование CDPopened не устанавливает причину зависшего Windowsдиалога. Причина315 НЕУСТАНОВЛЕНА, дефект неисправлен. Независимая новая подписьdesktop «Выберите файл» не является исправлением picker.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Основной реестр требований и согласований: http://git.dira89kv.beget.tech:3000/anton/api/issues/313 . Задача создана при подготовке исполнения по поручению владельца 23.10.2026; реализация и выпуск в исследовательском этапе не начаты.
Объём Preland:
Подтверждённая диагностика23.10: при блокировке AVIF на zoomstage.online примеры переходят в state=error без fallback; на основном сайте JPEG работает. Обычный текущий режим трёх движков проходит smoke; это не обещание поддержки99% версий.
Сохранять claim/client_key, UTM/theme, лёгкий inline-контракт, загрузку пар без скачков и незрелого взаимодействия. CSS-копии/inline-доставка и release/assets.json должны оставаться синхронными.
Ограничение выпуска: только staging → zoomstage.online по отдельной команде; production zoompixel.ru/.online заморожены по preland#4. Старый production-дефект скрытой ошибки — отдельная preland#15, не выпускать его content попутно. Runtime config менять нельзя, числовые наборы обычным деплоем не перетирать.
Закрытие: результат/проверки/коммиты/выпуск или его отсутствие записать комментариями; незавершённые обязательные проверки не прятать. Данная задача не является разрешением на текущую реализацию или production-выкат.
Актуализация по последним уточнениям владельца 23.10.2026
Формальные 99% сняты как жёсткий gate: цель — обычный купленный трафик Яндекс.Директа mobile и desktop, без специальной лаборатории телевизоров/автомагнитол. Рассмотреть все именованные мобильные категории Радара; малая доля не является исключением для обычного браузера.
Весь Android-топ обязателен: Яндекс Браузер и поисковые приложения, Chrome/Google app, Android Browser, Samsung Internet, MIUI Browser, Opera; UC Browser также явно обязателен. Android Browser — самостоятельный приоритет: 9,75% Android-среза, 6,96% всех мобильных. Edge/Firefox mobile — контрольный smoke; Atom/MZBrowser/Amigo/IE — отдельные строки реестра с применимостью/версией/точечной проверкой или явным ограничением. Редкость браузера не равна экзотике устройства. Desktop: Яндекс/Chrome/Edge/Opera/Firefox/Safari macOS, самостоятельная регрессия.
Первый экран, picker/cancel, настоящая локальная upload→Tour, серое pending, error/retry и резервные кодеки обязательны по основному реестру api#313. Недоступный реальный браузер нельзя заменить UA и назвать PASS. Полный перенос стека на все исторические JS-движки не подразумевается.
Обязательный AVIF fallback подтверждён владельцем отдельно. Реализация и выпуск пока не начаты. Подготовленный актуальный план и критерии находятся в описании api#313 и KB; эта актуализация заменяет ранние формулировки о жёстком достижении99%. Все прежние ограничения stage/runtime/config/production сохраняются.
Основной реестр api#313 обновлён итогом аудита и последними решениями владельца: весь Android-топ и отдельно UC обязательны, desktop учитывается;99% — ориентир, не формальныйgate. AVIF fallback обязателен. Актуальные шаги/матрица в описании api#313 и планеKB. Реализация/выкат ещё не поручены этим исследовательским этапом, обе задачиOPEN.
Владелец дал команду на исполнение #313 и разрешил выпуск без повторных подтверждений при отсутствии новых продуктовых развилок. API выпускаем только tagged-master через production-release.yml; Preland сохраняет действующую цель staging→zoomstage.online, production ZoomPixel не обновляем. Созданы чистые worktree API wt/issue313 отd72691f и Preland preland-worktrees/issue313 от0193354; штатный инструмент app неприменим, т.к. корень объединения не Git. Workflow superpowers: ledger/конфликт-скан→RED baseline→UI/pending→review→резервные кодеки/runtime-manifest→review→поведенческая регрессия→финальное ревью→штатный выпуск→smoke/KB/закрытие только при выполненной приёмке. Роли объединены по реальным задачам, без нового микросервиса и без изменений Python-сервисов GP. Независимые readonly-аудит эксплуатации и QA возможны параллельно, продуктовые изменения — последовательно по общей поверхности.
Исполнение: изолированный Docker QA на PHP 8.3.36, отдельная БД/85 миграций/TLS. RED реального SSR Chromium до правок подтвердил старый заголовок; RED Preland — три расхождения текстов. UI/pending реализуются отдельно от codec loader, после этапа независимое review.
Runtime-аудит: все180 URL наборов /1 и /2 доступны. 150 совпали SHA с Git, ещё30 mobile JPEG/WebP /2 уже есть на stage, но отсутствуют в Git/manifest. Скачаны точные байты, декодирование и совпадение размеров с AVIF30/30. Решение: синхронизировать эти файлы в Git и подключить резервные форматы; не генерировать и не заливать заново. Визуальный QA отдельный. Конфиг и существующие изображения не менять; до push no-op preflight focus/brand, после — повтор SHA. План/спецификация актуализированы в known-base/Планы/2026-10-23 Index Preland — план исполнения 313.md.
Реальные Samsung/Redmi/UC/Android Browser без доступного экземпляра не будут объявлены PASS по эмуляции движка. Ограничения и остатки фиксируем явно.
UI-этап: API29b1f55+8c4b5d5, Preland198ba57+0e6611d. Независимое review нашло Important в каскаде min-height: новый fallback перекрывал min-height:0 вложенной error-section. Реальный RED506/810px→исправление scope+@supports→GREEN0px; адресные12/12 и UI/pending6/6. Повторное review: finding ADDRESSED, spec/quality PASS в проверенной области.
Интеграция в отдельном Docker QA:216/216 responsive (2surface×2theme×18sizes×3engine),15/15 picker-neighbours (Android/iOS-ветки и Private batch/clear),9/9 actual upload/claim/registration/dummy/Private,6/6 настоящая reload-recovery с прежним client_key и реальным успешным start200. Это Chromium/Firefox/WebKit, не утверждение о нативных брендовых браузерах. Нативный непроверенный остаток явно выделен в связанную открытую api#314; actual BFCache остаётся api#297. До завершения #314 нельзя объявлять весь Android-топ или99% фактически подтверждёнными.
Следующий этап выполняется: резервные кодеки и совместимый example-loader, потом независимое review и финальная проверка immutable image/штатный выпуск. Focus/brand stage preflight no-op,138 legacy cleanup URL404; runtime никуда не записывали.
Решение по кодекам: Preland сохраняет AVIF primary → WebP → JPEG для source/result/thumb; API сохраняет JPEG primary/preload пары и получает WebP reserve, миниатюры AVIF→WebP→JPEG. JPEG-primary в Preland отклонён: первая desktop-пара /1 AVIF127796bytes противJPEG309561, /2 AVIF66869 противJPEG266612. Общий loader синхронен, пары переключаются атомарно, существующая последовательная очередь остальных пар сохраняется.
Чтобы неподдерживаемый кодек не вызывал скачивание всех заведомо нечитаемых картинок, введена одноразовая локальная dataURI-проба, отдельно от сетевого отказа ресурса. Адресная диагностика обнаружила false-negative tinyAVIF1×1 в Firefox/WebKit при успешном decode реальной фотографии; заменили на AVIF16×16 (300bytes), WebP1×1 (68bytes). Новый normal AVIF baseline12 срезов (3engine×2sets×2device):15/15 decoded,15unique asset-запросов,CLS0. Это локальные измерения, не production p75.
Наборы не генерируем/не заливаем:150 прежних imageSHA/source сохранены,30 точных существующих mobileрезервов /2 добавляются в Git. Contactsheet45 картинок просмотрен: одинаковые фото/кадрирование, существующий Second в /2 не меняли. Manifest delta строго3CSSSHA+30image-записей. Постоянный --refresh в productionCLI не добавляли: одноразовое обновление snapshot через существующие нормализаторы достаточно.
Реализация и разрешённый выпуск завершены23.10.2026. Основной реестр — api#313, зеркальная часть — preland#16.
Изменения: заголовок «Улучшить изображение» mobile/desktop, desktop24px/600; mobile «Выберите фото»/«Файлы (PDF и др.)». Pending-кнопка серая на обеих платформах, mobile files-link серый и недоступный; error/reset возвращает доступность. На малой стабильной высоте первой скрывается декоративная иконка, превью сохраняет пропорции. Preland source/result/thumb AVIF→WebP→JPEG; API сохраняет JPEG-primary пары с WebP-резервом. Атомарное переключение после decode, pointer/keyboard-lock независимо от inert, базовые CSS-fallback сохранены.
Коммиты/выпуск: API491474a3c3a30d483febe43bd885d1a3a3ce27f9 в master, тег v2026.10.23.1, production run471, job670 SUCCESS. Prelandf87bef24435606129052351ce29e1c0e0cfd6996 в staging, run472, job672 SUCCESS. Фактический runner37
zoomzilla-prod-orgв обоих случаях. Preland выпущен только на zoomstage.online; zoompixel production не обновлялся. API штатный regression gate/preflight/backup/deploy/smoke прошёл.Проверки: независимые task reviews + итоговое review без открытых P0–P3. Docker QA Chromium/Firefox/WebKit:216/216 responsive,15/15 Android/iOS/Private picker,9/9 actual upload/claim/Tour/registration/PIN/dummy decline/retry/success/Private,6/6 настоящая reload-recovery,6/6 processing-error/retry/Join. На immutable image из полного чистого checkout491474a штатный image gate exit0, повтор UI6/reload6/picker15/codecs16/error-layout12 PASS. Production UI smoke12/12 (2поверхности×2темы×3размера): настоящий chooser/файл, серое pending, локально перехваченный422 и восстановление; файл на production не отправлялся. На stage8/8 fallback-срезов:2набора×2ширины×AVIF/AVIF+WebP отказ, в каждом клики всех5 и decode обеих сторон/миниатюр WebP/JPEG.
Два ранних внешних smoke получили timeout Playwright filechooser на разных срезах. Диагностика показала CDP Page.fileChooserOpened при таком timeout, trusted click и active userActivation; ошибок JS/блокировки picker нет. Сбой локализован в доставке события тестовому клиенту, продуктовую заплатку не делали. Полный12/12 проход и диагностические следы сохранены.
**Сохранность:**180/180 опубликованных изображений с точными SHA,213 static manifest PASS. Все30 добавленных в Git резервов уже существовали на stage, генерации/перезаливки не было; прежние150imageSHA не изменились. Runtime config SHA и обе domain SVG прежние, focus/brand no-op. Уточнение к предыдущему комментарию: CLS=0 измерен только в4Chromium-срезах; FF/WebKit null означает отсутствие измерительного API. Это локальные измерения, не полевой p75.
База знаний: commit b29b505 — актуальные спецификация/план/аудит, снимки статистики, ссылка DisplaysDB и результаты. Локальные evidence:
output/issue313/, включая immutable-image/image-gate, финальные reviews, ops-release-postcheck, chooser-diagnosis, post-codecs и эскиз с панелями Яндекса (композиция, не физический Yandex smoke).Явные открытые остатки: api#314 — обязательные настоящие Android-топ/UC/iOS/desktop-приложения, SamsungS25/RedmiA3, панели/крупный шрифт и browser zoom100/125/150%; api#297 — actual BFCache. Эти задачи OPEN, проверки NOTRUN. Реализация #313/#16 закрывается отдельно, весь Android-топ и99% не объявлены доказанными; телевизоры/автомагнитолы специально не тестировались по решению владельца. Собственная аналитика browser/version/viewport и полевой p75 не получены.
После выпуска313 владелец предоставил native Chrome155/Windows10 видео: Open-диалог открывается, после выбора JPG/GIF остаётся, DnD работает; проявляется на API иPreland. Отдельное критическое расследование api#315 OPEN содержит все факты, ограничения и автономную сравнительную страницу. Возможное восстановление после DnD — предположение владельца, причинность не доказана.
Уточнение к предыдущему итогу313: Playwright setFiles обходил Windows «Открыть», поэтому12/12 не доказывали этот native участок. Прежний вывод о доставке filechooser клиенту был слишком категоричным; на новое видео его переносить нельзя. Существование CDPopened не устанавливает причину зависшего Windowsдиалога. Причина315 НЕУСТАНОВЛЕНА, дефект неисправлен. Независимая новая подписьdesktop «Выберите файл» не является исправлением picker.