Files
progcode/editorial/reviews/2018-10-2019-01-draft.md
huncode c72a72b8f3
Build and deploy / deploy (push) Successful in 14s
revise late 2018 editorial articles
2026-07-31 10:09:53 +03:00

153 lines
11 KiB
Markdown
Raw Permalink 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.
# П09 · 2018-10 → 2019-01 · тройное ревью и выпускной gate
Статус: **принят в публикационный слой 31 июля 2026 года**. Ревизии
накладываются только по стабильному slug: дата и автор остаются данными
базового архива, поэтому выпуск не подменяет хронологию.
Пакет сохраняет два существующих slug октября 2018 года и один slug января
2019 года. В нём нет выдуманной третьей октябрьской статьи.
| Slug | Дата и голос | Главный вопрос | Основной текст |
| --- | --- | --- | ---: |
| editorial-2018-10-mechanism-image-workflow | 2018, М1 | Кто владеет файлом на пути от preview до PREVIEW_PICTURE | 7 535 |
| editorial-2018-10-field-image-workflow | 2018, М1 | Как договорить legacy-форму, FileInput и серверное сохранение | 8 297 |
| editorial-2019-01-mechanism-jquery-webpack | 2019, М2 | Почему старый jQuery-плагин ломается только в production | 8 585 |
Все значения выше получены тем же правилом, что использует редакционный
аудит: без раздела «Проверяемые источники», с видимым текстом таблиц и
примеров.
## 1. Факты и техника
### Проверены источники
- **Bitrix.** Официальные страницы FileInput, CFile::SaveFile,
CFile::MakeFileArray и CIBlockElement::Update подтверждают используемые
методы, файловый массив, ID файла, булев результат Update() и LAST_ERROR.
Отдельно сверено, что MakeFileArray принимает ID файла.
- **PHP.** Официальные страницы $_FILES и move_uploaded_file задают границу
HTTP POST upload. В статьях не заявляется, что browser preview является
сохранённым файлом.
- **jQuery.** Официальная документация .on() подтверждает делегирование к
существующему контейнеру и event namespace; .ready() — запуск работы после
готовности DOM.
- **Webpack.** Официальные документы Shimming, ProvidePlugin, migration to v4
и SplitChunksPlugin подтверждают различие свободного идентификатора и
глобальной зависимости, а также переход к optimization.splitChunks в
Webpack 4.
### Проверен механизм
- У 2018-статей отделены UI-контрол, файловый массив запроса, запись b_file и
поле элемента. Код не считает успехом один только preview или один только ID
файла.
- В field-статье конфликт «новый файл + удаление» завершает запрос понятной
ошибкой; ветка «без файла» не удаляет картинку по состоянию DOM.
- В статье 2019 года ProvidePlugin не выдан за универсальную настройку window.
Bootstrap сначала назначает window.jQuery, затем делает runtime require
legacy-плагина.
- Минимальный ESM-прогон подтвердил предпосылку о порядке: зависимость
исполняется до тела импортирующего модуля. Результат:
["dependency","module body"].
### Команды и результаты
node --check web/scripts/upgrade-2018-10-2019-01.mjs
# exit 0
node --input-type=module -e '<минимальный data: ESM сценарий>'
# ["dependency","module body"]
node web/scripts/audit-editorial-draft.mjs web/scripts/upgrade-2018-10-2019-01.mjs
# PASS editorial-2018-10-mechanism-image-workflow: 7535 body chars
# PASS editorial-2018-10-field-image-workflow: 8297 body chars
# PASS editorial-2019-01-mechanism-jquery-webpack: 8585 body chars
Вердикт: **пройдено**. Все три материала имеют 2+ первичных источника,
воспроизводимые примеры и явные версионные/проектные оговорки. Размеры и
лимиты в коде названы проектными, а не универсальными.
## 2. Редактура и голос
### Проверены начало, плотность и язык
- В первых двух предложениях каждой статьи есть симптом и цена ошибки:
старая обложка каталога, лишние не связанные файлы, неработающая production
форма.
- Все статьи используют маршрут «симптом → причина → проверка → действие».
Каждый раздел заканчивается проверяемым следствием или ограничением.
- В 2018 году сохраняется М1: короткие шаги, «я бы проверил», локальная
граница PHP/Bitrix и осторожный вывод. Нет ретроспективных SLO, Kubernetes,
incident command или модной терминологии вместо действия.
- Январь 2019 года делает только следующий правдоподобный шаг к М2: модуль,
entry, chunk, production-артефакт, stats.json и граница между глобалом и
compiled source. Это развитие из предыдущих статей о jQuery/Webpack, а не
скачок к архитектурной декларации.
- Проверка черновика не нашла шаблонных оборотов из quality gate, следов
генерации, пустых alt, короткого тела, нецелевых slug или изменения даты и
автора.
### Редакторские решения
1. В первой 2018-статье отказался от обещания «правильно настроить загрузку
вообще»: текст отвечает только на вопрос о владельце состояния.
2. Во второй 2018-статье не смешал обработчик .on() с серверной логикой:
jQuery отвечает за статус, сервер — за файл и карточку.
3. В январской статье не приписал Webpack фиксированные имена chunks и не
назвал отключение splitChunks решением. Вместо этого оставлен путь к
фактическому stats.json и production HTML.
Вердикт: **пройдено**. Плотность текста соответствует диапазону 5–15 тыс.
знаков, стиль движется от М1 к М2 без анахронизма.
## 3. Визуал и выпуск
### Проверка схем
Созданы три самостоятельные SVG с role="img", title, desc, осмысленными alt
в статье и подписью figure:
- bitrix-file-state-ownership-2018.svg — четыре состояния файла;
- legacy-photo-form-contract-2018.svg — договор DOM, multipart POST и
серверной ветки;
- webpack-jquery-order-2019.svg — порядок bootstrap/require и плохая ветка
static import.
xmllint --noout \
web/public/assets/editorial/2018/bitrix-file-state-ownership-2018.svg \
web/public/assets/editorial/2018/legacy-photo-form-contract-2018.svg \
web/public/assets/editorial/2019/webpack-jquery-order-2019.svg
# exit 0
Сначала схемы были широкими и на viewport 375 px текст становился слишком
мелким. Визуальная проверка это выявила до выпуска. Схемы переделаны в
вертикальные: на 375×812 все карточки, стрелки и подписи читаются без
горизонтального скролла. На desktop ширина страницы не превышает viewport:
scrollWidth = 1280, clientWidth = 1280 у каждого SVG.
### Выпусковой контракт
- CLI вызов скрипта вернул exit 0, пустой stderr и ровно три JSON-ревизии.
- Import скрипта безопасен: не пишет файлы и не выводит текст; его массив
совпал с массивом, полученным через CLI.
- audit-editorial-draft.mjs подтвердил exact slug, длины, 5+ разделов,
figure/alt/figcaption, table/thead, код, ol, источники и отсутствие
изменения date/author.
- При просмотре raw SVG браузер повторял внутреннюю ошибку
Cannot use 'in' operator to search for 'animation' in undefined. Та же
ошибка воспроизвелась на старом
/assets/illustrations/jquery-webpack.svg; у новых SVG нет скриптов, поэтому
ошибка не отнесена к черновику.
После интеграции основной редактор повторно прогнал оба уровня проверки:
- `npm run audit:draft -- scripts/upgrade-2018-10-2019-01.mjs` подтвердил
три ревизии: 7 535 / 8 297 / 8 585 знаков тела;
- строгий аудит опубликованного слоя подтвердил для каждой статьи figure,
table, code, маршрут действий, источники и требования к голосу;
- `xmllint --noout` принял все три SVG;
- `npm run build` завершился с кодом 0 и сгенерировал 374 статические страницы.
Вердикт: **принят к публикации**. Изменения `articles.json` не требуются:
revisions registry подменяет только редакционные поля по стабильному slug.