This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# П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.
|
||||
Reference in New Issue
Block a user