Files
progcode/editorial/reviews/2027-04-draft.md
T
2026-07-31 22:26:56 +03:00

55 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Апрель 2027 — редакторское ревью после переписывания
## Объём партии
- `editorial-2027-04-practice-build-evolution` — 5 508 знаков основного текста;
- `editorial-2027-04-mechanism-build-evolution` — 5 074 знака;
- `editorial-2027-04-field-build-evolution` — 5 488 знаков.
Stable slugs сохранены. Три статьи разбирают разные вопросы frontend-сборки: сравнимость замеров, ключ cache и поиск источника роста bundle.
## Проход 1 — факты, техника, пример и источники
- **Practice.** До: сравнение сборок сводилось к «новый инструмент быстрее». После: `compareBuildRuns()` сначала проверяет `inputFingerprint`, затем считает delta времени и размера. Причина: пример не выдаёт разные входы за один benchmark.
- **Mechanism.** До: cache описывался как общий ускоритель. После: `makeDependencyCacheKey()` включает lockfile, config, runtime и source digest и показывает invalidation при изменении lockfile. Причина: cache получил явный контракт входов.
- **Field.** До: рост bundle предлагалось оценивать по размеру одного файла. После: `summarizeBundleDiff()` сравнивает esbuild-подобные `inputs`, сортирует delta bytes и ведёт к chunk/source map/network. Причина: код показывает конкретный путь от симптома к модулю.
Источники проверены HTTP 200 и применены с границами:
- [webpack Caching Guide](https://webpack.js.org/guides/caching/) — webpack 5 guide, проверен 31 July 2026; contenthash/deterministic ids и условия воспроизводимого output; не даёт данных конкретного проекта.
- [webpack cache configuration](https://webpack.js.org/configuration/cache/) — webpack 5 reference, проверен 31 July 2026; memory/filesystem cache; не знает состояние конкретного CI.
- [esbuild Metafile](https://esbuild.github.io/api/#metafile) — API documentation, проверена 31 July 2026; JSON inputs/outputs/bytes; не измеряет браузерную доставку.
- [Vite dependency pre-bundling](https://vite.dev/guide/dep-pre-bundling.html) — официальное руководство, проверено 31 July 2026; lockfile, config, environment и linked dependency invalidation; относится к Vite optimizer.
- [MDN SourceMap header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/SourceMap) — MDN Web Docs, page modified 21 November 2025; связь DevTools с картой; не подтверждает доступность карты и скорость ресурса.
## Проход 2 — структура, голос, плотность и мета-лексика
- **Practice.** До: первым шёл секундомер. После: первые два абзаца называют разные input/config/cache/output и цену ложного сравнения, а секундомер появляется после условий. Причина: действие поставлено после постановки проблемы.
- **Mechanism.** До: cache hit звучал как доказательство корректного результата. После: отдельные разделы разводят key, invalidation, hit/miss и проверку содержимого output. Причина: техническая речь называет, что именно повторяется.
- **Field.** До: «bundle вырос» сразу вёл к удалению библиотеки. После: текст проходит metafile diff, input, chunk, source map и browser measurement. Причина: каждый шаг сужает место причины и не смешивает bytes с latency.
Запрещённая мета-лексика в body не найдена. В каждой статье есть конкретный reader-facing симптом, стоимость ошибки, объяснение механизма, runnable example, ordered steps, ограничения и следующий шаг. Общих 12-словных фрагментов с январём–мартом нет.
## Проход 3 — визуал, мобильная читаемость, доступность и повторы
- **Practice.** До: timeline показывал редакционную передачу конфигураций. После: SVG показывает input → config → cache → замер → output diff и красную ветку другого fingerprint. Причина: рисунок объясняет условие сравнимости.
- **Mechanism.** До: матрица содержала synthetic shape и статусы отсутствующих данных. После: строки описывают input, config, cache, runner и output; нижняя ветка останавливает несопоставимый замер. Причина: визуал служит cache/benchmark механизму.
- **Field.** До: схема показывала hand-off. После: она сравнивает два metafile, считает delta, ведёт к chunk/map/network и возвращает при несовпадении input. Причина: диаграмма соответствует `summarizeBundleDiff()`.
SVG получили русские title/desc, доступные alt/caption и компактные подписи. Sharp 375 px проверил таблицу, стрелки, красные ветки и отсутствие обрезки. Опасные SVG-элементы и внешние ресурсы отсутствуют.
## Проверки
```text
node --check scripts/upgrade-2027-04.mjs — PASS
node scripts/upgrade-2027-04.mjs --verify-fixture — PASS, 4/4
npm run audit:draft -- scripts/upgrade-2027-04.mjs — PASS, 3/3
локальные build/cache/bundle examples — PASS, 12/12 для всей партии
xmllint --noout для 3 SVG — PASS
SVG safety scan — PASS
Sharp resize width=375 для 3 SVG — PASS; визуально проверены timeline, matrix и bundle loop
strict cross-article scan января–апреля: 12 статей, 66 сравнений, sources excluded, code included — collisions: []
```
Git, registry, README, `articles.json`, приложение и файлы других месяцев не изменялись.