20 KiB
Автономное тройное ревью П46 · декабрь 2021 · «Архитектурный разбор решения»
Статус: авторское тройное ревью пройдено; пакет намеренно не подключён к registry и не опубликован.
Пакет заменяет content ровно для трёх стабильных slug:
editorial-2021-12-practice-architecture-review;editorial-2021-12-mechanism-architecture-review;editorial-2021-12-field-architecture-review.
Созданы только пять разрешённых sidecar-файлов:
web/scripts/upgrade-2021-12.mjs;editorial/reviews/2021-12-draft.md;web/public/assets/editorial/2021/architecture-review-context-2021.svg;web/public/assets/editorial/2021/architecture-review-decision-2021.svg;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:
- существуют три сравниваемых варианта;
- synchronous write + projection имеет declared gaps;
- outbox закрывает данный brief;
- synchronous query имеет independent-read gap;
- assumption не является evidence;
- evidence привязано к brief;
- assumption не принимает decision;
- declared decision accepted только для training;
- выбран именно transactional outbox;
- decision записывается до write;
- локальная модель создаёт note и intent парой;
- результат не называет себя distributed transaction;
- pending intent получает non-destructive diagnosis;
- relay создаёт одну projection с intent key;
- duplicate relay подавляется ключом;
- ready projection имеет non-destructive diagnosis;
- неизвестный вариант остаётся 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 | Архивный снимок официального сайта существует до конца декабря 2021 и содержит контекст уровней C4 | SVG использует только явные границы состояния; не заявляет C4-conformance или использование конкретного tooling |
| RFC 2119 | IETF BCP 14, март 1997; документ определяет MUST/SHOULD/MAY для требований | Нормативные слова применяются к учебному brief, а не к чужой реализации |
| AWS What’s New, 15 января 2021 и Builders’ Library | Официальная запись подтверждает публикацию статьи до декабря 2021; статья разделяет retry и нежелательные side effects | Локальный intent key не выдаётся за AWS API, ClientToken, TTL или сетевую idempotency policy |
| Transactional outbox snapshot, 18 ноября 2021 | Заархивированная авторская страница до конца 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.