revise March 2021 queue articles
Build and deploy / deploy (push) Successful in 14s

This commit is contained in:
2026-07-31 12:18:44 +03:00
parent e67b416a81
commit 8cdf52e111
7 changed files with 977 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 112 из 358 созданных материалов. Остальные 246 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 115 из 358 созданных материалов. Остальные 243 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+162
View File
@@ -0,0 +1,162 @@
# Автономное тройное ревью П37 · март 2021 · «Очереди задач»
Статус: **принят независимым редактором в выпусковой набор**. Пакет содержит
ровно три revision для стабильных slug:
- <code>editorial-2021-03-practice-queues</code>;
- <code>editorial-2021-03-mechanism-queues</code>;
- <code>editorial-2021-03-field-queues</code>.
Созданы только пять разрешённых файлов П37:
- <code>web/scripts/upgrade-2021-03.mjs</code>;
- <code>web/public/assets/editorial/2021/queue-message-lifecycle-2021.svg</code>;
- <code>web/public/assets/editorial/2021/queue-delivery-guarantees-2021.svg</code>;
- <code>web/public/assets/editorial/2021/queue-poison-diagnosis-2021.svg</code>;
- этот документ.
Revision-модуль экспортирует только изменяемые редакционные поля. В нём нет
<code>date</code>, <code>author</code> или подключения registry.
<code>articles.json</code>, README, очередь, package config и Git не
изменялись. Команда <code>--print-revisions</code> печатает JSON из
import-safe export; <code>--verify-fixture</code> выполняет контролируемую
проверку только в памяти.
## Проход 1. Факты и историческая рамка — пройдено
| Утверждение | Первичный или официальный источник | Проверенная граница |
| --- | --- | --- |
| AMQP 0-9 описывает delivery, отдельное acknowledgement и флаг <code>redelivered</code>; в руководстве для implementer есть рекомендация учитывать повторные доставки и переносить непригодный вход в dead letter queue | [AMQP 0-9 specification](https://www.rabbitmq.com/resources/specs/amqp-xml-doc0-9.pdf) | Статья использует это только как словарь доставки и повтора. Учебная state machine не реализует AMQP, channel, ack API или настоящий dead-letter route. |
| RabbitMQ 3.8 был выпущен 11 ноября 2019 года; обзор этой линии упоминает poison-message feature и configurable delivery limit для quorum queues | [RabbitMQ 3.8 Release Overview](https://www.rabbitmq.com/blog/2019/11/11/rabbitmq-3-8-release-overview) | Линия существовала к марту 2021 года. В тексте нет переноса её топологии, названия policy или обещания сохранности terminal path на произвольный broker. |
| Версионная документация Kafka 2.7 разделяет delivery semantics, а API producer предупреждает, что retry может открыть duplicate | [Kafka 2.7 documentation](https://kafka.apache.org/27/documentation/#semantics), [KafkaProducer 2.7.0 API](https://kafka.apache.org/27/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html) | Термины используются для разграничения delivery и domain effect. Модуль не запускает Kafka и не заявляет exactly-once или реальный delivery guarantee. |
Весь пример создан в <code>runQueueFixture()</code>. Он берёт один
неизменяемый учебный message id <code>msg-order-417</code> и показывает две
явно взаимоисключающие ветви, а не одну невозможную историю:
- **recovery**: временное условие → controlled retry через 1000 мс → один
записанный effect → duplicate после неизвестного статуса receipt →
suppress duplicate и решение по этой delivery;
- **poison**: отдельный учебный исход того же logical id → временно
недоступная учебная проверка schema → ограниченная попытка → terminal reason
<code>training-schema-not-supported</code> →
<code>manual-review</code> с <code>requiredCheck</code>;
- **ledger**: recovery ledger хранит один <code>effectKey</code>, poison
ledger остаётся пустым. Поэтому terminal ветвь не выдаётся за уже
совершённый эффект.
Это сознательно узкая модель. Она не моделирует transport, persistence,
consumer group, broker acknowledgement, реальную DLQ, внешнее API, базу,
транзакцию, сетевой сбой или права оператора. Ровно поэтому статья не называет
свою Map настройкой RabbitMQ/Kafka/SQS и не делает claim о delivery guarantee
за пределами инвариантов fixture.
Вердикт прохода: **пройден**. Исторические ссылки привязаны к источникам,
которые существовали к марту 2021 года; современный язык платформы не
подменяет границы учебного договора.
## Проход 2. Редактура, глубина и голос М4 — пройдено
| Revision | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
| --- | --- | --- | --- |
| Практика | Дубликат, нарушенный порядок и неподходящая схема появляются после первого consumer; цена — неизвестный сделанный effect и потерянный ручной контекст | Как записать контракт задачи до выбора consumer | **10 248** знака body |
| Механизм | Effect уже записан, но та же логическая задача приходит снова; цена — второй effect и неверный поиск «ошибки очереди» | Где проходит граница delivery, ledger и порядка | **11 280** знаков body |
| Полевой разбор | Один consumer бесконечно повторяет одинаковую ошибку; цена — заблокированная работа, шум и ручное удаление без контекста | Когда остановить retry и как передать решение человеку | **10 901** знака body |
- Каждый текст сохраняет последовательность «симптом → причина → проверка →
действие». Вводные не делают общих заявлений о важности очередей.
- В каждом revision есть не менее пяти смысловых разделов, таблица с
<code>caption</code>/<code>thead</code>, figure с содержательным
<code>alt</code>/<code>figcaption</code>, два и более технических примера,
нумерованный маршрут и четыре официальные ссылки.
- М4 марта 2021 года проявляется в явных инвариантах и границах владельца:
<code>effectKey</code> принадлежит эффекту, <code>sequenceKey</code> —
доменному порядку, retry policy — договору обработки, manual record —
владельцу следующего решения. Тон короткий и технический, без риторики
зрелой event-platform.
- Текст не обещает exactly-once. Понятия delivery, duplicate, effect и order
разделены, а Map названа учебной моделью, а не транзакционным решением.
- Отдельно вычитаны два опасных смешения: duplicate не отождествляется с
причиной повторной доставки, а terminal route не отождествляется с удалением
сообщения или завершённым ручным расследованием.
Вердикт прохода: **пройден**. Длина находится в диапазоне 5 000–15 000
знаков; новые навыки автора следуют из предыдущих материалов о delivery,
ретраях, логах и диагностике, но не приписывают ему несуществующий опыт
эксплуатации большой платформы.
## Проход 3. Визуал, fixture и preflight — пройдено в пределах пакета
- <code>queue-message-lifecycle-2021.svg</code> показывает полный учебный
маршрут от конверта до ledger и manual route. После первого мобильного
рендера сокращены длинные подписи delivery decision и retry, чтобы текст не
обрезался на ширине 375 px.
- <code>queue-delivery-guarantees-2021.svg</code> отделяет запуск consumer,
effect ledger, suppress duplicate, решение delivery и terminal path.
- <code>queue-poison-diagnosis-2021.svg</code> показывает дерево
classification: известная временная причина идёт в ограниченный retry,
terminal/unknown — в manual review; длинная подпись operator decision также
сокращена после 375 px проверки.
- Во всех трёх SVG есть <code>title</code>, <code>desc</code> и
<code>role="img"</code>; вертикальный viewBox, контрастные карточки и
исходный текст не мельче 21 px. Статическая проверка не нашла
<code>script</code>, <code>foreignObject</code>, внешние URL или raster
data URI.
- Sharp отрендерил финальные SVG в PNG шириной 375 px. Результаты просмотрены
вручную: заголовки, стрелки, карточки и нижние подписи читаются; clipping,
overlap и горизонтальный overflow внутри схем не обнаружены. Это проверка
статичного рендера, не browser-run и не проверка screen reader.
### Фактически выполненные проверки
Финальное состояние пакета проверено 31 июля 2026 года:
<pre><code>cd web &amp;&amp; node --check scripts/upgrade-2021-03.mjs
cd web &amp;&amp; npm run audit:draft -- scripts/upgrade-2021-03.mjs
cd web &amp;&amp; node scripts/upgrade-2021-03.mjs --verify-fixture
cd web &amp;&amp; xmllint --noout \
public/assets/editorial/2021/queue-message-lifecycle-2021.svg \
public/assets/editorial/2021/queue-delivery-guarantees-2021.svg \
public/assets/editorial/2021/queue-poison-diagnosis-2021.svg</code></pre>
| Проверка | Реальный результат |
| --- | --- |
| <code>node --check</code> | PASS, code 0 |
| Import-safe export и draft gate | PASS: **10 248 / 11 280 / 10 901** знака body; для трёх slug найдены sections, table, figure, code, route, sources и локальные assets |
| In-memory fixture | PASS: десять assertions истинны — один logical id, controlled retry, одна запись effect ledger, suppress duplicate, terminal manual path и явное разделение ветвей |
| <code>xmllint --noout</code> | PASS, все три SVG — корректный XML |
| SVG safety scan | PASS: не найдены <code>script</code>, <code>foreignObject</code>, внешние asset URL или raster data URI |
| Sharp mobile preflight | PASS: три финальных PNG шириной 375 px просмотрены вручную; нет clipping, overlap или horizontal overflow внутри схем |
| Scope/self-review | PASS: созданы только пять разрешённых файлов; registry, <code>articles.json</code>, README, очередь, package config и Git не менялись |
<code>npm run audit:draft</code> завершилась с code 0. npm вывел старые
предупреждения о пользовательских <code>store-dir</code>, <code>cache-dir</code>
и <code>public-hoist-pattern</code>; эти конфигурации не относятся к П37 и не
изменялись пакетом.
Не запускались: strict audit после подключения к registry, production build,
browser, screen reader, реальный broker, SDK, HTTP, база, внешнее API, CI,
deployment и публикация. Эти операции намеренно оставлены интегратору, потому
что автономная партия не подключает registry и не меняет Git.
## Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
<code>web/data/editorial-revisions.mjs</code>, не меняя базовый
<code>articles.json</code>, даты или автора архивных записей. В registry стало
106 revision. AMQP 0-9, RabbitMQ 3.8 и Kafka 2.7 source material сверены
независимо: они поддерживают границы redelivery, poison/dead-letter route и
возможности duplicate, но не превращают Map из статьи в реальный broker или
end-to-end guarantee.
| Проверка после интеграции | Реальный результат |
| --- | --- |
| Строгий audit трёх slug | PASS: 10 248 / 11 280 / 10 901 знака; у каждой статьи есть figure, table и code examples |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены |
Ни этот отчёт, ни интеграция не утверждают запуск broker, SDK, HTTP, базы,
external API, browser или assistive technology.
Выпусковой вердикт: **ACCEPT**. Commit и push выполняются отдельной
публикационной операцией; Git остаётся источником её фактической записи.