# Автономное тройное ревью П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**.