This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 52 из 358 созданных материалов. Остальные 306 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
На 31 июля 2026 года строгий аудит проходит 58 из 358 созданных материалов. Остальные 300 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
# Июнь 2019 — тройное ревью чернового пакета П16 «Контракт REST API»
|
||||
|
||||
Статус: **принят в публикационный слой 31 июля 2026 года**. Registry
|
||||
накладывает три ревизии по стабильным slug и сохраняет дату и автора базового
|
||||
архива:
|
||||
|
||||
- <code>editorial-2019-06-practice-rest-api</code>;
|
||||
- <code>editorial-2019-06-mechanism-rest-api</code>;
|
||||
- <code>editorial-2019-06-field-rest-api</code>.
|
||||
|
||||
Созданы только:
|
||||
|
||||
- <code>web/scripts/upgrade-2019-06.mjs</code>;
|
||||
- <code>web/public/assets/editorial/2019/rest-api-contract-map-2019.svg</code>;
|
||||
- <code>web/public/assets/editorial/2019/rest-api-response-matrix-2019.svg</code>;
|
||||
- <code>web/public/assets/editorial/2019/rest-api-contract-fixture-2019.svg</code>;
|
||||
- этот файл.
|
||||
|
||||
Модуль экспортирует ровно три ревизии. В ревизиях нет <code>date</code> и
|
||||
<code>author</code>: это исторические поля исходных публикаций, а не черновика.
|
||||
При вызове с <code>--print-revisions</code> stdout содержит только JSON.
|
||||
Отдельный <code>--run-fixture</code> запускает локальную проверку заранее
|
||||
заданных объектов ответа; он не делает HTTP-запрос, не запускает сервер и не
|
||||
является проверкой production.
|
||||
|
||||
## Проход 1. Факты и техника — пройдено
|
||||
|
||||
| Утверждение или решение | Первичный источник | Проверенная граница |
|
||||
| --- | --- | --- |
|
||||
| HTTP-код и представление ответа — часть результата операции | [IETF RFC 7231, раздел 6](https://www.rfc-editor.org/rfc/rfc7231#section-6) | В текст не введён флаг ошибки внутри 200 как замена HTTP-статуса |
|
||||
| Problem detail содержит type, title, status, detail, instance; расширения принадлежат API | [IETF RFC 7807](https://www.rfc-editor.org/rfc/rfc7807) | <code>errors</code> помечен как project extension, а не как универсальное поле стандарта |
|
||||
| OpenAPI 3.0.2 описывает operation, responses, content и schema | [OpenAPI 3.0.2](https://spec.openapis.org/oas/v3.0.2.html) | Версия существовала в 2019 году; не использованы более поздние возможности |
|
||||
| required-property и nullable-value — разные условия | [OpenAPI 3.0.2, Schema Object](https://spec.openapis.org/oas/v3.0.2.html#schema-object) | <code>page.nextCursor</code> обязателен и допускает null; <code>customer</code> либо отсутствует, либо является объектом |
|
||||
| HTTP не навязывает конкретную pagination форму | [IETF RFC 8288](https://www.rfc-editor.org/rfc/rfc8288) | cursor и object page названы проектным выбором; Link header назван альтернативой, а не проигнорирован |
|
||||
|
||||
Учебные snippets и fixture не ссылаются на настоящий сервис, токен, URL
|
||||
production или якобы выполненный сетевой сценарий. В CLI с
|
||||
<code>--run-fixture</code> есть три локальных case:
|
||||
|
||||
1. 200 / JSON с последней страницей и явным <code>nextCursor: null</code>;
|
||||
2. 400 / problem+json с <code>invalid_cursor</code>;
|
||||
3. отрицательный 200 / JSON без <code>nextCursor</code>, который обязан быть
|
||||
отклонён.
|
||||
|
||||
Итог первого прохода: технические утверждения привязаны к HTTP, RFC 7807 и
|
||||
исторически уместному OpenAPI 3.0.2; тест не объявлен серверным или
|
||||
production-доказательством.
|
||||
|
||||
## Проход 2. Редактура и голос М2 — пройдено
|
||||
|
||||
| Проверка | Практика | Механизм | Полевой разбор |
|
||||
| --- | --- | --- | --- |
|
||||
| Ранняя постановка симптома и цены | Падение, неверная страница и спор слоёв | Тихая поломка при семантически другом JSON | UI не знает, как трактовать распарсенный ответ |
|
||||
| Рабочая цепочка | Симптом → причина → контракт → fixture → действие | Симптом → Operation/Responses/Schema → совместимость | Симптом → cases → fixture → запрос к стенду |
|
||||
| Техническая речь | Статус, media type, cursor, optional field | HTTP, OpenAPI 3.0.2, required, nullable | Response objects, negative case, headers, body |
|
||||
| Объём основного текста | Подтверждается draft gate | Подтверждается draft gate | Подтверждается draft gate |
|
||||
|
||||
Голос соответствует М2 / 2019: автор уже связывает frontend, backend и HTTP,
|
||||
но не имитирует инструменты и практики 2027 года. Текст не обещает
|
||||
«универсальный REST», не называет обычный JSON доказательством успеха и не
|
||||
подменяет конкретные условия общими оценками. В каждой статье есть не менее
|
||||
пяти смысловых разделов, доступная таблица, код, порядок действий, визуал,
|
||||
источники и ограничения.
|
||||
|
||||
Итог второго прохода: три текста держат прагматичный формат «симптом →
|
||||
причина → проверка → действие» и не раздувают тему за счёт общих вступлений.
|
||||
|
||||
## Проход 3. Визуал и выпускная дисциплина — пройдено для автономного пакета
|
||||
|
||||
| Артефакт | Назначение | Проверка доступности и выпуска |
|
||||
| --- | --- | --- |
|
||||
| <code>rest-api-contract-map-2019.svg</code> | Вход операции и развилка 200/400 | Есть title, desc, содержательный alt, подпись; SVG без script |
|
||||
| <code>rest-api-response-matrix-2019.svg</code> | Связь Operation, Responses и Schema | Есть title, desc, содержательный alt, подпись; SVG без script |
|
||||
| <code>rest-api-contract-fixture-2019.svg</code> | Граница локальной fixture и сетевой проверки | Есть title, desc, содержательный alt, подпись; SVG без script |
|
||||
|
||||
### Выполненные проверки
|
||||
|
||||
~~~text
|
||||
node --check web/scripts/upgrade-2019-06.mjs
|
||||
cd web && npm run audit:draft -- scripts/upgrade-2019-06.mjs
|
||||
node web/scripts/upgrade-2019-06.mjs --run-fixture
|
||||
xmllint --noout \
|
||||
web/public/assets/editorial/2019/rest-api-contract-map-2019.svg \
|
||||
web/public/assets/editorial/2019/rest-api-response-matrix-2019.svg \
|
||||
web/public/assets/editorial/2019/rest-api-contract-fixture-2019.svg
|
||||
~~~
|
||||
|
||||
Результат 31 июля 2026 года:
|
||||
|
||||
- <code>node --check</code> — код 0;
|
||||
- draft gate — три PASS: практика 9 266, механизм 10 792, полевой разбор
|
||||
10 300 знаков основного текста;
|
||||
- <code>--run-fixture</code> — три PASS: финальная 200-страница с
|
||||
<code>nextCursor: null</code>, 400 problem detail с
|
||||
<code>invalid_cursor</code> и обязательное отклонение 200 без
|
||||
<code>nextCursor</code>;
|
||||
- <code>xmllint --noout</code> — код 0 для трёх SVG;
|
||||
- проверка завершающих пробелов не нашла совпадений.
|
||||
|
||||
SVG дополнительно прочитаны как выпускные артефакты: у каждого есть
|
||||
самодостаточные <code>title</code> и <code>desc</code>, все блоки, стрелки и
|
||||
подписи размещены внутри viewBox 900×760. У первой схемы длинная итоговая
|
||||
подпись разбита на две строки. CSS статьи выводит figure-image по ширине
|
||||
контейнера, а таблицы имеют горизонтальную прокрутку. Это статическая
|
||||
проверка разметки и геометрии; в журнал не приписывается вымышленный
|
||||
browser-render, server run или production build. Перед публикацией основной
|
||||
редактор должен отдельно
|
||||
подключить ревизии к registry, повторить strict audit вместе с архивом,
|
||||
построить production-сайт и проверить реальные страницы на широком и узком
|
||||
экране, сохранив исходные дату и автора.
|
||||
|
||||
После подключения registry основной редактор повторил strict audit: все три
|
||||
slug прошли объём 9 266 / 10 792 / 10 300 знаков, figure, таблицы, код,
|
||||
маршруты и источники. <code>npm run build</code> завершился с кодом 0 и
|
||||
сгенерировал 374 статические страницы.
|
||||
|
||||
Выпусковой вердикт: **принят к публикации**. <code>articles.json</code> не
|
||||
менялся; registry заменяет только редакционные поля по стабильному slug.
|
||||
|
||||
### Независимый мобильный preflight
|
||||
|
||||
Основной редактор отдельно отрендерил все три SVG через Sharp на ширине 720 и
|
||||
375 px. Первый вариант не обрезался, но его подписи были слишком мелкими при
|
||||
375 px. Все три схемы заменены на вертикальные композиции с короткими
|
||||
подписями; повторный рендер подтвердил читаемые главные метки, отсутствие
|
||||
обрезания и горизонтального overflow. Это проверка SVG-артефактов, а не
|
||||
заявление о browser-render или сетевом production-тесте.
|
||||
@@ -0,0 +1,108 @@
|
||||
# P18 · 2019-08 · Производительность первой загрузки
|
||||
|
||||
Статус: **принят в публикационный слой 31 июля 2026 года**. Он содержит
|
||||
ровно три ревизии; registry применяет их по стабильному slug и сохраняет даты
|
||||
и авторов базового архива.
|
||||
|
||||
- <code>editorial-2019-08-practice-frontend-performance</code>;
|
||||
- <code>editorial-2019-08-mechanism-frontend-performance</code>;
|
||||
- <code>editorial-2019-08-field-frontend-performance</code>.
|
||||
|
||||
## Рамка и границы утверждений
|
||||
|
||||
Голос — М2, август 2019 года: автор уже уверенно работает с browser DevTools,
|
||||
Network, trace и границами модулей, но не выдает поздние платформы
|
||||
наблюдаемости, RUM-распределения или современные Core Web Vitals за личную
|
||||
практику того периода. Речь в каждой статье следует маршруту «симптом →
|
||||
причина → проверка → действие».
|
||||
|
||||
Материал использует Navigation/Resource/User Timing и документацию Chrome
|
||||
DevTools. Позднейшая web.dev-терминология LCP используется только как
|
||||
редакторская рамка для полноты диагностики: она не названа сделанным в 2019
|
||||
году замером и не подставлена вместо browser trace.
|
||||
|
||||
В модуле есть один контролируемый Node fixture. Его числа
|
||||
<code>network=180</code>, <code>javascript=165</code>, <code>css=90</code>,
|
||||
<code>image=45</code> ms и <code>210000</code> bytes проверяют
|
||||
классификацию четырёх владельцев. Fixture не открывает браузер, не делает
|
||||
HTTP-запрос и не является production-значением или performance trace.
|
||||
|
||||
## Pass 1 — факты и техника
|
||||
|
||||
- Сверены официальные определения Navigation Timing и
|
||||
<code>PerformanceResourceTiming</code>: navigation относится к документу,
|
||||
resource — к отдельным ресурсам; поля cross-origin могут быть ограничены
|
||||
без <code>Timing-Allow-Origin</code>.
|
||||
- Утверждение о JavaScript не сведено к весу gzip-файла. Сеть, parse,
|
||||
execute, DOM, style/layout, decode и paint названы разными участками,
|
||||
требующими разной проверки.
|
||||
- Для LCP использована современная официальная разбивка на TTFB, resource
|
||||
load delay, duration и element render delay. В статьях ясно сказано, что
|
||||
это способ проверить гипотезу при переиздании, а не подлинный отчёт автора
|
||||
за август 2019.
|
||||
- <code>responseEnd</code>, <code>img.complete</code>,
|
||||
<code>DOMContentLoaded</code> и <code>load</code> нигде не выданы за
|
||||
универсальный момент полезности экрана. У каждого есть описанное
|
||||
ограничение.
|
||||
- fixture проверяет только классификацию. В тексте не заявлены выполненные
|
||||
trace, мобильный throttling, скриншоты или значения реального проекта.
|
||||
- Вердикт: технические формулировки проверяемы и отделяют факт API от
|
||||
лабораторного наблюдения и production-метрики.
|
||||
|
||||
## Pass 2 — редактура и голос
|
||||
|
||||
- В первых абзацах каждой статьи названы наблюдаемый сбой и цена ложной
|
||||
правки: пустой первый экран, случайное сжатие hero или ложный вывод по
|
||||
серверному ответу.
|
||||
- Изложение не обещает «ускорить страницу» общими словами. Для каждой ветви
|
||||
есть объект проверки: URL в HTML, момент старта на waterfall, участок
|
||||
scripting, CSSOM/layout, decode и screenshot.
|
||||
- Тон намеренно сдержан: автор предлагает короткие local experiments,
|
||||
сохранение условий и обратимые изменения, а не приписывает периоду
|
||||
SLO-платформу или точность современных отчётов.
|
||||
- Все статьи проходят диапазон 5 000–15 000 знаков основного текста до
|
||||
добавления таблиц, кода, SVG и списка источников; это дополнительно
|
||||
проверяет модуль при импорте.
|
||||
- Вердикт: текст прагматичен, технически плотен и не превращает сильный
|
||||
заголовок в скромную заметку без раскрытия.
|
||||
|
||||
## Pass 3 — визуал и выпуск
|
||||
|
||||
- Практика получает схему четырёх дорожек: сеть, JavaScript, CSS и image.
|
||||
Механизм получает граф зависимостей HTML, CSS, JavaScript и hero. Разбор
|
||||
получает дерево диагностики от полезного screenshot к одному эксперименту.
|
||||
- У каждого SVG есть <code>title</code>, <code>desc</code>, содержательный
|
||||
alt в статье и подпись. Все схемы рассчитаны на вертикальное чтение на
|
||||
узкой ширине, без скриптов, внешних изображений и raster-заменителей.
|
||||
- Первый raster-render выявил обрезание длинных нижних подписей и заголовка
|
||||
диагностики. Текст сокращён и перенесён; повторный рендер схем в 1 000 px
|
||||
и 375 px подтвердил отсутствие обрезания, наложения или горизонтального
|
||||
overflow.
|
||||
- В каждой ревизии есть доступная таблица с <code>thead</code> и
|
||||
<code>scope="col"</code>, код, нумерованный маршрут, ранняя постановка
|
||||
проблемы и минимум две первичные/официальные ссылки.
|
||||
- Production build, registry и <code>articles.json</code> намеренно не
|
||||
запускались и не менялись: они относятся к отдельному интеграционному
|
||||
ревью.
|
||||
- Вердикт: пакет готов к независимому draft gate и только после него — к
|
||||
отдельной интеграции.
|
||||
|
||||
## Выполненные проверки
|
||||
|
||||
| Проверка | Команда | Результат |
|
||||
| --- | --- | --- |
|
||||
| Node syntax | <code>node --check scripts/upgrade-2019-08.mjs</code> из <code>web/</code> | успешно |
|
||||
| JSON-only CLI и import-safe export | <code>npm run audit:draft -- scripts/upgrade-2019-08.mjs</code> из <code>web/</code> | успешно: 11 958, 11 919 и 12 638 знаков body по gate |
|
||||
| Controlled fixture | <code>node scripts/upgrade-2019-08.mjs --run-fixture</code> из <code>web/</code> | успешно: четыре владельца, 210 000 bytes, 480 ms как сумма самостоятельных fixture-длительностей |
|
||||
| XML | <code>xmllint --noout public/assets/editorial/2019/frontend-loading-profile-2019.svg public/assets/editorial/2019/frontend-critical-path-2019.svg public/assets/editorial/2019/frontend-performance-diagnosis-2019.svg</code> из <code>web/</code> | успешно |
|
||||
|
||||
## Выпусковой вердикт
|
||||
|
||||
Черновой пакет прошёл независимые syntax, draft gate, fixture и XML-проверки.
|
||||
После подключения registry основной редактор повторил strict audit: все три
|
||||
slug прошли объём 11 958 / 11 919 / 12 638 знаков, figure, таблицы, код,
|
||||
маршруты и источники. <code>npm run build</code> завершился с кодом 0 и
|
||||
сгенерировал 374 статические страницы.
|
||||
|
||||
Выпусковой вердикт: **принят к публикации**. <code>articles.json</code> не
|
||||
менялся; registry заменяет только редакционные поля по стабильному slug.
|
||||
Reference in New Issue
Block a user