Звать, когда проект отвечает каталогу Engineering-Incidents-Playbook по правилу — пишет или правит запись в `.rules/bindings.json`: разбирает задачу-«входящие», подключается впервые, перечитывает ответы после подъёма номера контракта. До того, как запись уйдёт в изменение.
Installs into .claude/skills of the current project.
Are you the author of Answer A Rule?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/artvsmark-answer-a-rule)
---
name: answer-a-rule
description: >-
Звать, когда проект отвечает каталогу Engineering-Incidents-Playbook по
правилу — пишет или правит запись в `.rules/bindings.json`: разбирает
задачу-«входящие», подключается впервые, перечитывает ответы после подъёма
номера контракта. До того, как запись уйдёт в изменение.
argument-hint: "[номер правила или «входящие»]"
---
# Ответ каталогу по одному правилу
> **Читатель:** агент — окно проекта-потребителя, которое пишет или правит запись в `.rules/bindings.json`.
## Зачем это существует
Ответ проекта читает машина: сводка «где действует», доля машинного
соблюдения, долг семьи проектов. Ошибка в записи поэтому не остаётся у
проекта — она сдвигает числа у всех, кто их читает. Каждая ошибка ниже
замерена, а не предположена
([контракт потребления](https://github.com/ArtVsMark/Engineering-Incidents-Playbook/blob/main/export/README.md),
[`VERSIONING.md`](https://github.com/ArtVsMark/Engineering-Incidents-Playbook/blob/main/docs/VERSIONING.md)).
- **Одно слово на три механизма.** Из 44 записей со словом `process-step` три
указывали на конвейер, четырнадцать — на документ, а двадцать семь не
указывали ни на что, кроме прозы, то есть означали `none`.
- **Проза вместо адреса.** Семь ответов «держится гейтом» оказались
утверждениями обо ВСЕХ скриптах сразу, которых не проверял ни один гейт.
Один из семи вскрыл живой пробел: правило обещало ручную кнопку у каждой
работы, а у одной её не было.
- **Документ одним словом.** У одного проекта `document` держал 30 правил
против 25 у `gate`, и доля машинного соблюдения — 181 из 656 по семье —
считалась со знаменателем, где «законно документом» и «пока документом»
сложены в одно число.
- **Номер по памяти.** Прозой в ответе стояло «выгрузка правил каталога — 1.2» при
живой 1.5: отставание на три подъёма, невидимое обеим сторонам.
## Что сделать
**0. Прочитать правило целиком, а не заголовок.** Раздел «Применимость»
(«Where it applies») решает между `active` и `not-applicable`: правило,
подходящее по заголовку, может прямо не работать в вашем случае.
**1. Статус — один вопрос: есть ли у проекта предмет правила.**
| Статус | Когда | Что рядом |
|---|---|---|
| `not-applicable` | предмета нет | `why`: чем проект отличается |
| `rejected` | предмет есть, решение иное | `why`: какое решение и почему |
| `active` | предмет есть, правило действует | механизм, шаг 2 |
| `unreviewed` | ещё не смотрели | ничего |
`unreviewed` не склеивается с первыми двумя: «не смотрели» — ровно та потеря,
ради различения которой контракт и заведён.
**2. Механизм — по вопросу «что случится, если правило нарушить».** Берётся
сильнейшее из того, что держит правило.
| Механизм | Нарушение |
|---|---|
| `gate` | отвергается до слияния |
| `pipeline` | замечается прогоном, но слияние не держит |
| `skill` | навык агента напомнит в момент вызова, если его позовут |
| `document` | заметит человек, если читал |
| `none` | не заметит ничто |
Слово `process-step` не пишется: оно принимается на входе, но в отчётах не
сводится ни к одному из пяти.
**3. `where` — адрес, который открывается.** Путь к файлу с расширением,
образец вида `.github/workflows/*.yml` или корневой документ по имени. Проза
рядом — пожалуйста, вместо адреса — нет. Проверка: открыть адрес в своём
дереве. Если адрес не называется, механизм, скорее всего, не тот, и честнее
спуститься ступенью ниже, чем описать гейт словами.
**4. Навык — полем `skill`, адресом:** `.claude/skills/<имя>` — навык в
своём дереве, `catalogue:<имя>` — навык этого плагина, так же, как он зовётся
(контракт ответа с 1.7). При `mechanism: skill` поле обязательно; рядом с
`gate` или `pipeline` — когда навык держит вторую половину, которую гейт не
берёт; при `none` запрещено.
**5. Механизм не краснеет (`document`, `skill`, `none`) — ответить,
можно ли держать машиной,** полем `holdable` с причиной в `why`:
- `no` — машинной половины нет вовсе, текст и есть предел;
- `not-yet` — половина есть и не построена: это долг, и он так и считается;
- `conditional` — станет возможна, когда появится предмет; `awaiting` называет
событие и замер того, что предмета сегодня нет;
- `refused` — половина есть, замерена в `machine_half`, сигнал сперва понизили
до предупреждения — и отказались и от него
([213](https://github.com/ArtVsMark/Engineering-Incidents-Playbook/blob/main/rules/ru/213-a-refusal-measured-and-chosen-is-not-a-debt.md)).
При `mechanism: none` рядом ещё `machine_half`: ЧТО из требования следует из
данных целиком и почему оно всё-таки не построено. «Машинно нельзя» одним
препятствием на всё требование — признак, что его не разбирали надвое
([182](https://github.com/ArtVsMark/Engineering-Incidents-Playbook/blob/main/rules/ru/182-an-unmechanisable-answer-is-split-in-two.md)).
**6. Даты — две, и они про разное.** `analysed` — день, когда запись сверили с
деревом; `decided` — день, когда вынесен нынешний вердикт. Перечитали и
подтвердили — двигается только `analysed`. `decided` не бывает позже
`analysed`: решают, посмотрев.
**7. Номера — из выгрузки, а не по памяти.** `schema` ответа — номер контракта
ответа, который вы читаете (`contracts.bindings` в `export/rules.json`
каталога), `answers_to` — номер выгрузки (`contracts.export`). Сдвинулся номер
— перечитать ответы и назвать в теле изменения, сколько записей перечитано и
сколько изменено
([157](https://github.com/ArtVsMark/Engineering-Incidents-Playbook/blob/main/rules/ru/157-a-contract-version-bump-is-a-re-read.md)).
**8. Прогнать свою проверку ответа**, если она есть, и только после неё
отправлять изменение.
## Чего навык НЕ делает
- **Не краснеет.** Он не отвергает запись и не останавливает слияние; форму
ответа держит гейт — ваш или действие каталога, а навык задаёт вопросы,
которых гейт не задаст.
- **Не решает за проект.** `active` или `rejected` — решение проекта; навык
спрашивает, что за ним стоит, а не выбирает.
- **Не проверяет чужой механизм.** «Держится гейтом» — утверждение проекта, и
отвечает за него его конвейер: каталог чужого дерева не видит.
- **Не заполняет задним числом.** `holdable` и `machine_half` спрашиваются у
записей новых и тронутых; разом по всем старым их начнут проставлять
формально.