Files
huncode 9610ad68c1
Build and deploy / deploy (push) Successful in 16s
revise November 2023 postmortem articles
2026-07-31 15:20:08 +03:00

57 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# П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](https://sre.google/sre-book/postmortem-culture/) и [Example Postmortem](https://sre.google/sre-book/example-postmortem/) (публикация Google 2017); [NIST SP 800-61 Rev. 2](https://doi.org/10.6028/NIST.SP.800-61r2), август 2012; [CISA Federal Government Cybersecurity Incident and Vulnerability Response Playbooks](https://www.cisa.gov/sites/default/files/publications/Federal_Government_Cybersecurity_Incident_and_Vulnerability_Response_Playbooks_508C_1.pdf), ноябрь 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 статические страницы.