From 9610ad68c164c5ca8cdd9f2be79179639073cb14 Mon Sep 17 00:00:00 2001 From: "E.Gavrilov" Date: Fri, 31 Jul 2026 15:20:08 +0300 Subject: [PATCH] revise November 2023 postmortem articles --- editorial/production/README.md | 2 +- editorial/reviews/2023-11-draft.md | 56 ++ web/data/editorial-revisions.mjs | 2 + .../2023/postmortem-2023-decision-record.svg | 60 ++ .../2023/postmortem-2023-experiment-loop.svg | 60 ++ .../2023/postmortem-2023-fact-timeline.svg | 52 ++ web/scripts/upgrade-2023-11.mjs | 540 ++++++++++++++++++ 7 files changed, 771 insertions(+), 1 deletion(-) create mode 100644 editorial/reviews/2023-11-draft.md create mode 100644 web/public/assets/editorial/2023/postmortem-2023-decision-record.svg create mode 100644 web/public/assets/editorial/2023/postmortem-2023-experiment-loop.svg create mode 100644 web/public/assets/editorial/2023/postmortem-2023-fact-timeline.svg create mode 100644 web/scripts/upgrade-2023-11.mjs diff --git a/editorial/production/README.md b/editorial/production/README.md index 3b674c1..9ec6c45 100644 --- a/editorial/production/README.md +++ b/editorial/production/README.md @@ -1,6 +1,6 @@ # Производство редакционных партий -На 31 июля 2026 года строгий аудит проходит 208 из 358 созданных материалов. Остальные 150 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. +На 31 июля 2026 года строгий аудит проходит 211 из 358 созданных материалов. Остальные 147 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить. ## Одна партия diff --git a/editorial/reviews/2023-11-draft.md b/editorial/reviews/2023-11-draft.md new file mode 100644 index 0000000..f393d6a --- /dev/null +++ b/editorial/reviews/2023-11-draft.md @@ -0,0 +1,56 @@ +# П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`, контрастные блоки, видимые подписи и не используют `