revise March 2022 browser rendering articles
Build and deploy / deploy (push) Successful in 15s

This commit is contained in:
2026-07-31 13:39:49 +03:00
parent a4b475a308
commit f6afaff958
7 changed files with 752 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 148 из 358 созданных материалов. Остальные 210 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 151 из 358 созданных материалов. Остальные 207 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+188
View File
@@ -0,0 +1,188 @@
# П49 — browser rendering, март 2022: self-review sidecar-пакета
## Граница пакета
Созданы только пять новых файлов, без изменения registry, README, `articles.json`,
редакционного стандарта, очереди, Git и файлов других пакетов:
1. `web/scripts/upgrade-2022-03.mjs`;
2. `web/public/assets/editorial/2022/browser-rendering-timeline-2022.svg`;
3. `web/public/assets/editorial/2022/browser-rendering-pipeline-2022.svg`;
4. `web/public/assets/editorial/2022/browser-rendering-diagnosis-rollback-2022.svg`;
5. этот review.
Скрипт экспортирует только `revisions`. В каждом overlay-объекте есть только
поля публикации; `date` и `author` отсутствуют. `--print-revisions` печатает
тот же import-safe массив, а `--verify-fixture` запускает локальную модель.
## Историческая рамка и источники
Материал ограничен мартом 2022 года. Проверены три первичных или официальных
источника с датированным либо неизменяемым URL:
- [WHATWG HTML, immutable commit 9d42d2c от 27 февраля 2022 года](https://github.com/whatwg/html/commit/9d42d2ca8523758893cdc8d7de6e0815e4178b81);
- [W3C Timing control for script-based animations, Working Group Note от 22 сентября 2015 года](https://www.w3.org/TR/2015/NOTE-animation-timing-20150922/);
- [W3C Performance Timeline Level 2, Working Draft от 19 августа 2021 года](https://www.w3.org/TR/2021/WD-performance-timeline-2-20210819/).
HTTP preflight всех трёх URL завершился `200`. Из источников взяты только
узкие факты: rendering обновляется user agent, `requestAnimationFrame`
запрашивает планирование animation frame update, а Performance Timeline
описывает работу с performance entries. Они не устанавливают единственный
browser pipeline, не задают labels fixture и не дают числовой бюджет. В статьях
нет INP, поздних интерфейсных возможностей DevTools, современных рекомендаций
по Web Vitals или утверждений о production-метриках.
## Проход 1 — факты и техника
Проверял: границу между документированным поведением, реальной записью
Performance panel и учебной моделью.
`planRenderFrame` и `runBrowserRenderingFixture` используют только локальные
object/array. В них нет DOM, browser API, `requestAnimationFrame`, сети,
таймера, файлов, CPU profile, trace или Web Vitals. Значения `units` всегда
названы `synthetic-work-units`; это не milliseconds, duration, FPS, CPU или
результат настоящего кадра.
Fixture формирует один валидный DOM contract:
```text
save-card.className: card is-pending -> card is-ready
```
Для changed route она создаёт фиксированный порядок `js-mutation → style →
layout → paint → composite`, total `11 synthetic units` и условную
`jank-boundary` при limit `10`. Это не диагноз jank пользователя, а
детерминированная тестовая ветка. Error route отвергает неизвестное property
или неверный contract; no-op route не создаёт frame; rollback возвращает
исходный DOM отдельным frame.
Выполнено:
```text
node --check web/scripts/upgrade-2022-03.mjs
node web/scripts/upgrade-2022-03.mjs --verify-fixture
```
Результат: **16/16 assertions**.
Assertions покрывают: валидный target/property/from/to, новый DOM result,
сохранение text, stable frame id, точный порядок всех стадий, названные причины
стадий, явную synthetic unit, детерминированную сумму, условную boundary без
претензии на duration, no-op без frame/mutation, error без mutation,
rollback к base DOM и отдельный rollback frame с тем же порядком стадий.
Все code snippets соответствуют реальным полям и режимам script. Пример с
rollback прямо объясняет, что это не browser undo, а проектный проверяемый
контракт. Пример diagnosis не выдаёт labels модели за event names Performance
panel.
## Проход 2 — редактура, голос и объём
Проверял: М5 начала 2022 года — системный практик, который связывает
пользовательское действие, границу системы и проверяемый следующий шаг, но не
приписывает себе инцидент, платформенный масштаб или неизмеренный эффект.
| Slug | Основной текст, знаки | Роль | Каркас | Вердикт |
| --- | ---: | --- | --- | --- |
| `editorial-2022-03-practice-browser-rendering` | 7 655 | Практический маршрут | проблема/цена, таблица, fixture, timeline, маршрут, ограничения | Принято |
| `editorial-2022-03-mechanism-browser-rendering` | 9 514 | Причинная модель | проблема/цена, таблица, pipeline, error/no-op, rollback | Принято |
| `editorial-2022-03-field-browser-rendering` | 9 313 | Полевой разбор | проблема/цена, полевой лист, diagnosis, rollback, следующий шаг | Принято |
Во всех статьях проблема и цена находятся в первых двух абзацах. Техническая
речь выдерживает маршрут «симптом → причина → проверка → действие»; общие
фразы заменены на target, property, before/after, owner, range и rollback.
Тексты не утверждают «CSS всегда дорогой», «class всегда вызывает layout» или
«страница стала быстрее». Термины `style`, `layout`, `paint` и `composite`
после первого появления ограничены учебными labels и вопросом к настоящей
записи. Анахронизмы после марта 2022 года удалены.
Выполнено:
```text
npm --prefix web run audit:draft -- scripts/upgrade-2022-03.mjs
```
Результат: все три статьи прошли диапазон 5 000–15 000, проблему в начале,
таблицу, figure с alt/подписью, код, ordered route, минимум два источника и
проверку import-safe overlay.
## Проход 3 — визуал и выпуск sidecar
Проверял: самостоятельность трёх иллюстраций, читаемость на ширине 375 px,
SVG safety и границы выпуска sidecar.
- `browser-rendering-timeline-2022.svg` отвечает на вопрос «какой порядок и
где условная boundary?»; в нём labels и units не маскируются под duration.
- `browser-rendering-pipeline-2022.svg` отвечает на вопрос «какой вопрос
относится к каждой стадии?»; пунктирная рамка отделяет модель от event
names браузера.
- `browser-rendering-diagnosis-rollback-2022.svg` отвечает на вопрос «когда
остановиться и как проверить обратимость?»; он различает error, no-op,
boundary и rollback.
Для всех SVG выполнены:
```text
xmllint --noout <each-svg>
rg -n '<script|<foreignObject|(?:href|src)="https?://|data:image' <each-svg>
```
XML проверка прошла. Safety scan не нашёл script, foreignObject, внешних URL
или `data:image`. В каждом SVG есть `title`, `desc`, `role="img"`; в статьях
есть отдельные развёрнутые `alt` и `figcaption`. Рендеры Sharp шириной 375 px
просмотрены: крупные заголовки, связи и предупреждения читаются, текст не
обрезан, а три схемы не повторяют один вопрос.
Production build, registry integration, изменение базы статей, публикация и
push намеренно не выполнялись: они лежат за границей автономного пакета.
## Вердикт
Sidecar-пакет П49 готов к независимому редакторскому приёму. Перед
интеграцией нужен отдельный проход: повторно проверить исторические ссылки,
добавить импорт и spread в registry, обновить счётчик архива, запустить
targeted audit и production build. Эти файлы намеренно не изменены здесь.
## Независимый редакторский приём
### Проход 1 — источники и модель
До интеграции выявлена фактическая ошибка: исходный URL объявлял документ
W3C Recommendation от 6 октября 2015 года, но отвечал `404`. Он удалён из
текста, кода и review. Вместо него поставлена проверяемая
[W3C Working Group Note от 22 сентября 2015 года](https://www.w3.org/TR/2015/NOTE-animation-timing-20150922/).
Её статус и дата названы без повышения до Recommendation. Повторный HTTP
preflight этого URL, immutable WHATWG commit и датированного Performance
Timeline draft завершился `200`.
Затем вручную просмотрена локальная fixture. `planRenderFrame` принимает
только declared DOM-contract, не обращается к DOM или browser API и маркирует
все five stages как `synthetic-work-units`. Граница `10` не названа временем
кадра или dropped-frame наблюдением. CLI подтвердил 16 из 16 assertions;
import вернул ровно три revision-объекта без `date` и `author`.
### Проход 2 — текст и полнота
Перепроверены первые абзацы, связи «симптом → причина → проверка → действие»,
rollback и исторические ограничения. Убрана смешанная фраза `later change`:
она заменена на «следующая правка». Строгий целевой аудит после интеграции
подтвердил 7 655 / 9 514 / 9 313 знаков, по одной figure и таблице в каждой
статье, а также 1 / 2 / 2 исполнимых code examples соответственно. Ни один
материал не выдаёт учебные labels за события Performance panel либо за
результат реального trace.
### Проход 3 — визуал и выпуск
Все три SVG повторно прошли `xmllint`; safety scan не нашёл script,
`foreignObject`, внешних URL или `data:image`. Рендеры Sharp шириной 375 px
просмотрены отдельно: timeline объясняет условную границу, pipeline отделяет
вопросы модели от имён browser events, diagnosis показывает остановки и
rollback. После добавления мартовского import/spread registry содержит 142
ревизии. `npm run build` завершён успешно: сгенерировано 374 статические
страницы.
## Финальный вердикт
П49 принята и интегрирована после трёх независимых проходов. В публикацию
попадают только пять файлов партии и два точечных файла интеграции; материалы
следующих месяцев и несвязанные файлы рабочего дерева не включаются.