# Автономное тройное ревью П46 · декабрь 2021 · «Архитектурный разбор решения» Статус: **авторское тройное ревью пройдено; пакет намеренно не подключён к registry и не опубликован**. Пакет заменяет content ровно для трёх стабильных slug: - editorial-2021-12-practice-architecture-review; - editorial-2021-12-mechanism-architecture-review; - editorial-2021-12-field-architecture-review. Созданы только пять разрешённых sidecar-файлов: 1. web/scripts/upgrade-2021-12.mjs; 2. editorial/reviews/2021-12-draft.md; 3. web/public/assets/editorial/2021/architecture-review-context-2021.svg; 4. web/public/assets/editorial/2021/architecture-review-decision-2021.svg; 5. web/public/assets/editorial/2021/architecture-review-diagnosis-2021.svg. Revision export содержит только slug, title, categories, cover, excerpt, readingMinutes и contentHtml. Полей date/author нет. Скрипт import-safe: при import не пишет файлы и не выполняет сетевых запросов; --print-revisions печатает тот же JSON, который экспортирует модуль. Registry, README, articles.json, очередь, production build и Git этим пакетом не менялись. ## Проход 1. Стиль, объём, структура и голос М4 — пройдено | Revision | Проблема и цена в первых двух абзацах | Body | Фокус без дублирования | | --- | --- | ---: | --- | | Практика | Три способа публикации выглядят одинаково до первого partial failure; цена — нельзя доказать источник, intent и безопасный повтор | **10 982** | Сформулировать brief, сравнить варианты по инвариантам и выбрать обратимую границу | | Механизм | Стрелка на схеме читается как атомарная разными людьми; цена — реализация не отделяет obligation от случайной детали | **10 804** | Показать contract decision: requirements, gaps, evidence, assumption, ключ и diagnostic states | | Полевой разбор | Note существует, но public read её не подтверждает; цена — destructive recreate или анонимный replay стирает исходный след | **10 986** | Пройти диагноз от decision к note, intent, projection и read contract без уничтожения source | - Все три текста лежат в заказанном диапазоне **9–11 тыс. знаков body** и обязательном редакционном диапазоне 5–15 тыс. знаков. - В каждой статье есть шесть или больше смысловых h2, доступная table с caption/thead, свой figure с осмысленными alt/figcaption, несколько code fragments, нумерованный маршрут и раздел «Проверяемые источники». - Язык держит порядок «симптом → граница причины → проверка → действие». Риторика не обещает универсальный outbox: synchronous write + projection и synchronous query model оставлены допустимыми вариантами, но с явными gaps для данного учебного brief. - Голос М4 продолжает темы 2021 года: contracts, queues, consistency, locks, event-driven, search, storage, API versioning, runtime и load testing. Автор уже связывает write/read owners, evidence, replay key и reversibility, но не приписывает себе организационные метрики, реальную команду или опыт эксплуатации несуществующей платформы. - Отдельно удалены шаблонные усилители и анахронизмы: нет claims о production SLO, incident, access к системам, completed migration, broker semantics или distributed transaction. Вердикт прохода: **пройден**. Три текста связаны одним учебным кейсом, но отвечают на разные вопросы: выбор, механизм и безопасная диагностика. ## Проход 2. Технологии и fixture assertions — пройдено Учебный brief требует каноническую запись, recorded publication intent, независимое public read, явно допустимую задержку и replay key. Он явно исключает distributed transaction, выбор облака, брокера и production SLO. Fixture сравнивает три варианта: | Вариант | Итог для этого brief | Причина | | --- | --- | --- | | synchronous-write-projection | review-needed | Не закрывает отдельный recorded intent и явную delayed-read границу | | transactional-outbox | accepted-for-training | Закрывает пять заданных требований учебной модели | | synchronous-query-model | review-needed | Не закрывает independent public read | trainingEvidence и trainingAssumption имеют разные типы. Assumption о локальной паре Map не может принять решение вместо evidence. commitTrainingPublication() копирует две Map как детерминированную проверку policy, а комментарий и тексты прямо исключают вывод об atomicity между БД, broker, HTTP, процессами или машинами. runArchitectureReviewFixture() выполняет **17 assertions**: 1. существуют три сравниваемых варианта; 2. synchronous write + projection имеет declared gaps; 3. outbox закрывает данный brief; 4. synchronous query имеет independent-read gap; 5. assumption не является evidence; 6. evidence привязано к brief; 7. assumption не принимает decision; 8. declared decision accepted только для training; 9. выбран именно transactional outbox; 10. decision записывается до write; 11. локальная модель создаёт note и intent парой; 12. результат не называет себя distributed transaction; 13. pending intent получает non-destructive diagnosis; 14. relay создаёт одну projection с intent key; 15. duplicate relay подавляется ключом; 16. ready projection имеет non-destructive diagnosis; 17. неизвестный вариант остаётся review-needed. Code fragments в трёх статьях сверены с export функции fixture: decidePublicationArchitecture, compareArchitectureOptions, createArchitectureTrainingState, recordTrainingDecision, commitTrainingPublication, relayTrainingPublication, diagnoseTrainingPublication и runArchitectureReviewFixture. Вердикт прохода: **пройден**. Fixture подтверждает только названные инварианты локальной модели; она не выполняет network I/O, persistence, consumer delivery, real retry, внешние effect, recovery или production test. ## Проход 3. Источники, историческая точность и SVG — пройдено | Источник | Проверенный факт и дата | Граница использования | | --- | --- | --- | | [C4 model snapshot, 1 декабря 2021](https://web.archive.org/web/20211201095833/https://c4model.com/) | Архивный снимок официального сайта существует до конца декабря 2021 и содержит контекст уровней C4 | SVG использует только явные границы состояния; не заявляет C4-conformance или использование конкретного tooling | | [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119.html) | IETF BCP 14, март 1997; документ определяет MUST/SHOULD/MAY для требований | Нормативные слова применяются к учебному brief, а не к чужой реализации | | [AWS What’s New, 15 января 2021](https://aws.amazon.com/about-aws/whats-new/2021/01/new-abl-article-making-retries-safe-with-idempotent-APIs/) и [Builders’ Library](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/) | Официальная запись подтверждает публикацию статьи до декабря 2021; статья разделяет retry и нежелательные side effects | Локальный intent key не выдаётся за AWS API, ClientToken, TTL или сетевую idempotency policy | | [Transactional outbox snapshot, 18 ноября 2021](https://web.archive.org/web/20211118092826/https://microservices.io/patterns/data/transactional-outbox.html) | Заархивированная авторская страница до конца 2021 описывает запись сообщения рядом с данными и отдельный message relay | Источник задаёт терминологию паттерна; fixture не является БД, broker, 2PC или exactly-once delivery | Факт-чек не полагается на будущие версии: C4 и transactional outbox привязаны к архивным снимкам до конца 2021, AWS публикации — к официальным датированным страницам, RFC — к фиксированной редакции 1997 года. В тексте нет ссылки на источник или версию, появившиеся после исторической границы декабря 2021. SVG review: - Все три SVG имеют title, desc, role="img" и локальные vector-only элементы. - Context SVG показывает владельцев note, intent, relay и public projection, отдельно выделяя evidence и assumption. - Decision SVG показывает brief, три варианта, gaps и accepted training decision без ложного score. - Diagnosis SVG показывает путь decision → note → intent → projection и недеструктивные действия; после визуального прохода нижняя карточка была разбита на две строки, чтобы исключить clipping на 375 px. - Не используются script, foreignObject, image, use, external href/src или raster data. ### Фактически выполненные проверки Команды запускались из web/ после финальной правки:
node --check scripts/upgrade-2021-12.mjs
npm run audit:draft -- scripts/upgrade-2021-12.mjs
node scripts/upgrade-2021-12.mjs --verify-fixture
xmllint --noout \
  public/assets/editorial/2021/architecture-review-context-2021.svg \
  public/assets/editorial/2021/architecture-review-decision-2021.svg \
  public/assets/editorial/2021/architecture-review-diagnosis-2021.svg
