# Razbor Chata Na Artefakty

> «Разбери этот чат», «реестр утверждений», «выжимка из чата, четыре артефакта», «сделай ADR по чату», «что из чата пойдёт в правила проекта». Статусы правит человек.

- Skill: `kir-kopylov/razbor-chata-na-artefakty` (Agent Skill, multi-file: 12 files)
- Install (CLI): `npx skillmds@latest add kir-kopylov/razbor-chata-na-artefakty`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kir-kopylov/razbor-chata-na-artefakty/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kir-kopylov (https://skillmd.com/u/kir-kopylov)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kir-kopylov/razbor-chata-na-artefakty

---


# Разбор Чата На Артефакты

## Запуск Навыка

При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:

Применяю **«Разбор чата на артефакты»**: <кратко назовите конкретную дополнительную процедуру или проверяемый результат для текущего запроса>; продолжаю без ожидания.

Не включайте в строку `author_github`, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.

Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.

Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.

## Обзор

Повторяемая задача: в длинном чате идею исследовали, оспаривали, раздували, разбирали и пересобирали. Полезное там есть, но оно перемешано с отвергнутым и с предложениями агента, на которые человек просто не ответил. Пересказ такого чата всегда получается льстивым: отвергнутое всплывает как живое, а молчание читается как согласие.

Skill решает это разделением ролей. Машина собирает реестр утверждений с привязкой к тексту чата и проверяет **форму**. Человек проверяет **классификацию** — потому что «принято» и «предложено» различает только тот, кто принимал. Между этими двумя работами стоит обязательная остановка.

На выходе — четыре файла в отдельной папке разбора и ни одной правки в существующих правилах, памяти или документации проекта.

## Естественные Входы

- «разбери этот чат», «собери из чата, что уцелело»;
- «собери реестр утверждений», «выжимка из чата»;
- «четыре артефакта», «сделай ADR по этому чату»;
- «что из этого чата пойдёт в правила проекта»;
- «собери передачу смены перед новой сессией».

## Определения

- **Реестр** — файл `registry.md`: по одной строке на каждое содержательное утверждение из чата, со статусом и привязкой к месту в чате.
- **Статусы**: `+` принято (человек явно согласился, выбрал или сформулировал сам) · `x` отвергнуто (разобрано и снято) · `?` открыто (обсуждалось, не закрыто) · `0` без реакции (предложил агент, человек не ответил).
- **Якорь** — несколько слов из того сообщения чата, откуда взята строка. Строка без якоря в реестр не входит.
- **Папка разбора** — `razbor/<дата>-<слаг-темы>/`, внутри `registry.md` и подпапка `out/`. Файлы проекта вне этой папки не трогаются никогда.

## Фаза 1 — Реестр

### Шаг 0. Карточка доступности чата

Первое, что уходит в ответ, — честная карточка того, что у вас на руках:

```
Доступно дословно: <какие сообщения или участок чата>
Сжато или недоступно: <какой участок>
```

Это не формальность, а несущая проверка. Инструкция «перечитать чат целиком» в длинной сессии физически невыполнима: ранние ходы сжаты, дословного текста больше нет. Если промолчать об этом, реестр собирается ровно из той сводки, которую skill запрещает, а якорь реконструируется по пересказу и **выглядит настоящим**. Правило якоря само по себе эту дыру не закрывает: якорь по пересказу и якорь по цитате внешне не отличить.

Строка, чей якорь нельзя привести цитатой из реально доступного текста, получает маркер `!контекст-сжат` и не выдаётся за привязанную. Дальше человек либо подтверждает формулировку по своей прокрутке и снимает маркер, либо переносит строку в раздел «Без якоря».

### Шаги 1–6. Сборка

1. Перечитать доступный текст чата, включая ветки, отвергнутые по ходу. Не опираться на свою сводку беседы. Что недоступно дословно — помечать, а не додумывать.
2. Создать папку разбора и записать `registry.md` в формате ниже.
3. Правило происхождения: молчание человека — не согласие. Убедительно звучащее предложение агента остаётся `0`, пока человек его не подхватил.
4. Правило сомнения: не уверен в статусе — ставить `?` и дописывать в конце строки `!сомнение`. Не угадывать.
5. Прогнать проверку формата (см. ниже), вставить вывод в ответ дословно.
6. Вывести аудит-сводку и **остановиться**. Артефакты на этой фазе не собираются, даже если человек просил всё сразу.

### Формат файла

```
# Реестр утверждений
Чат: <тема> | Дата: <дата> | Собрал: <модель>

Статусы: + принято | x отвергнуто | ? открыто | 0 без реакции
Статус меняется заменой первого символа строки. Формулировки не переписывать.

+ 001 | утверждение одной строкой | якорь: «слова из чата»
x 002 | утверждение одной строкой | якорь: «слова из чата» альт:001
? 003 | утверждение одной строкой | якорь: «слова из чата» !сомнение
0 004 | утверждение одной строкой | якорь: «слова из чата» !контекст-сжат

## Без якоря — не вошло в реестр
- <утверждение> — почему не нашлась привязка
```

Требования, они не косметические:

- Статус — первый символ строки, затем пробел: так человек меняет статусы мультикурсором. Дописывая строку руками, ставьте статус, а **не дефис**: дефисом начинается только раздел «Без якоря».
- Нумерация трёхзначная, в порядке появления в чате, возрастающая. Не сортировать по статусам: номера работают ссылками во второй фазе. Пропуски допустимы — человек переносит строку без якоря в раздел «Без якоря», и дыра в нумерации это штатный след его вычитки; убывание не допускается никогда.
- Одно утверждение — одна строка. Вертикальная черта — разделитель полей: если она есть внутри текста утверждения, заменить на запятую или переформулировать.
- Якорь непустой и стоит последним полем: в нём произвольный текст из чата.
- Маркеры (`альт:NNN`, `!сомнение`, `!контекст-сжат`) — только в самом конце строки, в любом порядке. Маркер в любом другом месте строки, включая внутренность якоря, — нарушение формата: с хвоста он не снимается и при чтении теряется, а строка при этом выглядит валидной и открывает шлюз.
- `альт:NNN` ставится только на строку `x` и указывает на номер того решения, чьей альтернативой она была. Без этой привязки строка `x` в ADR не попадёт (см. фазу 2).
- Дописанное человеком нумеруется от 900.

### Проверка формата

```bash
python3 <skill-dir>/scripts/check_registry.py razbor/<папка>/registry.md
```

`<skill-dir>` — папка этого skill. Относительный путь `scripts/...` не подставлять: рабочий каталог — проект человека, а не папка skill.

Скрипт ловит битый статус, нецифровую и не трёхзначную нумерацию, отсутствие якоря, отсутствие пробела после статуса, лишнюю вертикальную черту, строку, дописанную дефисом вместо статуса, дубли номеров, убывание номеров, маркер вне хвоста строки (в тексте или внутри якоря), `альт:` на неверном статусе или в никуда и реестр без единой строки-утверждения. Считает статусы, показывает дописанное от 900 и незакрытые маркеры, печатает `sha256` содержимого. Перед проверкой файла тестирует сам себя на наборе синтетических битых и корректных строк в памяти и печатает `детектор жив` вместе с их числом — числа берутся из самих наборов, а не из текста, поэтому расходиться с ними не могут.

Коды возврата:

| Код | Значение |
|---|---|
| 0 | формат чист, незакрытых маркеров нет — фаза 2 разрешена |
| 1 | есть нарушения формата либо реестр не содержит ни одной строки-утверждения |
| 2 | файл не прочитан или детектор мёртв |
| 3 | формат чист, но остались незакрытые маркеры — фаза 2 закрыта |

Код 3 существует затем, чтобы шлюз держался кодом возврата, а не тем, что модель внимательно прочитала строку вывода.

Нарушение найдено — исправлять только форму, не содержание:

- сбитый формат строки — переформатировать;
- недопустимый статус — заменить на `?` и дописать `!сомнение`;
- нет якоря — перенести строку в раздел «Без якоря». **Якорь не выдумывать ни при каких условиях.**

Нет доступа к оболочке — написать «проверка формата не выполнена, нет доступа к терминалу». Не изображать её результат.

### Аудит-сводка в ответ

```
Реестр: razbor/<папка>/registry.md — N строк, sha256:<хеш>
+ принято: N | x отвергнуто: N | ? открыто: N | 0 без реакции: N
Незакрыто !сомнение: N (строки: ...) | !контекст-сжат: N (строки: ...)
Без якоря, не вошло: N
```

Дальше — одна фраза о том, что делает человек: правит первые символы строк, в первую очередь `!сомнение`, `!контекст-сжат` и `0`, дописывает пропущенное с номерами от 900, снимает маркеры, сохраняет.

## Шлюз Между Фазами

Фаза 2 не запускается, если хотя бы одно условие не выполнено:

1. `registry.md` существует на диске и прочитан в этом ходу.
2. `check_registry.py` вернул **0**. Код 3 означает, что реестр не вычитан человеком: маркеры снимает он, не модель.
3. `sha256` из вывода скрипта совпадает с хешем прочитанного файла. Иначе проверялись одни байты, а читаются другие, и первые два условия ничего не значат.

Любое условие не выполнено — сказать, какое именно, и остановиться. Не собирать артефакты по памяти чата.

## Фаза 2 — Артефакты

Вход — `registry.md` с диска. **Реестр главнее чата**: в чат можно возвращаться только за формулировкой уже существующей в реестре строки, за содержанием — нет. Пункта, которого нет в реестре, в артефактах быть не должно.

Маршрутизация статусов:

| Артефакт | Берёт | Не берёт |
|---|---|---|
| Правила | `+` | остальное |
| Память | `+`, `?`, `x` (как «не пересматривать») | `0` |
| Передача смены | `+`, `?`, `x` (как антицели) | `0` |
| Записи решений | `+` как решение, `x` **только с `альт:` на это решение** как варианты | `0`, `x` без привязки |

Строки `0` не входят никуда — вывести их отдельным списком в конце ответа под заголовком «Осталось без реакции».

Оговорка про ADR не косметическая: «Рассмотренные варианты» — это альтернативы **конкретного** решения, а `x` в реестре означает «отвергнуто вообще». Без привязки `альт:` каждый ADR получит одну и ту же свалку отвергнутого. Строка `x` без `альт:` живёт в памяти и передаче смены как антицель, но в варианты ADR не идёт.

Подробные фильтры, шаблоны и правила для каждого артефакта — в `references/artefakty.md`. Прочитать перед сборкой.

Файлы: `out/rules-delta.md`, `out/memory.md`, `out/handoff.md`, `out/adr/ADR-NNNN-<слаг>.md`. Существующие правила, память и документацию проекта не трогать и ничего с ними не сливать: решение о применении принимает человек.

## Границы

- Не решает, стоит ли внедрять инструмент или подход, обсуждавшийся в чате: это гейт существования, `stop-lishnemu-uslozhneniyu`.
- Не проектирует контракт нового skill из чата: это `kontrakt-navyka-do-sborki`.
- Не объясняет предыдущий ответ построчно: это `a-postrochniy-razbor`.
- Не применяет артефакты: не редактирует существующие правила проекта, память, документацию и не открывает PR. Всё пишется в папку разбора.
- Не работает по чату, которого нет дословно и который человек не готов подтвердить: такие строки помечены и остаются на человеке.

## Фон-Запреты

- **Маски незнания**: «скорее всего», «обычно», «как правило», «по опыту», «должно быть», «вероятно», «по идее». Либо факт с номером строки реестра, либо явное «не знаю».
- **Пустой артефакт — валидный результат.** Пустоту не заполнять. Но пустой **реестр** валидным результатом не является: ноль строк-утверждений означает обрыв записи или несостоявшийся разбор, шлюз на таком файле закрыт, и пустые артефакты по нему за результат человеческой вычитки не выдаются.
- **Не повышать статус**: `?` и `0` решением не становятся ни в одном артефакте.
- Идею разобрали и не пересобрали — не пересобирать её самому.
- Не выдумывать окружение: версии, пути, имена файлов и инструментов — только если они есть в реестре.
- Статус `proposed` у всех ADR: принятие решения — акт человека вне чата.

## Опрос После Использования

Опрос задаётся один раз — после сдачи артефактов фазы 2 или после явного стопа (закрытый шлюз, отказ по границе), не между фазами: остановка фазы 1 — рабочий шаг, а не финал. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.

```text
Опрос по skill:
1. Что в этом использовании razbor-chata-na-artefakty было полезно?
2. Что стоит доработать в skill или его формате?
Можно ответить коротко или написать "пропустить".
```

Если пользователь ответил, сохраните санированную карточку в `~/.codex/skill-runs/razbor-chata-na-artefakty/usage-feedback.jsonl` — лучше через bundled script:

```bash
python3 scripts/log_usage_feedback.py --liked "..." --improve "..." --outcome "..."
```

Script перед записью редактирует приватные пути, контакты и token-like строки и сохраняет в JSONL `redaction_applied` и `redaction_types`. Если запись невозможна из-за sandbox, прав или отсутствия tools, не делайте вид, что лог сохранён: скажите об этом и покажите короткую JSONL-карточку для ручного сохранения. Raw-ответы, контакты, пути и секреты не коммитить.

## Логирование Сбоев

Перед выполнением прочитайте локальный `known-exceptions.yaml` как список уже известных случаев и применяйте подходящее `do_next_time` без нового поиска.

Если пользователь поправил skill, tool/API/browser упал, нарушен режим работы, пришлось искать workaround или skill сделал ложное предположение, запишите приватную карточку в `~/.codex/skill-runs/<skill-name>/exception-log.jsonl`.

Пишите факты: что skill хотел сделать, что сделал, где сломался, какая предпосылка была ложной и что сделать в следующий раз. Если поле неизвестно, пишите `unknown`. Raw logs не коммитить.

## Критерий Готовности Ответа

Перед финальным ответом фазы 1 проверьте:

1. Карточка доступности чата стоит первой и названа честно: что дословно, что сжато.
2. Вывод `check_registry.py` вставлен дословно, вместе с кодом возврата.
3. Ни один якорь не выдуман; строки по сжатому контексту помечены `!контекст-сжат`.
4. Артефакты не собраны, и в ответе сказано, что делает человек дальше.

Перед финальным ответом фазы 2 — по строке на пункт:

1. Каждая строка каждого артефакта возводится к номеру строки реестра.
2. Ни одна строка `x` не попала в правила или память как живая.
3. В варианты ADR попали только строки `x` с `альт:` на это решение.
4. Все ADR со статусом `proposed`.
5. Слов-масок ноль.
6. Пустые артефакты помечены пустыми, а не добиты объёмом.
7. В `out/` не тронуто ничего, кроме созданных файлов; файлы проекта вне папки разбора не изменены.

В ответ: список созданных файлов, по строке на каждый, с числом пунктов и номерами строк реестра; затем «Осталось без реакции».

