This commit is contained in:
@@ -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`, контрастные блоки, видимые подписи и не используют `<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 статические страницы.
|
||||
Reference in New Issue
Block a user