! rg -n -i '<(script|foreignObject|image|use)\\b|(?:xlink:)?href=|\\bsrc=|data:' \
  public/assets/editorial/2021/architecture-review-context-2021.svg \
  public/assets/editorial/2021/architecture-review-decision-2021.svg \
  public/assets/editorial/2021/architecture-review-diagnosis-2021.svg
| Проверка | Реальный результат | | --- | --- | | node --check | PASS, code 0 | | Import-safe export и draft gate | PASS: ровно три stable revision; **10 982 / 10 804 / 10 986** body chars; найдены sections, tables, figures, code, routes, sources и локальные visual assets | | In-memory fixture | PASS: **17/17** assertions истинны | | xmllint --noout | PASS: три SVG — корректный XML | | SVG safety scan | PASS: не найдены active element, external asset или raster data | | Sharp mobile preflight | PASS: три PNG шириной 375 px отрендерены и просмотрены вручную; контекст, выбранный вариант, ветви диагноза и подписи читаются; после одной правки нет clipping, overlap или horizontal overflow | | Scope | PASS: создано ровно пять разрешённых файлов; никаких изменений registry, README, archive, package config или Git операции не выполнены автономным пакетом | npm показал уже существующие предупреждения о пользовательских store-dir, cache-dir и public-hoist-pattern; пакет их не менял, команда завершилась с code 0. Не запускались: strict audit после подключения к registry, production build, browser, screen reader, CI, deployment, database, broker, HTTP, external API, commit, push и публикация. Это намеренная граница автономного sidecar-этапа. ## Итог Три self-review завершены: редакционный, технический и источник/визуал. П46 готов к отдельной независимой интеграционной приёмке. До неё модуль не изменяет опубликованный архив и не делает утверждений о production-системе. ## Независимое редакторское ревью и интеграция Статус: **принято и подключено в editorial overlay 31 июля 2026 года**. ### 1. Факты и техника - Независимый факт-чек обнаружил существенную историческую проблему: текущая AWS Architecture Blog страница датирована 17 декабря 2021 года, но в доступном снимке от 18 декабря 2021 ещё не содержит transactional outbox. Поэтому она не могла поддерживать соответствующий claim и была полностью исключена из пакета. Вместо неё использован заархивированный снимок авторской страницы Transactional outbox от 18 ноября 2021: в нём явно описаны запись сообщения рядом с данными и отдельный message relay. Это исправление не меняет fixture и не превращает паттерн в рекомендацию для каждого проекта. - Проверен также C4 snapshot от 1 декабря 2021: в нём перечислены context, container, component и code. RFC 2119 действительно имеет дату марта 1997, а официальная AWS публикационная запись — 15 января 2021. Все источники теперь существуют до исторической границы декабря 2021 и используются только в названной границе. - Повторные node --check и draft audit прошли. Основной объём составляет 10 982, 10 827 и 11 028 знаков. Fixture дал 17 из 17 истинных assertions: сравнил три варианта по explicit requirements, отделил assumption от evidence, записал decision перед note/intent, подавил duplicate relay и сохранил все diagnostic actions недеструктивными. Его boundary остаётся явной: локальные Map, не БД, broker, сеть, distributed transaction или production approval. - После подключения overlay адресный strict audit прошёл для всех трёх slug: у каждой статьи по 1 figure, 1 table и 4–5 code examples. В registry 133 revision, из них ровно три декабрьские; duplicate slug нет, полей date/author в overlay нет. ### 2. Редактура и голос - Три статьи перечитаны после source correction. Они не объявляют outbox универсальным: два других варианта остаются допустимыми вне данного brief, а цена выбранного пути названа через дополнительные состояния, relay и replay key. Статьи не фабрикуют SLO, команду, инцидент, broker semantics или гарантию exactly-once. - Голос соответствует концу 2021: автор связывает contracts, consistency и обратимость, но каждый вывод привязывает к одному учебному flow и следующей проверке. Абстрактные слова раскрыты через requirements, Map state и diagnostic stage. ### 3. Визуал и выпуск - Context, decision и diagnosis SVG повторно прошли XML-проверку и safety scan: нет script, foreignObject, raster, external href или data URI. Все три файла отрендерены Sharp в ширину 375 px и вручную просмотрены: владельцы, gaps, ключи и non-destructive branches читаемы без clipping/overlap. - npm run build завершилась с code 0 и сгенерировала 374 статические страницы; git diff --check прошёл. Обычные npm warnings о пользовательских store-dir, cache-dir и public-hoist-pattern не менялись этой партией. Итог: декабрьские статьи заменяют архивные записи через overlay. После этой интеграции строгий аудит проходит **142 из 358**, остаётся **216**.