Files
progcode/editorial/reviews/2023-11-draft.md
T
huncode 9610ad68c1
Build and deploy / deploy (push) Successful in 16s
revise November 2023 postmortem articles
2026-07-31 15:20:08 +03:00

12 KiB
Raw Blame History

П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 статические страницы.