Аудит обвязки — проверка её устройства чтением. Доктрина, обоснования, справочники, посадка, скиллы и код инструмента читаются дословно, по областям, и называются логические дыры, противоречия, дубли, устаревшие механизмы и то, что держится одной прозой, хотя могла бы держать машина. В проекте тем же порядком читается его документация. Дорогой и редкий; заканчивается отчётом и ожиданием решения, а не правками. Вызывать по «аудит обвязки», «прочитай обвязку на связность», «пройди по докам».
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Audit?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/igor-lx-audit)
---
name: audit
description: Аудит обвязки — проверка её устройства чтением. Доктрина, обоснования, справочники, посадка, скиллы и код инструмента читаются дословно, по областям, и называются логические дыры, противоречия, дубли, устаревшие механизмы и то, что держится одной прозой, хотя могла бы держать машина. В проекте тем же порядком читается его документация. Дорогой и редкий; заканчивается отчётом и ожиданием решения, а не правками. Вызывать по «аудит обвязки», «прочитай обвязку на связность», «пройди по докам».
user-invocable: true
---
# Аудит обвязки: правильно ли она устроена
Обвязку проверяют четыре инструмента, и у каждого свой вопрос:
| Инструмент | Вопрос |
| --- | --- |
| режим `falsify` | ловит ли каждая машинная сверка свой предмет |
| скилл `probe` | справляется ли обвязка как процесс с живой задачей, и чем это удержано |
| скилл `bar-probe` | находит ли свод по планке дефект в коде |
| этот скилл | правильно ли обвязка устроена |
Аудит **читает и рассуждает**, остальные три ломают и смотрят. Чтение не
говорит, держится ли правило на деле, — это меряет `probe`. Слом не говорит,
верно ли правило задумано, — это находит аудит. Поэтому они кормят друг
друга, а не заменяют.
## Заканчивается отчётом, а не правками
Находка аудита — недостающее, лишнее или противоречивое правило, а правка
доктрины — развилка разработчика (`loop.md`, раздел «Найденное чинится сразу,
в том же заходе»). Аудит кладёт перед ним выбор с ценой, а не ставит перед
фактом.
Исключение одно: находка обычного класса — битый адрес, застывшее число,
опечатка, мёртвая отсылка — чинится сразу и называется в отчёте отдельно.
## Два корпуса
| Корпус | Где читают | Что в нём |
| --- | --- | --- |
| **обвязка** | в мастерской — репозитории, откуда обвязку раздают | доктрина и обоснования, справочники инструмента, посадка с семенами и заметками, скиллы, состояние обвязки, код инструмента |
| **документация проекта** | в проекте | документы о продукте: устройство слоёв, решения, настройки, витрина, README рядом с кодом |
Доктрина одна на все проекты, и читать её в каждом проекте значит повторять
работу мастерской. В проекте аудит читает только его документацию: смысл
документа не видит ни одна сверка, и это чтение — единственная его проверка.
## Области: корпус читается частями
Корпус обвязки в один контекст не помещается: проза — около `849 000`
знаков, код инструмента — около `1 890 000` (замер `2026-10-07`). Поэтому
проход берёт **одну область** и читает её целиком и дословно:
1. доктрина, которую среда кладёт каждой сессии, — файлы `.claude/rules/`
без шапки `paths:`;
2. доктрина по поводу — файлы `.claude/rules/` с шапкой `paths:`; состав и
повод каждого — `entry.md`, раздел «Правила, которые не зависят от
проекта»;
3. обоснования — `.claude/rationale/`;
4. посадка — `.claude/seat/`: инструкция, карта, семена, заметки;
5. справочники инструмента — `.claude/tools/graph.md` и
`.claude/tools/checks.md`;
6. скиллы и состояние — `.claude/skills/`, `.claude/state/`;
7. код инструмента — по сверке: её код, её строка в `checks.md` и её рецепт
в `falsify.json`; по режиму: его код и его раздел в `graph.md`.
Документация проекта делится по папке документов.
**Какую область брать — решает история.** Пройденная область помечается
последней строкой коммита, которым проход закрыт:
```
Audit-pass: <номер области>; находок: <число>
```
Первыми берутся области, ни разу не пройденные, затем те, что правились
после своего прохода:
```
git log --grep="^Audit-pass:" --format="%cs %h %(trailers:key=Audit-pass,valueonly)"
git log --oneline <коммит прохода>..HEAD -- <папка области>
```
Проход без находок коммита не оставляет, и область считается от последнего
прохода с находками — окно выходит шире нужного, в безопасную сторону.
## Порядок прохода
1. **Прочитать, что уже решено.** Обоснование области — там отклонённые
варианты; отложенное и открытые вопросы обвязки, в `.claude/state/`; в
проекте — `02-todo.md`, `09-decisions.md`, `13-questions.md` базы.
Отклонённое заново не предлагается, если не появилось нового довода — и
тогда он назван.
2. **Прочитать область целиком и дословно.** Код — вместе с прозой, которая
его описывает. Не по адресу и не выборочно: дыры этого рода видны при
сопоставлении разных мест между собой.
3. **Пройти признаки** — оба списка ниже, по каждому файлу области, и четыре
вопроса — к каждому механизму области.
4. **Держать дисциплину вывода.** Утверждение опирается на якорь — путь и
строку; без якоря это гипотеза и называется гипотезой. Прежде чем назвать
противоречие, искать, не разрешено ли оно в другом месте свода. Связный
вывод на непроверенной посылке проверкой не является.
5. **Отчёт** — раздел ниже.
## Признаки: что ищется в обвязке
- **правило без крючка** — объявлено обязательным, но не входит ни в один
исполняемый список, ни в форму отчёта, ни в вывод инструмента;
- **крючок без правила** — вывод инструмента, графа отчёта или шаг списка
требуют того, чего в правилах уже нет или что переформулировали;
- **держится одной прозой, хотя могла бы машина** — признак виден в тексте
(форма, имя, адрес, число, связь двух файлов), а держит его внимание.
Предложение — сверка с рецептом; вход — матрица `bar-hold` и записи
«Держится: вниманием»;
- **код расходится со своим описанием** — сверка или режим делает не то, что
о нём сказано в `checks.md` или `graph.md`; комментарий описывает прежнее
поведение;
- **правило против машины** — доктрина требует одного, а сверка, посадка или
инструмент — другого. Вторая сторона не текст, поэтому её спрашивают у
прогона;
- **два места об одном** — дословный или смысловой дубль, который разойдётся
при первой правке одной из копий;
- **противоречие** — два правила требуют разного, и выбор оставлен читателю;
- **неисполнимость** — по формулировке нельзя сказать, выполнено ли правило;
- **устаревший механизм** — правило описывает то, как было устроено раньше;
- **проверка сужена по источнику, а причина её про цель** — исключение
завели под ложное срабатывание одного источника, и с ним выпали все прочие;
- **мёртвая отсылка прозой** — ссылка без адреса, которую сверка не разбирает:
«как сказано выше», имя режима или раздела, которого больше нет;
- **форма записи без опознания близких форм** — инструмент читает один
точный образец, а запись, отличающаяся знаком («## Вопрос 5: …» вместо
«## Вопрос 5. …»), не читается и не краснит: прогон при этом нулевой;
- **путь сравнивается подстрокой** — «../../CLAUDE.md» содержит
«../CLAUDE.md», но ведёт выше корня; сравнение обязано разбирать путь;
- **корпус сверки уже слов правила** — правило говорит «в прозе свода», а
сверка читает часть свода (записи базы и правила проекта, но не доктрину);
например, конфиг корня с комментарием под решёткой вне сверок комментариев;
- **корпус посчитан по другому предмету** — сверка печатает «осмотрено N» по
одному множеству, а проверяет другое; проверяемого нет — «осмотрено ноль» не
встаёт;
- **сверка читает форму записи, которой база больше не пишет** — корпус ноль у
каждого проекта с нынешней формой;
- **одно опознание размножено по местам** — каждое место со своим словарём и
своей неполнотой форм;
- **файл машины прочитан без проверки формы** — разбор прошёл, а значение не
той формы роняет читателя либо переписывается;
- **находка без адреса строки** — два упоминания дают две одинаковые строки;
- **утверждение о пустоте, верное до первой записи** — семя говорит «нет ни
одного», и это устаревает без признака;
- **находка по семени не называет его семенем** — после обновления обвязки
семя прежней редакции читается как работа проекта;
- **режим не опознаёт свою площадку** — режим, рассчитанный на особое
окружение, вызванный вне его, печатает претензию на каждый предмет вместо
одного отказа;
- **образец в коде — ограде либо блоке с отступом — читается как запись** —
сверка или сводка берёт показанную форму («TODO», «42 файла», «Держится:
ничем») за настоящую и краснит там, где форму лишь показывают; прочая проза
корпуса при этом ограды пропускает;
- **имя сверки в прозе не сверяется** — после переименования сверки слова о
ней с прежним именем остаются в тексте и отсылают к сверке, которой под этим
именем нет;
- **открытая ограда прячет хвост файла** — читатели прозы пропускают ограды
кода, и незакрытая длится до конца файла: всё ниже неё выпадает из сверок;
- **шапка скилла сверена не вся** — окружение подбирает скилл по `description`,
а сверка читает `name` и признак вызова и молчит о пустом описании;
- **значение, заданное полем настройки, повторено литералом в другом файле**
— правилах, семени, скилле;
- **термин в двух смыслах** — одно слово означает разное в разных местах;
- **цена чтения не по моменту** — доктрина, которую читает каждая сессия,
держит то, что нужно только по поводу; кандидат в обоснование или в
справочник;
- **правило, которого нет** — шаг, который делают всегда, но нигде не записан;
- **храповик держит только сверху** — объявленное число долга не даёт расти,
а сжатия следом за починкой никто не спрашивает: предмет починен, число
стоит прежним;
- **починен пример, а не класс** — одно место приведено, а соседние того же
рода стоят как были: другой сценарий, другой файл, другой ключ;
- **файл есть, а не той формы — читается как отсутствующий** — разбор упал
либо вернул не объект, и дальше идёт ветка «файла нет» с чужой причиной;
- **сбой посреди работы мимо отката** — откат ловит только ожидаемые отказы,
а неожиданное исключение оставляет сделанное наполовину;
- **опознание по признакам, которые не смотрят в предмет** — решение
«удалить как своё» стоит на подписи файла, а не на его содержимом.
У скилла свои классы дыр, потому что скилл — порядок действий, а не свод
утверждений:
- противоречие внутри скилла — норма требует того, чего не даёт его же
порядок шагов;
- шаг неисполним в записанном виде — команда делает не то, что о ней сказано,
или нужного предмета на этом шаге ещё нет;
- второй режим скилла наследует правило без упоминания;
- параметр вызова без описанного исхода;
- стоп-условие не покрывает реальную ситуацию;
- шапка обещает не то, что делает тело: по шапке скилл выбирают, и
расхождение уводит его на чужую задачу.
**Четыре вопроса к каждому механизму** — сверке, правилу, шагу, форме записи:
- что он говорит, когда его предмет исчез;
- что он говорит, когда носителей свойства стало два;
- по какому признаку сужен его корпус, и совпадает ли этот признак с
причиной, ради которой механизм заведён;
- чем держится он сам и когда в последний раз срабатывал.
## Признаки: что ищется в документации проекта
- **противоречие двух документов** — об одном предмете сказано разное;
- **устаревший механизм** — описано то, как было устроено раньше;
- **пересказ кода вместо «почему»** — абзац получается чтением файла;
- **термин в двух смыслах** — одно слово означает разное в разных документах;
- **решение, отменённое другим решением** — текст читается как действующий;
- **обещание шире предмета** — документ объявляет полный перечень или
гарантию, которых не даёт;
- **возможность без строки в витрине** — и обратное: витрина обещает
несуществующее;
- **документ, которого нет в указателе**;
- **README, обещающий не то, что делает папка**.
Источник истины — код: расхождение «код — документ» означает дефект документа.
## Список признаков растёт
Класс, найденный где угодно — пробой, пробой планки, ревью, случайным
чтением, — дописывается в списки выше **тем же заходом**. Иначе аудит ищет
вчерашние классы.
## Обмен с `probe` и `bar-probe`
- **Логическая дыра, найденная здесь, уходит в следующий прогон проб
отдельной пробой**: чтение показывает, что правило висит, а держится ли оно
чем-нибудь на деле, показывает только слом.
- **Проба, удержанная одним вниманием, приходит сюда**: её класс — кандидат в
признак «держится одной прозой, хотя могла бы машина».
- **Критерий, который `bar-probe` пропускает**, читается здесь: его
формулировка, его держатели, его вопросы модели.
## Отчёт
- область, коммит, на котором её читали, и что из неё не прочитано;
- находки — по каждой: класс, адрес, что не так, чем грозит, предложение и
его цена, включая то, что оно добавит к обязательному чтению;
- исход по каждой — прямым утверждением: **исправлено** (только для находок
обычного класса); **вопрос разработчику** — с записью в список вопросов
(`.claude/state/questions.md`, в проекте — `13-questions.md`), чтобы
находка пережила сессию; **отклонено** — с причиной;
- прямой вопрос о составе работ — и ожидание ответа.
После ответа работа идёт по обычным правилам. Отклонённое разработчиком
ложится в обоснование того правила, которого касалось, — там его найдёт
следующий проход на шаге 1.