Files
huncode 35769c4149
Build and deploy / deploy (push) Successful in 16s
revise August 2021 storage contract articles
2026-07-31 13:02:44 +03:00

13 KiB
Raw Permalink Blame History

Автономное тройное ревью П42 · август 2021 · «Контракт хранилища»

Статус: принята к публикации после независимой интеграции. Изначально registry и Git автономным пакетом не менялись.

Пакет заменяет через overlay только три стабильных slug:

  • editorial-2021-08-practice-storage-contracts;
  • editorial-2021-08-mechanism-storage-contracts;
  • editorial-2021-08-field-storage-contracts.

Созданы ровно пять файлов П42:

  • web/scripts/upgrade-2021-08.mjs;
  • web/public/assets/editorial/2021/storage-contract-compatibility-2021.svg;
  • web/public/assets/editorial/2021/storage-contract-evolution-2021.svg;
  • web/public/assets/editorial/2021/storage-contract-diagnosis-2021.svg;
  • этот документ.

Revision-модуль экспортирует только изменяемые редакционные поля. В нём нет date, author, registry import или изменения articles.json. Fixture использует только Array, Map и objects в одном Node-процессе; не запускает БД, broker, реальные файлы, сеть, provider, миграционный job или сервис.

Проход 1. Структура, тон и объём — пройдено

Revision Ситуация и цена в первых двух абзацах M4 и практическая граница Объём body
Практика Новый timezone смешивается с absent/null; цена — запись, которую старый reader трактует иначе owner, поддержка старых pair и reader-before-writer rollout 10 574 знака body
Механизм Reader принял форму, но не смог объяснить значение; цена — закреплённая догадка вместо договора type, presence, narrowing и semantic break разделены 11 259 знаков body
Полевой разбор Reader упал после записи; цена — потеря evidence при поспешном rollback evidence, stop criterion и rollback-safe действия 10 349 знаков body
  • У всех трёх текстов есть ситуация и стоимость ошибки в первых двух абзацах, таблица, привязанный SVG с содержательными alt/figcaption, рабочие JS-фрагменты, нумерованный маршрут, ограничения и отдельный раздел источников.
  • Голос М4 августа 2021 года: короткая инженерная речь «симптом → причина → проверка → действие», явный owner и граница между reader, writer и contract. Текст не изображает автора владельцем platform/SLA или реальной migration program.
  • Удалены универсальные формулы о «современном подходе»: каждое обобщение привязано к profile.settings, matrix или fixture.

Вердикт: пройден. audit:draft подтвердил диапазон 5 000–15 000 знаков и наличие sections, table, figure, code, route, sources и локального asset у каждого revision.

Проход 2. Техника, source boundaries и fixture — пройдено

Граница Что утверждает пакет Как это проверяется Чего пакет не утверждает
JSON object reader читает именованные key, а не их позицию reordered v2 record даёт тот же нормализованный result одинаковый порядок во всех parser или storage
Optional field absent, null и строка — разные states v1 → v2 даёт absent; v2 clear даёт explicit-null absent всегда должен означать clear
Additive change v2 добавляет only optional timezone v2 writer → v1 reader и v1 writer → v2 reader зелёные в matrix любой новый key безопасен для любого consumer
Breaking changes narrowing, semantic change и required timezone отвергаются три отдельные negative matrix assertions generic JSON сам даёт эволюционную совместимость

Первичные и официальные источники ограничивают историческую рамку:

  • RFC 8259 для JSON object, literal null и отсутствия переносимого договора о порядке object members;
  • JSON Schema draft 2019-09 Validation, официальный опубликованный Draft от 17 сентября 2019 года (не IETF RFC), для vocabulary structural assertions и типа null;
  • Apache Avro 1.10.2 Specification для ограниченного, форматно-зависимого примера writer/reader schema resolution.

runStorageContractFixture() создаёт v1, additive v2, v2 clear, legacy daily, type error и семь направлений matrix. Она требует тринадцать истинных assertions: v1/v2 reads, additive direction, absent versus explicit null, order independence, required-field rejection, type rejection, narrowing, semantic and presence break. Функция не вызывает файловую систему, сеть, БД, broker или внешний API.

Вердикт: пройден. Технические claims ограничены fixture и указанными документами; format-specific Avro rules не переносятся на generic JSON.

