revise December 2021 architecture review articles
Build and deploy / deploy (push) Successful in 16s

This commit is contained in:
2026-07-31 13:25:10 +03:00
parent d6f5767f2a
commit 15a25c35d3
7 changed files with 1123 additions and 1 deletions
+238
View File
@@ -0,0 +1,238 @@
# Автономное тройное ревью П46 · декабрь 2021 · «Архитектурный разбор решения»
Статус: **авторское тройное ревью пройдено; пакет намеренно не подключён к
registry и не опубликован**.
Пакет заменяет content ровно для трёх стабильных slug:
- <code>editorial-2021-12-practice-architecture-review</code>;
- <code>editorial-2021-12-mechanism-architecture-review</code>;
- <code>editorial-2021-12-field-architecture-review</code>.
Созданы только пять разрешённых sidecar-файлов:
1. <code>web/scripts/upgrade-2021-12.mjs</code>;
2. <code>editorial/reviews/2021-12-draft.md</code>;
3. <code>web/public/assets/editorial/2021/architecture-review-context-2021.svg</code>;
4. <code>web/public/assets/editorial/2021/architecture-review-decision-2021.svg</code>;
5. <code>web/public/assets/editorial/2021/architecture-review-diagnosis-2021.svg</code>.
Revision export содержит только <code>slug</code>, <code>title</code>,
<code>categories</code>, <code>cover</code>, <code>excerpt</code>,
<code>readingMinutes</code> и <code>contentHtml</code>. Полей
<code>date</code>/<code>author</code> нет. Скрипт import-safe: при import не
пишет файлы и не выполняет сетевых запросов; <code>--print-revisions</code>
печатает тот же JSON, который экспортирует модуль. Registry, README,
<code>articles.json</code>, очередь, 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 тыс. знаков.
- В каждой статье есть шесть или больше смысловых <code>h2</code>, доступная
table с <code>caption</code>/<code>thead</code>, свой figure с
осмысленными <code>alt</code>/<code>figcaption</code>, несколько 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 | Причина |
| --- | --- | --- |
| <code>synchronous-write-projection</code> | review-needed | Не закрывает отдельный recorded intent и явную delayed-read границу |
| <code>transactional-outbox</code> | accepted-for-training | Закрывает пять заданных требований учебной модели |
| <code>synchronous-query-model</code> | review-needed | Не закрывает independent public read |
<code>trainingEvidence</code> и <code>trainingAssumption</code> имеют разные
типы. Assumption о локальной паре Map не может принять решение вместо
evidence. <code>commitTrainingPublication()</code> копирует две Map как
детерминированную проверку policy, а комментарий и тексты прямо исключают
вывод об atomicity между БД, broker, HTTP, процессами или машинами.
<code>runArchitectureReviewFixture()</code> выполняет **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:
<code>decidePublicationArchitecture</code>,
<code>compareArchitectureOptions</code>,
<code>createArchitectureTrainingState</code>,
<code>recordTrainingDecision</code>,
<code>commitTrainingPublication</code>,
<code>relayTrainingPublication</code>,
<code>diagnoseTrainingPublication</code> и
<code>runArchitectureReviewFixture</code>.
Вердикт прохода: **пройден**. 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 имеют <code>title</code>, <code>desc</code>,
<code>role="img"</code> и локальные 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.
- Не используются <code>script</code>, <code>foreignObject</code>,
<code>image</code>, <code>use</code>, external href/src или raster data.
### Фактически выполненные проверки
Команды запускались из <code>web/</code> после финальной правки:
<pre><code>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 '&lt;(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</code></pre>
| Проверка | Реальный результат |
| --- | --- |
| <code>node --check</code> | 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 истинны |
| <code>xmllint --noout</code> | 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 операции не выполнены автономным пакетом |
<code>npm</code> показал уже существующие предупреждения о пользовательских
<code>store-dir</code>, <code>cache-dir</code> и
<code>public-hoist-pattern</code>; пакет их не менял, команда завершилась с
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 и используются
только в названной границе.
- Повторные <code>node --check</code> и draft audit прошли. Основной объём
составляет 10 982, 10 827 и 11 028 знаков. Fixture дал 17 из 17 истинных
assertions: сравнил три варианта по explicit requirements, отделил
assumption от evidence, записал decision перед note/intent, подавил
duplicate relay и сохранил все diagnostic actions недеструктивными. Его
boundary остаётся явной: локальные <code>Map</code>, не БД, broker, сеть,
distributed transaction или production approval.
- После подключения overlay адресный strict audit прошёл для всех трёх slug:
у каждой статьи по 1 figure, 1 table и 4–5 code examples. В registry 133
revision, из них ровно три декабрьские; duplicate slug нет, полей
<code>date</code>/<code>author</code> в 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: нет <code>script</code>, <code>foreignObject</code>, raster,
external href или data URI. Все три файла отрендерены Sharp в ширину 375 px
и вручную просмотрены: владельцы, gaps, ключи и non-destructive branches
читаемы без clipping/overlap.
- <code>npm run build</code> завершилась с code 0 и сгенерировала 374
статические страницы; <code>git diff --check</code> прошёл. Обычные npm
warnings о пользовательских <code>store-dir</code>, <code>cache-dir</code>
и <code>public-hoist-pattern</code> не менялись этой партией.
Итог: декабрьские статьи заменяют архивные записи через overlay. После этой
интеграции строгий аудит проходит **142 из 358**, остаётся **216**.