# П54 · 2022-08 · Изображения и медиа — три прохода саморевью ## Рамка пакета - Slug: `editorial-2022-08-practice-media-performance`, `editorial-2022-08-mechanism-media-performance`, `editorial-2022-08-field-media-performance`. - Голос: М5, начало 2022 года. Прагматичная техническая речь: один media slot, отдельные владельцы state, проверяемая граница и обратимая правка вместо общего обещания «ускорить картинки». - Граница: fixture не создаёт DOM, `img`, CSS layout, сеть, browser scheduler, `decode()`, `PerformanceObserver`, trace или product metric. `markup`, geometry, load/decode labels, priority intent и observation record — локальные данные модели. В частности, PASS не означает загрузку, декодирование, LCP или CLS. - Источники: датированный W3C FPWD Largest Contentful Paint от 24.05.2022 и W3C HTML 5.2 Recommendation от 14.12.2017. Оба URL проверены на HTTP 200; не использованы плавающие editor drafts как доказательство состояния августа 2022 года. ## Проход 1 — факты и техника - W3C LCP First Public Working Draft от 24 мая 2022 года назван именно Working Draft. Текст использует его только для границы: LCP — API наблюдения candidates с ограничениями, не синоним большой картинки и не результат unit fixture. - HTML 5.2 Recommendation остаётся исторической первичной ссылкой для `img`; статья не приписывает ему product policy, responsive selection или конкретный scheduler priority. - Учебный contract различает `markup`, `geometry`, `request.priorityIntent`, declared load, declared decode и caller-supplied observation. `priorityIntent` прямо маркирован как намерение приложения, не как приоритет браузера. `geometryReserved` прямо не называется отсутствием layout shift. - Fixture намеренно отвергает decode до declared load и load без markup, принимает только положительную geometry, сохраняет deferred slot неготовым и всегда возвращает `realMetricMeasured: false`. - После финальной правки пройдены: `node --check web/scripts/upgrade-2022-08.mjs`; `node web/scripts/upgrade-2022-08.mjs --verify-fixture`; `npm run audit:draft -- scripts/upgrade-2022-08.mjs`; import/CLI comparison без `date` и `author`. ## Проход 2 — редактура, голос и полнота - Первые два абзаца каждой статьи называют ситуацию и цену: поздний контент, изменение layout, неподтверждённый priority, необъяснимый релиз и невозможность корректно откатить смешанную правку. - Маршрут в каждой статье построен как «симптом → причина → проверка → действие», с отдельным rollback и списком того, чего модель не измеряет. - У всех статей есть table, локальный SVG с alt/caption, исполнимый fixture command и нумерованный маршрут. Тон М5 не выдумывает production case, проценты, LCP/CLS trace, сроки или эффект; он отделяет contract от browser observation. - Размер основного текста контролируется скриптом: все три статьи находятся в обязательном диапазоне 5 000–15 000 знаков без списка источников. ## Проход 3 — визуал и безопасность - SVG отвечают на три разные задачи: contract slot, state boundary и diagnosis/rollback. Во всех есть `title`, `desc`, `role="img"`, а в статьях — развёрнутые alt и подписи. - В SVG нет `script`, `foreignObject`, внешних URL и `data:image`. Проверка XML и safety scan не нашли запрещённых конструкций. - Все три диаграммы открыты через Sharp-рендер на ширине 375 px: заголовки, состояния, подписи границы и ветка rollback остаются читаемыми; визуал не используется как доказательство браузерной метрики. - Sidecar содержит ровно пять новых файлов. Registry, README, `articles.json`, очередь, Git, ранее созданные месяцы и чужие файлы не менялись; интеграция и публикация не выполнялись. ## Независимый редакторский приём ### Проход 1 — фактчек и модель Проверены оба датированных W3C URL: LCP First Public Working Draft 24 мая 2022 года и раздел `img` HTML 5.2 Recommendation ответили `200`. Название LCP сохранено как Working Draft, а не повышено до Recommendation. Фактчек подтвердил ключевую границу текста: API описывает browser-side candidates и ограничения, поэтому fixture не вправе объявлять свой `candidate-note` измерением LCP или CLS. Просмотрены все переходы `createMediaContract`: markup precedes plan, declared load precedes declared decode, и supplied observation возможен только после decode label. Geometry не названа результатом layout calculation; `priorityIntent` возвращает `transport: not-performed`; readiness всегда оставляет `realMetricMeasured: false`. Fixture прошла **14/14 assertions**. ### Проход 2 — текст и полнота Проверены problem/cost в первых абзацах, tables, examples, ordered routes, rollback и ограничения. Все три статьи различают component contract, application intent, browser work и внешний observation record. Они не заявляют загрузку, decode, LCP, CLS или скорость устройства. Draft audit подтвердил 6 982 / 7 584 / 8 019 знаков; import-safe проверка вернула три revision-объекта без `date` и `author`. ### Проход 3 — визуал и выпуск `xmllint` прошёл; safety scan не нашёл script, `foreignObject`, внешних URL или `data:image`. Sharp-рендеры на 375 px просмотрены: slot contract, state boundary и diagnosis/rollback самостоятельны и читаемо фиксируют границу «не browser metric». После подключения августа registry содержит 157 ревизий. Строгий slug-audit прошёл с одной figure, таблицей и code example на статью; production build успешно сгенерировал 374 страницы. Sidecar сентября и позже не затрагиваются. ## Финальный вердикт П54 принята и интегрирована после трёх независимых проходов. В коммит войдут только пять файлов августа и два точечных файла интеграции.