Разбор Чата На Артефакты
Запуск Навыка
При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:
Применяю «Разбор чата на артефакты»: <кратко назовите конкретную дополнительную процедуру или проверяемый результат для текущего запроса>; продолжаю без ожидания.
Не включайте в строку author_github, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.
Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.
Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.
Обзор
Повторяемая задача: в длинном чате идею исследовали, оспаривали, раздували, разбирали и пересобирали. Полезное там есть, но оно перемешано с отвергнутым и с предложениями агента, на которые человек просто не ответил. Пересказ такого чата всегда получается льстивым: отвергнутое всплывает как живое, а молчание читается как согласие.
Skill решает это разделением ролей. Машина собирает реестр утверждений с привязкой к тексту чата и проверяет форму. Человек проверяет классификацию — потому что «принято» и «предложено» различает только тот, кто принимал. Между этими двумя работами стоит обязательная остановка.
На выходе — четыре файла в отдельной папке разбора и ни одной правки в существующих правилах, памяти или документации проекта.
Естественные Входы
- «разбери этот чат», «собери из чата, что уцелело»;
- «собери реестр утверждений», «выжимка из чата»;
- «четыре артефакта», «сделай ADR по этому чату»;
- «что из этого чата пойдёт в правила проекта»;
- «собери передачу смены перед новой сессией».
Определения
- Реестр — файл
registry.md: по одной строке на каждое содержательное утверждение из чата, со статусом и привязкой к месту в чате. - Статусы:
+принято (человек явно согласился, выбрал или сформулировал сам) ·xотвергнуто (разобрано и снято) ·?открыто (обсуждалось, не закрыто) ·0без реакции (предложил агент, человек не ответил). - Якорь — несколько слов из того сообщения чата, откуда взята строка. Строка без якоря в реестр не входит.
- Папка разбора —
razbor/<дата>-<слаг-темы>/, внутриregistry.mdи подпапкаout/. Файлы проекта вне этой папки не трогаются никогда.
Фаза 1 — Реестр
Шаг 0. Карточка доступности чата
Первое, что уходит в ответ, — честная карточка того, что у вас на руках:
Доступно дословно: <какие сообщения или участок чата>
Сжато или недоступно: <какой участок>
Это не формальность, а несущая проверка. Инструкция «перечитать чат целиком» в длинной сессии физически невыполнима: ранние ходы сжаты, дословного текста больше нет. Если промолчать об этом, реестр собирается ровно из той сводки, которую skill запрещает, а якорь реконструируется по пересказу и выглядит настоящим. Правило якоря само по себе эту дыру не закрывает: якорь по пересказу и якорь по цитате внешне не отличить.
Строка, чей якорь нельзя привести цитатой из реально доступного текста, получает маркер !контекст-сжат и не выдаётся за привязанную. Дальше человек либо подтверждает формулировку по своей прокрутке и снимает маркер, либо переносит строку в раздел «Без якоря».
Шаги 1–6. Сборка
- Перечитать доступный текст чата, включая ветки, отвергнутые по ходу. Не опираться на свою сводку беседы. Что недоступно дословно — помечать, а не додумывать.
- Создать папку разбора и записать
registry.mdв формате ниже. - Правило происхождения: молчание человека — не согласие. Убедительно звучащее предложение агента остаётся
0, пока человек его не подхватил. - Правило сомнения: не уверен в статусе — ставить
?и дописывать в конце строки!сомнение. Не угадывать. - Прогнать проверку формата (см. ниже), вставить вывод в ответ дословно.
- Вывести аудит-сводку и остановиться. Артефакты на этой фазе не собираются, даже если человек просил всё сразу.
Формат файла
# Реестр утверждений
Чат: <тема> | Дата: <дата> | Собрал: <модель>
Статусы: + принято | x отвергнуто | ? открыто | 0 без реакции
Статус меняется заменой первого символа строки. Формулировки не переписывать.
+ 001 | утверждение одной строкой | якорь: «слова из чата»
x 002 | утверждение одной строкой | якорь: «слова из чата» альт:001
? 003 | утверждение одной строкой | якорь: «слова из чата» !сомнение
0 004 | утверждение одной строкой | якорь: «слова из чата» !контекст-сжат
## Без якоря — не вошло в реестр
- <утверждение> — почему не нашлась привязка
Требования, они не косметические:
- Статус — первый символ строки, затем пробел: так человек меняет статусы мультикурсором. Дописывая строку руками, ставьте статус, а не дефис: дефисом начинается только раздел «Без якоря».
- Нумерация трёхзначная, в порядке появления в чате, возрастающая. Не сортировать по статусам: номера работают ссылками во второй фазе. Пропуски допустимы — человек переносит строку без якоря в раздел «Без якоря», и дыра в нумерации это штатный след его вычитки; убывание не допускается никогда.
- Одно утверждение — одна строка. Вертикальная черта — разделитель полей: если она есть внутри текста утверждения, заменить на запятую или переформулировать.
- Якорь непустой и стоит последним полем: в нём произвольный текст из чата.
- Маркеры (
альт:NNN,!сомнение,!контекст-сжат) — только в самом конце строки, в любом порядке. Маркер в любом другом месте строки, включая внутренность якоря, — нарушение формата: с хвоста он не снимается и при чтении теряется, а строка при этом выглядит валидной и открывает шлюз. альт:NNNставится только на строкуxи указывает на номер того решения, чьей альтернативой она была. Без этой привязки строкаxв ADR не попадёт (см. фазу 2).- Дописанное человеком нумеруется от 900.
Проверка формата
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 не запускается, если хотя бы одно условие не выполнено:
registry.mdсуществует на диске и прочитан в этом ходу.check_registry.pyвернул 0. Код 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 — рабочий шаг, а не финал. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.
Опрос по skill:
1. Что в этом использовании razbor-chata-na-artefakty было полезно?
2. Что стоит доработать в skill или его формате?
Можно ответить коротко или написать "пропустить".
Если пользователь ответил, сохраните санированную карточку в ~/.codex/skill-runs/razbor-chata-na-artefakty/usage-feedback.jsonl — лучше через bundled script:
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 проверьте:
- Карточка доступности чата стоит первой и названа честно: что дословно, что сжато.
- Вывод
check_registry.pyвставлен дословно, вместе с кодом возврата. - Ни один якорь не выдуман; строки по сжатому контексту помечены
!контекст-сжат. - Артефакты не собраны, и в ответе сказано, что делает человек дальше.
Перед финальным ответом фазы 2 — по строке на пункт:
- Каждая строка каждого артефакта возводится к номеру строки реестра.
- Ни одна строка
xне попала в правила или память как живая. - В варианты ADR попали только строки
xсальт:на это решение. - Все ADR со статусом
proposed. - Слов-масок ноль.
- Пустые артефакты помечены пустыми, а не добиты объёмом.
- В
out/не тронуто ничего, кроме созданных файлов; файлы проекта вне папки разбора не изменены.
В ответ: список созданных файлов, по строке на каждый, с числом пунктов и номерами строк реестра; затем «Осталось без реакции».