Проход 3. Фактическая точность, SVG и preflight — пройдено

  • Во всех SVG есть title, desc и role="img". В схемах показаны только contract-level шаги: compatibility directions, reader-before-writer evolution и diagnostic tree. Статическая safety-проверка не нашла script, foreignObject, внешние asset URL или raster data URI. Тексты, стрелки и карточки рассчитаны на статичный просмотр, а не заменяют browser или screen-reader проверку.
  • Первый Sharp-рендер обнаружил два настоящих дефекта: длинная подпись выходила за правую границу в evolution SVG, а четыре узкие ветви diagnosis SVG плохо читались на 375 px. Заголовок и нижняя подпись evolution сокращены; diagnosis перестроен в четыре широкие карточки. После правки повторный 375 px рендер просмотрен вручную: clipping, overlap и horizontal overflow внутри трёх схем не обнаружены.

Команды preflight

cd web && node --check scripts/upgrade-2021-08.mjs
cd web && npm run audit:draft -- scripts/upgrade-2021-08.mjs
cd web && node scripts/upgrade-2021-08.mjs --verify-fixture
cd web && xmllint --noout \
  public/assets/editorial/2021/storage-contract-compatibility-2021.svg \
  public/assets/editorial/2021/storage-contract-evolution-2021.svg \
  public/assets/editorial/2021/storage-contract-diagnosis-2021.svg

Финальные фактические результаты

Проверки выполнены 31 июля 2026 года после всех правок:

Проверка Реальный результат
node --check PASS, code 0
npm run audit:draft PASS: 10 574 / 11 259 / 10 349 знаков body; у всех трёх slug есть table, figure, code, route, sources и локальный SVG
In-memory fixture PASS: 13/13 assertions истинны; зелёные v1/v2 направления и три отрицательные matrix-пары проверены
xmllint --noout PASS, три SVG — корректный XML
SVG safety scan PASS: не найдены active tags, foreignObject, внешние assets или raster data URI
Sharp mobile preflight PASS: три финальных PNG шириной 375 px вручную просмотрены после правки; нет clipping, overlap или horizontal overflow
Scope/self-review PASS: П42 создала только пять разрешённых файлов; registry, README, articles.json, audit scripts, общие правила/очередь и Git не менялись; mascot PNG не затрагивались

npm run audit:draft вывела старые предупреждения пользовательской конфигурации npm о store-dir, cache-dir и public-hoist-pattern. Они не относятся к П42 и не изменялись.

Integration registry audit, production build, browser, реальное storage, migration, CI, commit и push намеренно не запускались: они находятся за границей автономной П42.

Выпусковой вердикт автономной партии: готова к независимой интеграции.

Независимая редактура и интеграция · 31 июля 2026

Основной редактор провёл ещё один технический и исторический проход.

  1. Assertion genericJsonDoesNotBypassTheContract дублировал проверку timezone: 3. Его заменили на отдельный случай: синтаксически корректное JSON-значение emailDigest: "hourly" не входит в договор и отклоняется reader v1. Так fixture различает форму JSON и доменное перечисление, не увеличивая формальное число assertions.
  2. Источник JSON Schema уточнён как официальный опубликованный Draft 2019-09 от 17 сентября 2019 года, а не IETF RFC. Avro 1.10.2 дополнительно сверена по официальному анонсу выпуска от 15 марта 2021 года. Оба источника существовали к августу 2021-го; правила Avro по-прежнему не переносятся на generic JSON.
  3. Все три SVG повторно просмотрены после независимого Sharp-рендера на 375 px: читабельны направления совместимости, порядок rollout и четыре ветви диагностики; clipping, overlap и overflow не обнаружены.
Проверка Результат независимого прохода
node --check и draft gate PASS: 10 574 / 11 259 / 10 349 знаков body
Fixture PASS: 13/13; есть отдельные проверки absent/null, type, допустимого формата с недопустимым enum, narrowing, semantic и presence break
xmllint и SVG safety scan PASS: три XML-диаграммы корректны; не найдены script, foreignObject, внешние URL или raster data URI
Strict audit через registry PASS: 1 figure, 2 table и 3–4 code examples в каждой revision; объёмы 10 574 / 11 259 / 10 349
Production build PASS: Next.js сгенерировал 374 статические страницы

Три revision подключены к web/data/editorial-revisions.mjs; архив остаётся владельцем stable slug, даты и автора. После интеграции строгий охват — 130 из 358, осталось 228 материалов.

Финальный вердикт: ACCEPTED FOR PUBLICATION.