diff --git a/editorial/production/README.md b/editorial/production/README.md index 1b26a2f..e680ec8 100644 --- a/editorial/production/README.md +++ b/editorial/production/README.md @@ -1,6 +1,6 @@ # Производство редакционных партий -На 31 июля 2026 года строгий аудит проходит 142 из 358 созданных материалов. Остальные 216 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. +На 31 июля 2026 года строгий аудит проходит 145 из 358 созданных материалов. Остальные 213 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. ## Одна партия diff --git a/editorial/reviews/2022-01-draft.md b/editorial/reviews/2022-01-draft.md new file mode 100644 index 0000000..2fb24dc --- /dev/null +++ b/editorial/reviews/2022-01-draft.md @@ -0,0 +1,142 @@ +# П47 — SSR/CSR, январь 2022: self-review sidecar-пакета + +## Граница пакета + +Подготовлены только пять файлов, без изменения registry, README, `articles.json`, Git и чужих черновиков: + +1. `web/scripts/upgrade-2022-01.mjs`; +2. `web/public/assets/editorial/2022/ssr-csr-lifecycle-2022.svg`; +3. `web/public/assets/editorial/2022/ssr-csr-state-ownership-2022.svg`; +4. `web/public/assets/editorial/2022/ssr-csr-diagnosis-2022.svg`; +5. этот review. + +Скрипт экспортирует только overlay-поля: `slug`, `title`, `categories`, `cover`, `excerpt`, `readingMinutes`, `contentHtml`. В нём нет `date` и `author`. `--print-revisions` выводит тот же массив, что import-safe export `revisions`; это проверяет `audit:draft`. + +## Историческая рамка + +Материал ограничен январём 2022 года. Проверены три первичных официальных источника: + +- [ReactDOM.hydrate — immutable documentation snapshot от 23 декабря 2021](https://github.com/reactjs/react.dev/blob/b41b1dc35679c01c3252e7d512ce28c5e100d0a4/content/docs/reference-react-dom.md#hydrate); +- [ReactDOMServer.renderToString — immutable documentation snapshot от 23 декабря 2021](https://github.com/reactjs/react.dev/blob/b41b1dc35679c01c3252e7d512ce28c5e100d0a4/content/docs/reference-react-dom-server.md#rendertostring); +- [React 17.0.2 release record от 22 марта 2021](https://github.com/react/react/releases/tag/v17.0.2). + +Все три URL прошли HTTP preflight с итоговым `200`. Из документации взят только факт: `hydrate` работает с существующей server-rendered разметкой, ожидает согласованное server/client content, а mismatch следует исправлять. Схема `version + serialized snapshot`, labels fixture и recovery policy — учебные и проектные решения, а не API React. В статьях нет React 18, `hydrateRoot`, Next.js App Router, server components или документов позже января 2022 года. + +## Проход 1 — голос, объём и структура + +Проверял: М5 начала 2022 года — frontend-системщик начинает с пользовательского сценария, называет границу данных, отделяет наблюдаемое от решения и оставляет путь проверки без выдуманных production-метрик. + +| Slug | Body, знаки | Роль | Структура | Итог | +| --- | ---: | --- | --- | --- | +| `editorial-2022-01-practice-ssr-csr` | 6 964 | Воспроизводимый путь | 6 `h2`, таблица, SVG, fixture-код, маршрут | Принято | +| `editorial-2022-01-mechanism-ssr-csr` | 7 791 | Причинная модель | 6 `h2`, таблица, SVG, fixture-код, маршрут | Принято | +| `editorial-2022-01-field-ssr-csr` | 8 250 | Диагностика случая | 6 `h2`, таблица, SVG, fixture-код, маршрут | Принято | + +Во всех трёх первых двух абзацах есть конкретная проблема и её цена. В каждом тексте отделены: факт исторической документации, локальная fixture и решение проекта. Проверен язык: вместо общего «SSR быстрее» оставлены наблюдаемые формулировки о source, version, snapshot, hydrate и условии client fetch. Шаблонные обороты из редакционного аудита отсутствуют. + +Команда: + +```text +npm run audit:draft -- scripts/upgrade-2022-01.mjs +``` + +Результат: все три статьи прошли диапазон 5 000–15 000, доступную таблицу, рисунок с alt/подписью, пример кода, ordered route, два и более внешних источника и import-safe overlay. + +## Проход 2 — техническая fixture и assertions + +Проверял: согласованность примеров со скриптом и запрет подменять учебный объект реализацией React/Next.js. + +`runSsrCsrFixture()` работает только с local object, array, `JSON.stringify` и `JSON.parse`. В ней нет DOM, HTTP, `fetch`, browser API, таймера, файла, сети, базы или framework runtime. `markupVersion` назван учебным marker, а не внутренней проверкой React. + +Выполнено: + +```text +node --check web/scripts/upgrade-2022-01.mjs +node web/scripts/upgrade-2022-01.mjs --verify-fixture +``` + +Результат fixture: **12/12 assertions**. + +Покрыты свойства: + +1. same version пропускает второй client fetch; +2. mismatch фиксируется до markup/client-state mutation; +3. mismatch остаётся видимым и содержит expected/serialized version; +4. mismatch не запускает автоматический client fetch; +5. serialized version равна версии server source; +6. matching path называет `serialized-snapshot` владельцем initial state; +7. фазы `ssr/source`, `serialized-snapshot`, `hydrate`, `client-fetch` не сливаются; +8. у этих фаз разные action labels; +9. owners server, snapshot и browser transition названы отдельно; +10. внешняя работа не выполняется; +11. схема не заявлена как реализация React или Next.js; +12. повторный matching plan детерминирован. + +Все snippets в статьях импортируют `runSsrCsrFixture` и читают реальные поля `serverEnvelope`, `matchingHydration`, `mismatchHydration`, `stateOwner`, `mutation`, `clientFetch`, `steps` и `assertions`. + +## Проход 3 — источники, историческая точность и visual + +Проверял: фиксированную дату источников, доступность ссылок, XML/SVG safety и визуальное объяснение на узком экране. + +- Исторические ссылки зафиксированы immutable commit от 2021-12-23 и release 2021-03-22; источник не опирается на mutable current API wording. +- `xmllint --noout` прошёл для всех трёх SVG. +- Safety scan не нашёл `