revise December 2021 architecture review articles
Build and deploy / deploy (push) Successful in 16s
Build and deploy / deploy (push) Successful in 16s
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Производство редакционных партий
|
||||
|
||||
На 31 июля 2026 года строгий аудит проходит 139 из 358 созданных материалов. Остальные 219 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
На 31 июля 2026 года строгий аудит проходит 142 из 358 созданных материалов. Остальные 216 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
|
||||
|
||||
## Одна партия
|
||||
|
||||
|
||||
@@ -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 '<(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**.
|
||||
Reference in New Issue
Block a user