Звать, когда разбор уже назвал, что красное или стоит, и надо выбрать меру: перезапуск, новый толчок, разморозку очереди, метку blocker, откат, новую ветку взамен воскресшей, остановку при исчерпанной квоте. До того, как мера выполнена, а не после.
Installs into .claude/skills of the current project.
Are you the author of Incident Mitigation?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/artvsmark-incident-mitigation)
---
name: incident-mitigation
description: >-
Звать, когда разбор уже назвал, что красное или стоит, и надо выбрать меру:
перезапуск, новый толчок, разморозку очереди, метку blocker, откат, новую
ветку взамен воскресшей, остановку при исчерпанной квоте. До того, как мера
выполнена, а не после.
argument-hint: "[что назвал разбор]"
---
# Выбор меры при инциденте
> **Читатель:** агент — окно, у которого разбор назвал, что красное, в момент выбора меры.
## Зачем это существует
Меры здесь проваливались не потому, что их не было, а потому, что их **эффект
не проверяли** или **выбирали по привычке**, а не по причине.
- **28 августа** гейт связи с задачей отказал из-за тела изменения. Тело
поправили и запустили `rerun_failed_jobs` — гейт **снова прочитал старое** и
снова отказал: перезапуск проигрывает снимок события, а не живое тело. Выйти
можно было только новым толчком (`CHANGELOG.md`, выпуск 1.1.0, «Починено»;
комментарий к шагу в [`ci.yml`](../../../.github/workflows/ci.yml)).
- **2–3 сентября** первая живая разморозка очереди перевзвела **ноль из двух**
стоящих изменений — и завершилась **зелёной**. Вторая перевзвела ноль из
одного и покраснела; причина у обеих одна — HTTP 403. Мера отчиталась
успехом, а эффекта не было (`CHANGELOG.md`, выпуск 1.2.0, «Починено»).
- **3 сентября** две равносильные меры отменили друг друга: прогон взвода
автомержа для #316 был отменён через **тринадцать секунд** запуском от
разморозки, и изменение стояло до ручного толчка (там же).
- **2 сентября** работа `attribution-history` стояла у дежурного в
исключениях. Мера «исключить» ослабила заморозку молча: дежурный отчитался
«ветка зелёная», и **два** изменения уехали на сломанном основании
([`AGENTS.md`](../../../AGENTS.md) § «Открытая работа», пункт 0).
## Что сделать
**0. Мера — после разбора.** Утверждение, на котором она стоит, проверено до
неё: «CI сломался», «событие не пришло» сначала воспроизводятся
([044](../../../rules/ru/044-check-the-premise-before-fixing.md)). Разбора нет —
сначала `/incident-triage`.
**1. Выбрать меру по причине, а не по привычке.** Каталог знает такие рычаги —
и только их:
| Причина, названная разбором | Мера | Чем НЕ заменять | Правило |
|---|---|---|---|
| упала одна работа, причина вне кода — выкачка, установка, потеря исполнителя | перезапуск **только упавшей работы**, одна попытка; зелёное со второго раза записывается фрагментом журнала как находка | перезапуском всего прогона и вторым перезапуском того же места | [124](../../../rules/ru/124-rerun-the-minimum-and-record-the-flake.md) |
| гейт читает снимок события, запись изменения устарела | новый толчок либо обновление ветки от базы | перезапуском: он проигрывает тот же снимок | [148](../../../rules/ru/148-a-change-record-is-a-cache.md) |
| событийная автоматика не проснулась | ручная кнопка `workflow_dispatch` | пустым коммитом ради перезапуска — он остаётся в истории навсегда | [104](../../../rules/ru/104-event-driven-automation-needs-a-manual-button.md) |
| красная `main`, очередь заморожена | метка `blocker` на изменении-починке, затем `automerge.yml` вручную с `pr=NNN`; путь выхода не должен проходить через замороженное действие | исключением работы из заморозки | [053](../../../rules/ru/053-queue-order-is-a-rule-not-arrival.md), [126](../../../rules/ru/126-a-freeze-needs-a-thaw-path.md) |
| исчерпана квота API | остановиться: довести начатые цепочки, новых не начинать, сначала замерить остаток и время сброса (`scripts/ghcli.py`) | повторами: они отодвигают сброс | [058](../../../rules/ru/058-when-the-quota-is-out-stop.md), [017](../../../rules/ru/017-measure-quota-do-not-guess.md) |
| слитая ветка воскресла от толчка | новая ветка от свежей `main`, дубль закрыть; ветку удаляет тот, у кого есть право | толчком в воскресшую | [202](../../../rules/ru/202-a-merged-branch-is-recreated-by-any-push.md) |
| краснеет гейт, и чинится его признак | правка признака с ответом по соседним случаям — строка `Соседи:` во фрагменте | подъёмом бюджета гейта — исключений, пропусков, долга, — «чтобы позеленело» | [195](../../../rules/ru/195-a-narrowed-predicate-names-its-neighbour.md), [050](../../../rules/ru/050-limits-move-down-only.md) |
| красное на чужом изменении или ветке | сообщить владельцу, что сделать | толчком в чужую ветку | [012](../../../rules/ru/012-do-not-push-to-someone-elses-branch.md) |
Отдельного пути отката каталог не ведёт: откат — обычное изменение через
конвейер, с меткой `blocker`, если он чинит красную `main`. Флагов, ограничения
частоты, режима деградации и масштабирования в каталоге нет, и мер на них навык
не предлагает.
**2. Разделить меры на обратимые и необратимые.** Метка, перезапуск, ручная
кнопка, новая ветка — обратимы: у каждой назван способ вернуть. Слияние, тег,
выпуск, удаление ветки или метки — **необратимы**: допустимы только с
инвариантами, проверенными заранее скриптом, а не глазами в момент шага
([074](../../../rules/ru/074-one-shot-irreversible-steps-get-their-own-guard.md)).
Из облачного окна операция, несущая личность человека, не выполняется вовсе —
она уходит в конвейер ([131](../../../rules/ru/131-no-writes-from-a-cloud-session.md)).
Мера над **чужой** работой — закрыть, убрать, переписать — берётся, только
если выполнены все её условия сразу; иначе позвать владельца
([063](../../../rules/ru/063-automatic-intervention-needs-all-conditions.md)).
**3. Ослабление — только явное.** Мера, снимающая гарантию — исключение из
заморозки, обход гейта, — допустима лишь отдельным решением с записью, что
режим ослаблен. Тихое исключение 2 сентября и есть то, что запрещено
([045](../../../rules/ru/045-no-silent-fallback.md)).
**4. Назвать проверку эффекта ДО выполнения.** Мера на площадке подтверждается
номером живого исхода — какой прогон, какое изменение, сколько перевзведено, —
а не успехом команды ([139](../../../rules/ru/139-a-mechanism-is-confirmed-by-a-run.md)).
Для меры, срабатывающей по условию — метка, приставка ветки, условие запуска, —
проверяется появление ожидаемого артефакта: несовпадение условия молчит
([147](../../../rules/ru/147-a-cancelling-switch-needs-an-addressee.md)).
«Разморозка зелёная» без числа перевзведённых — не эффект, а тот самый
инцидент 2 сентября.
**5. Не запускать две меры одного предмета разом.** Равносильные меры в одной
группе конкурентности отменяют друг друга — 3 сентября одна съела другую за
тринадцать секунд. Одна мера, её исход, потом следующая.
## Что выдать
Для каждой предложенной меры:
1. **Мера** и причина из разбора, на которую она отвечает.
2. **Обратима или нет** — и как вернуть, если обратима.
3. **Кто выполняет** — окно, конвейер или человек; что из этого окну не разрешено.
4. **Проверка эффекта** — какое число или номер покажет, что мера сработала.
5. **Чего не делать вместо неё** — строка из таблицы шага 1.
## Чего навык НЕ делает
- **Не краснеет.** Он ничего не отвергает и не останавливает: это суждение
модели по описанию. Машинную часть там, где она построена, держат гейты и
конвейер — [`AGENTS.md`](../../../AGENTS.md) § «Гейты».
- **Не разбирает инцидент.** Что красное и почему — вопрос
[`/incident-triage`](../incident-triage/SKILL.md); здесь причина уже названа.
- **Не выполняет необратимое и не ставит `blocker` сам.** Метку ставит
человек: что именно чинит красное, механизм не выводит
([053](../../../rules/ru/053-queue-order-is-a-rule-not-arrival.md)). Навык её
предлагает, с проверкой эффекта.
- **Не объявляет починку.** Уборка после меры — снятая метка, закрытый дубль —
не значит, что причина устранена.
- **Не изобретает рычагов эксплуатации.** Их в каталоге нет.