Skip to content
Back to skills

Postmortem

ASecurity

Звать, когда инцидент инженерной работы починен и его надо разобрать: что случилось, почему и что не даст ему повториться — новое правило, второй инцидент к существующему, механизм или вердикт «правилом не становится». Тем же заходом, что починка, а не потом.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 25, 2026
developmentpythongogit

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add ArtVsMark/Engineering-Incidents-Playbook --skill postmortem --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Postmortem?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Postmortem
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/artvsmark-postmortem/badge)](https://www.skillsdirectory.com/skills/artvsmark-postmortem)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: postmortem
description: >-
  Звать, когда инцидент инженерной работы починен и его надо разобрать: что
  случилось, почему и что не даст ему повториться — новое правило, второй
  инцидент к существующему, механизм или вердикт «правилом не становится». Тем
  же заходом, что починка, а не потом.
argument-hint: "[инцидент или изменение-починка]"
---

# Разбор после инцидента

> **Читатель:** агент — окно, которое починило инцидент и разбирает его, сразу после починки.

## Зачем это существует

Разборы здесь подводили в трёх местах, и каждое стоило каталогу записи.

- **Вывод по чтению, а не по замеру.** Запись утверждала: при уплотняющем
  слиянии автор берётся из коммитов ветки. Под утверждение построили гейт,
  набор подделок с обеих сторон и мутацию — всё работало. Замер по шести
  изменениям показал другое: решает учётная запись, **открывшая** изменение
  ([146](../../../rules/ru/146-a-green-gate-does-not-verify-its-premise.md),
  инцидент «первый»). Это была запись 143, и прожила она двадцать пять минут:
  добавлена коммитом `1ad5aaf` 26 августа в 10:48 UTC, удалена как дубль 131 и
  135 коммитом `8c035bd` в 11:13 UTC. Числа взяты из истории —
  `TZ=UTC git show -s --format='%h %ad' --date=iso-local 1ad5aaf 8c035bd`, — а не из
  текста 146, где их нет.
- **Починка одного случая ломала соседний.** 8 сентября из десяти находок ревью
  три оказались одним классом: `#413` чинил жирную разметку и портил `**kwargs`
  и `id_`, `#415` чинил это и ломал третьего соседа — набор был зелёным все три
  раза ([195](../../../rules/ru/195-a-narrowed-predicate-names-its-neighbour.md),
  инцидент).
- **Вывод остался намерением.** 10 сентября, за час, три ссылки на правила
  подряд в одном абзаце — все мимо. После первой было записано «сначала
  применимость, потом цитата»; не помогло дважды
  ([204](../../../rules/ru/204-a-citation-is-checked-by-applicability.md),
  инцидент).

## Что сделать

**0. Тем же заходом, что починка.** Числа, последовательность и то, что
пробовали, живут в окне часы, а не дни: разбор, отложенный «на потом», пишется
по памяти ([138](../../../rules/ru/138-the-handover-is-assembled-as-you-go.md)).

**1. Хронология** — время UTC с площадки, номера прогонов и изменений, а не
пересказ.

**2. Воздействие — числом.** Сколько изменений уехало, сколько часов стояла
очередь, сколько прогонов отказало, сколько окон прошло мимо.

**3. Причина — замером на живом предмете.** Не рассуждением и не зелёным
гейтом: зелёное подтверждает механизм, а не утверждение, под которое он
построен ([146](../../../rules/ru/146-a-green-gate-does-not-verify-its-premise.md)).
Отвергнутые гипотезы остаются в разборе — с тем, чем опровергнуты, иначе их
проверят заново ([026](../../../rules/ru/026-rejected-findings-must-be-recorded.md)).

**4. Способствующие факторы.** Если починка правила признак — условие, образец,
набор ключей, — перечислить соседние случаи того же признака и ответить по
каждому строкой `Соседи:` во фрагменте журнала
([195](../../../rules/ru/195-a-narrowed-predicate-names-its-neighbour.md)); это
спрашивает гейт `check_narrowing.py`.

**5. Итог — один из четырёх, и путь к нему уже механизирован.**

| Итог | Как | Чем держится |
|---|---|---|
| **новое правило** | сначала `python scripts/check_duplicates.py --near <файл-черновик | ->` — нет ли такого уже (черновик файлом или потоком: номера у ненаписанной записи нет); потом `python scripts/new_rule.py --slug … --tier … --area … --trail владелец/репо#N`. Человеку остаются утверждение, инцидент с числами и граница «не работает». Без инцидента это не правило ([080](../../../rules/ru/080-every-new-rule-goes-into-the-catalogue.md)) | `check_duplicates.py --check`, `audit_catalogue.py`, `build_rules_index.py --check` |
| **второй инцидент к существующему** | дописывается в «Инцидент» правила второй историей ([`CONTRIBUTING.md`](../../../CONTRIBUTING.md) § «Как устроена запись»). Пересмотр **по существу** — новой записью со строкой «Заменено.» у старой, не правкой задним числом ([043](../../../rules/ru/043-decisions-are-superseded-not-edited.md)) | скрипта нет — это проверяет ревью |
| **правилом не становится** | строка `>` во фрагменте `changelog.d/<слаг>.fixed.md`: «правилом не становится, потому что…» — с причиной ([026](../../../rules/ru/026-rejected-findings-must-be-recorded.md)) | `collect_changelog.py --check` |
| **наблюдение без своего инцидента** | кандидат в `candidates/`, не правило | `check_candidates.py` |

**6. Корректирующее действие — механизм, а не намерение.** Требование, которое
можно проверить машинно, становится гейтом; иначе его не будут соблюдать
([002](../../../rules/ru/002-rule-without-mechanism.md)). Гейт ставится в путь
самого действия — сторож, обязательная проверка, — а не рядом: вердикт,
который читает тот же, кто следом действует, остаётся запиской
([208](../../../rules/ru/208-a-verdict-its-own-actor-reads-is-a-reminder.md)).
Объявлено «машинно нельзя» — сначала разобрать требование надвое
([182](../../../rules/ru/182-an-unmechanisable-answer-is-split-in-two.md)).
Новый гейт прогоняется тем, что обязан отвергнуть, и тем, что обязан
пропустить ([140](../../../rules/ru/140-a-gate-is-tested-by-what-it-must-reject.md));
что тест краснеет до починки, доказывается полу-откатом
([014](../../../rules/ru/014-red-before-fix-needs-partial-revert.md)).

**7. Владелец и критерий завершения.** У каждого действия — задача или строка
изменения: `Closes #N` либо `Part of #N` с названным остатком
([173](../../../rules/ru/173-a-change-closes-the-task-or-names-the-rest.md)).
Критерий — число или номер прогона, на котором отработало, а не «сделано».

## Что выдать

1. **Хронология** — время UTC и номера.
2. **Воздействие** — числа.
3. **Причина** — и замер, которым она подтверждена; отвергнутые гипотезы с опровержением.
4. **Способствующие факторы** — соседние случаи, если менялся признак.
5. **Итог** — одна строка таблицы шага 5.
6. **Корректирующие действия** — механизм, владелец, критерий завершения.

## Чего навык НЕ делает

- **Не краснеет.** Форму записи, вердикт фрагмента и соседей держат гейты;
  навык зовёт их, а не повторяет.
- **Не ищет виноватого.** Предмет разбора — механизм, а не внимательность
  исполнителя. Отдельного правила «без обвинения» в каталоге нет; это тот же
  приём, что у [208](../../../rules/ru/208-a-verdict-its-own-actor-reads-is-a-reminder.md):
  чинить механизм, а не человека.
- **Не присваивает номер правила руками** — его берёт `new_rule.py`, и номера
  не переиспользуются.
- **Не ревьюирует свой разбор.** Ревью делает не автор — это
  `/incident-review` другим заходом.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.