# Автономное тройное ревью П34 · декабрь 2020 · «Разбор инцидента»
Статус: **принят независимым редактором в выпусковой набор**. Пакет содержит
ровно три revision для стабильных slug:
- editorial-2020-12-practice-incident-review;
- editorial-2020-12-mechanism-incident-review;
- editorial-2020-12-field-incident-review.
Созданы только пять разрешённых файлов П34:
- web/scripts/upgrade-2020-12.mjs;
- web/public/assets/editorial/2020/incident-timeline-2020.svg;
- web/public/assets/editorial/2020/incident-decision-record-2020.svg;
- web/public/assets/editorial/2020/incident-learning-loop-2020.svg;
- этот документ.
Revision-модуль экспортирует только изменяемые редакционные поля и не содержит
date или author. Он не подключает registry.
articles.json, registry, README, очередь, package config и Git
этой партией не менялись. Команда --print-revisions печатает
только JSON, а --verify-fixture запускает отдельную
детерминированную проверку в памяти.
## Проход 1. Факты и техническая рамка — пройдено
| Утверждение | Первичный или официальный источник | Проверенная граница |
| --- | --- | --- |
| Управление инцидентом выигрывает от живой записи состояния, разделения работы и явного восстановления | [Google SRE Book: Managing Incidents](https://sre.google/sre-book/managing-incidents/) | В текст перенесён только малый каркас «наблюдение → гипотеза → действие → проверка», без утверждения, что у автора есть сложный процесс управления инцидентами |
| Postmortem документирует влияние, действия, contributing causes и follow-up; разбор без обвинения ищет условия системы, а не персональную вину | [Google SRE Book: Postmortem Culture](https://sre.google/sre-book/postmortem-culture/) | Статьи говорят о component, поле, контракте и проверке; fixture не содержит имён или ролей людей |
| Диагностика строится на наблюдениях, проверяемых гипотезах и полезном отрицательном результате | [Google SRE Book: Effective Troubleshooting](https://sre.google/sre-book/effective-troubleshooting/) | H1 отделена от E2; непрохождение V1 описано как новый факт, а не как повод переписать историю |
| Для security-инцидентов NIST описывает цикл подготовки, обнаружения, анализа, сдерживания и post-incident activity | [NIST SP 800-61 Rev. 2](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-61r2.pdf) | Источник используется только как общий ориентир жизненного цикла; статья не называет учебный случай security-инцидентом и не выдаёт его за нормативную процедуру |
Весь технический случай создан в runIncidentFixture(). В нём пять
синтетических событий с последовательностью E1, E2, H1, A1, V1; один decision
record D1 и два профилактических пункта P1/P2 в состоянии
planned. Значения не взяты из журнала, сетевого запроса,
пользовательской истории или production-системы:
- E1 фиксирует только учебное состояние blocked на границе
preview-order;
- E2 фиксирует отсутствие currency после mapper;
- H1 — явно изменяемая гипотеза, основанная на E2;
- A1 — ограниченный выбор прежнего mapper в памяти fixture;
- V1 — отдельная проверка A1, а не заявление о здоровье системы;
- P1/P2 остаются planned и имеют будущие checks.
В fixture запрещены непустые или переставленные ссылки: hypothesis требует
раннее observation, action — раннюю hypothesis, verification — раннее action.
Также проверяются decision trigger/expected check, конкретность профилактики и
отсутствие атрибуции людям. Она намеренно не моделирует HTTP, proxy, базу,
очередь, browser, мониторинг, deployment, реальный трафик или логи. В статьях
нет claim о реальном инциденте, числовой норме доступности, времени
восстановления или зрелой платформе надёжности.
Вердикт прохода: **пройден**. Источники отделены от учебной модели, а учебная
модель — от настоящей операционной среды.
## Проход 2. Редактура, глубина и голос М3 — пройдено
| Revision | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
| --- | --- | --- | --- |
| Практика | Видимый симптом исправляют до фиксации фактов; цена — возвращающийся случай и запись «починили» без следующей проверки | Как собрать минимальную временную шкалу до первой правки | **9 214** знаков body |
| Механизм | Один абзац смешивает факт, гипотезу, обход и профилактику; цена — потерянная граница и временное действие вместо вывода | Как связать observation, hypothesis, action, verification и prevention | **10 362** знака body |
| Полевой разбор | После восстановления обход принимают за завершённый разбор; цена — повторение старого действия вне исходной границы | Как прочитать синтетический случай без выдуманного production-отчёта | **9 752** знака body |
- Все три материала начинают с «симптом → цена → ограниченная учебная
граница», затем сохраняют последовательность «причина → проверка →
действие».
- У каждого revision больше пяти смысловых разделов, самостоятельный
figure с содержательным alt и
figcaption, таблица с caption/thead,
два технических примера, нумерованный маршрут и три или четыре официальные
ссылки.
- Практическая статья учит сначала сохранить E1/E2 и только потом менять
код. Механическая статья объясняет границы состояний. Полевой материал
показывает их на одном контролируемом входе, не расширяя вывод до всех
путей.
- Речь короткая и предметная: «факт → гипотеза → проверка → действие».
Она называет mapper, currency,
pricing-adapter, expected check и planned follow-up вместо
общего рассуждения о важности надёжности.
- Голос соответствует М3 конца 2020 года: автор уже видит границы модулей и
повторяемый порядок работы, но не приписывает себе опыт построения
платформы, числовых целей доступности, командного центра или большого
production-инцидента.
Второй проход отдельно проверил две опасные подмены. Первая: наблюдение
currency === undefined не названо причиной. Вторая: A1 и V1 не
называются профилактикой; P1/P2 остаются будущими, отдельно проверяемыми
изменениями. Разбор без обвинения не убирает техническую ответственность:
он требует назвать поле, границу, проверку и следующее изменение, но не
приписывает намерение отсутствующим в fixture людям.
Вердикт прохода: **пройден**. Длина в пределах 5 000–15 000 знаков, заголовки
не обещают универсальный процесс, а глубина достигается анализом границ и
контрпримеров, а не повтором одной формулы.
## Проход 3. Визуал, fixture и выпусковой preflight — пройдено в пределах пакета
- incident-timeline-2020.svg показывает вертикальную
зависимость «симптом → E1/E2 → H1 → A1 → V1» и отдельную плановую
профилактику. Он не соединяет проверку с симптомом напрямую.
- incident-decision-record-2020.svg делает видимыми E2,
H1, D1/A1, V1 и P1; у решения есть trigger и expected check.
- incident-learning-loop-2020.svg показывает, что цикл
закрывается следующей проверкой контракта, а не словом «готово».
- Каждый SVG имеет title, desc,
role="img", вертикальный viewBox 720 px, контрастные карточки
и текст не мельче 21 px в исходнике. Во всех трёх отсутствуют JavaScript,
foreignObject, внешние URL и raster data URI.
- Mobile preflight отрендерил каждый SVG в PNG шириной 375 px через Sharp и
просмотрел результат вручную. Заголовки, карточки, стрелки и нижние
подписи читаются; clipping, наложение и горизонтальный overflow внутри
SVG не обнаружены. Это статическая визуальная проверка, а не browser-run
и не проверка screen reader.
### Фактически выполненные проверки
Финальное состояние пакета проверено 31 июля 2026 года:
cd web && node --check scripts/upgrade-2020-12.mjs
cd web && npm run audit:draft -- scripts/upgrade-2020-12.mjs
cd web && node scripts/upgrade-2020-12.mjs --verify-fixture
cd web && xmllint --noout \
public/assets/editorial/2020/incident-timeline-2020.svg \
public/assets/editorial/2020/incident-decision-record-2020.svg \
public/assets/editorial/2020/incident-learning-loop-2020.svg
| Проверка | Реальный результат |
| --- | --- |
| node --check | PASS, code 0 |
| Import-safe export и draft gate | PASS: **9 214 / 10 362 / 9 752** знака body; у трёх slug найдены sections, table, figure, code, route, sources и локальные assets |
| In-memory fixture | PASS: семь assertions истинны — временная шкала упорядочена; H1 основана на E2; A1 следует за H1; V1 проверяет A1; D1 содержит expected check; P1/P2 конкретны и planned; имена людей отсутствуют |
| xmllint --noout | PASS, все три SVG — корректный XML |
| Sharp mobile preflight | PASS: три PNG шириной 375 px просмотрены; нет clipping, overlap или horizontal overflow внутри схем |
| Scope/self-review | PASS: в revision нет date/author; пакет не подключает registry и не редактирует чужие незакоммиченные материалы |
npm run audit:draft завершилась с code 0; npm дополнительно вывел
предупреждения о старых пользовательских конфигурациях
store-dir, cache-dir и
public-hoist-pattern. Они не относятся к П34 и не изменялись
этим пакетом.
Не запускались: strict audit после подключения к registry, production build,
browser, screen reader, реальный HTTP/proxy, база, очередь, клиентские SDK,
мониторинг, deployment и публикация. Эти проверки принадлежат отдельной
интеграционной и выпусковой операции; данный документ не заявляет их
выполненными.
## Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
web/data/editorial-revisions.mjs, не меняя базовый
articles.json, даты или автора архивных записей. В registry стало
97 revision. Официальные источники Google SRE и NIST сверены независимо: они
поддерживают более общий порядок управления инцидентом и postmortem, но не
превращают учебный пример в отчёт о реальном инциденте.
| Проверка после интеграции | Реальный результат |
| --- | --- |
| Строгий audit трёх slug | PASS: 9 214 / 10 362 / 9 752 знака; у каждой статьи есть figure, table и code examples |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены |
Ни этот отчёт, ни интеграция не утверждают запуск HTTP, proxy, базы, очереди,
monitoring, deployment, browser или assistive technology.
Выпусковой вердикт: **ACCEPT**. Commit и push выполняются отдельной
публикационной операцией; Git остаётся источником её фактической записи.