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

11 KiB
Raw Permalink Blame History

П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.