12 KiB
П69 · 2023-11 · Postmortem без поиска виноватого — три прохода саморевью
Рамка партии
- Slug:
editorial-2023-11-practice-postmortem,editorial-2023-11-mechanism-postmortem,editorial-2023-11-field-postmortem. - Голос: М6, ноябрь 2023 года. Автор действует как системный практик: начинает с цены плохого разбора, различает evidence и интерпретацию, связывает решение с доступной в моменте информацией и оставляет один проверяемый следующий шаг. Речь короткая и прикладная: «симптом → причина → проверка → действие».
- Тема разделена без дублей. Practice учит сначала собрать fact timeline; mechanism объясняет контракт
fact/decision-at-the-time/preventive-experiment; field даёт маршрут ведущему ретроспективы от unknown к обратимой проверке. Общий fixture — один учебный предмет, а не три повтора одного текста. - Жёсткая граница: пакет создаёт только fixed synthetic incident records в памяти. Он не читает, не отправляет и не создаёт реальные incident data, logs, traces, alerts, users, CI, сеть или production runtime. Он не делает вывода о виновнике, причине, impact или эффекте настоящего изменения.
- Скоуп sidecar: ровно этот review,
web/scripts/upgrade-2023-11.mjsи три заданных SVG.articles.json, registry, README, очередь, Git, staging, commit и push не менялись.
Проход 1 — факты, источники и модель
- Историческая граница проверена 31.07.2026 по первичным официальным материалам, существовавшим до конца ноября 2023: Google SRE Book: Postmortem Culture и Example Postmortem (публикация Google 2017); NIST SP 800-61 Rev. 2, август 2012; CISA Federal Government Cybersecurity Incident and Vulnerability Response Playbooks, ноябрь 2021.
- У источников названы пределы вывода. Google описывает практику и форму postmortem в своей SRE-культуре, включая timeline и action items; это не доказательство эффекта для иной команды. NIST и CISA относятся к cybersecurity incident response; из них не выведены обязательства, сроки или универсальный процесс для продуктовой эксплуатации.
syntheticIncidentRecordsсодержит пять статичных объектов: триfact, одноdecision-at-the-time, одинpreventive-experiment. Каждая факт-карточка имеет fixed timestamp, fixed statement и synthetic evidence reference, но фиксируетnot-a-cause-claim; решение видит только три предшествующих fact IDs; experiment имеет hypothesis, criterion и rollback, но не обещает effect.assembleSyntheticPostmortem()не импортирует runtime I/O-модули и не вызывает сетевой, файловый, CI или production API. Граничный scan не нашёл runtime I/O primitive. Функция принимает только complete fixed synthetic contract с точным top-level shape, ставитsynthetic-not-observed,not-judged,not-evaluatedи отдельно запрещает поляculprit,rootCause,realEffect.runPostmortemFixture()проверяет 21 assertion: валидный контракт, закрытую форму top-level/fact statement, раздельность facts/decision/experiment, временную границу решения, отсутствие actor в объяснении, предел допустимого вывода, отрицательные ветки и узкий rollback. PASS означает только согласованность учебной формы; он не устанавливает incident, человека, причину, impact, доступность, безопасность или production effect.- Rollback намеренно неоперационный.
rollbackSyntheticPostmortem()возвращает frozen snapshot synthetic records, сообщаетexternalIO=not-attemptedиproductionEffect=not-attempted. Он не откатывает release, не меняет конфигурацию, не удаляет данные и не выключает alerting.
Проход 2 — редактура, голос и различение статей
- Первые два абзаца всех статей называют практическую проблему и цену: practice — поиск виноватого вместо маршрута для следующей смены; mechanism — заднее знание в одной фразе; field — спор о людях вместо проверяемой timeline. Ни один пример не маскируется под настоящий incident report.
- После редакторского сокращения основной текст составил: practice — 9 978 знаков, mechanism — 9 971, field — 10 000. Все значения находятся внутри обязательных 5–15 тыс. и целевого 8–10 тыс. знаков. У каждой статьи десять смысловых разделов вместе с источниками, одна доступная таблица, собственный рисунок с осмысленным
alt/caption, исполнимый пример, ordered route, limits, rollback и next step. - Practice отвечает на вопрос «как записать facts до объяснения». Здесь главные артефакты — source-backed timeline и отдельная карточка решения. Mechanism отвечает на «почему нельзя соединять прошлый факт и будущую профилактику в одну фразу». Здесь глубина — поля record contract и временная граница knowledge. Field отвечает на «как провести разбор в комнате». Здесь главный артефакт — маршрут ведущего, stop-signal и перевод unknown в experiment.
- Текст соответствует М6: использует incident, evidence, rollback, owner role и review только с конкретным предметом. Автор 2023 года не выдан за владельца глобальной платформы: нет вымышленных команд, SLO, чисел ущерба, access data, production logs или заявлений о внедрённом эффекте. Персональную оценку заменяют источник, доступный факт, граница решения, criterion и следующее действие.
- Автоматический draft audit не нашёл шаблонных фраз, следов генерации, повторяющихся slug, отсутствующих source links, незакрытых visual assets или изменения
date/author. Import-safe CLI и module export согласованы; в архиве существуют все три зафиксированных slug.
Проход 3 — визуал, выпуск и безопасность
postmortem-2023-fact-timeline.svgпоказывает порядок трёх fact records, решения и experiment;postmortem-2023-decision-record.svg— поток fact IDs в решение и критерий/rollback у experiment;postmortem-2023-experiment-loop.svg— путь от unknown к review criterion. Каждая схема явно отмечает, что она synthetic и не доказывает вину, причину или production effect.- Все SVG содержат
title,desc,role="img",aria-labelledby, контрастные блоки, видимые подписи и не используют<script>,foreignObject, external URL,javascript:,data:imageили event handlers.xmllint --nooutи safety scan прошли без замечаний. - Sharp-render всех трёх схем на ширине 375 px просмотрен вручную: timeline читается сверху вниз, карточка решения сохраняет направление fact → decision → experiment, loop не превращается в мелкую таблицу. Уточнение «поиск виновника» визуально перечёркнуто, но не является единственным носителем смысла: текстовые blocks остаются читаемыми.
- Выполнены:
node --check web/scripts/upgrade-2023-11.mjs— PASS;node web/scripts/upgrade-2023-11.mjs --verify-fixture—PASS fixture: 21/21 assertionsпосле независимого model review;cd web && npm run audit:draft -- scripts/upgrade-2023-11.mjs— PASS для всех трёх статей; import-safe проверка — PASS; XML/SVG safety scan — PASS; Sharp 375 px — PASS. - Пакет намеренно не интегрирован в registry и не опубликован. Главный агент должен отдельно провести приёмочное ревью перед архивной интеграцией, но этот sidecar не требует и не выполняет Git-действий.
Интеграционное ревью главного агента
Независимо сверены первичные источники. Google SRE 2017 определяет postmortem как письменную запись incident, impact, действий и follow-up и отдельно формулирует blameless подход как проверку системных причин с учётом информации, доступной в моменте. Example Postmortem действительно содержит impact, action items и timeline. NIST SP 800-61 Rev. 2 (2012) и CISA playbook с пометкой publication November 2021 относятся к cybersecurity response; поэтому они оставлены только как ограниченный контекст, не как шаблон для продуктовой эксплуатации.
Model review нашёл два пути подменить fixed synthetic предмет: добавить
неизвестное top-level поле или заменить заранее названный fact statement
произвольным текстом. Теперь top-level records и вложенные cards имеют exact
own-key shape, а все три statements фиксированы. Fixture добавил обе
отрицательные ветки и проходит 21/21 assertions.
Повторный draft audit: 10 078 / 9 971 / 10 000 знаков. Все SVG прошли XML и
safety scan, затем вручную просмотрены после Sharp-render на 375 px. Строгий
archive audit прошёл для трёх slug; registry содержит 202 уникальные ревизии.
npm run build успешно сгенерировал 374 статические страницы.