Эксперимент: по сабагенту на каждый скилл av-dev-pm, задача — переписать текст более простыми словами, но только там, где уверен и без потери смысла и точности. Нормой служил устав языка самого проекта, language.md, включая его раздел «Порог правки»: правка без нарушенного правила не делается. 36 правок в двенадцати файлах, +64/-63 — почти строго замена, а не переписывание. Правили залог (пассив с названным деятелем в творительном), отглагольные существительные, параллельность перечней, канцелярит «является», пару garden-path и одно двойное отрицание. Контракт не задет нигде: в диффе нет изменённых строк-заголовков, а код-спаны встречаются ровно парой минус-плюс, то есть ни имя, ни флаг, ни путь не переписаны. Отчёты «что рассматривал и не тронул» вышли длиннее отчётов о правках у всех пятерых, и это главный результат прогона. Самый частый повод остановиться — слово, живущее в четырёх файлах: конфляция, интейк, провенанс, непоймание. Правка в одном месте развела бы словарь, а править все — уже не упрощение текста скилла, а сквозной проход по репозиторию. Второй повод — формулировка, дословно повторённая в соседнем плагине: декорреляция, материализация нерешённого, «при расхождении прав текст». Шестой агент проверил все 36 правок и нашёл четыре. Перестановка слов в task-research.md развела формулу с её домом: «число без источника проход ревью обязан читать как условие» стоит в canon.md и в уставе doc-consistency, который прямо ссылается на канон как на источник. Откачено — это ровно тот класс расхождения, который сам doc-consistency и ловит. «Держит H1, мету и индекс в согласии» — управление требует дополнения, а language.md в разделе англицизмов прямо оговаривает: русский аналог звучит коряво — остаётся термин. Взят третий вариант, «согласованными». В skeletons.md «правка тянет запись, и она называет» — местоимение указывает на два женских существительных сразу. Стало «и запись называет». Четвёртая находка не откачена: правка в init/SKILL.md хорошая, но развела конструкцию с близнецом в canon/SKILL.md — выровнена вторая половина. Побочно найдена старая логическая инверсия в DECISIONS.md, решение U: «становится неотличимым, только если отрицание обязательно» — смысл вывернут, в docs/SKILL.md и во второй записи журнала он правильный. Починено. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
61 lines
4.8 KiB
Markdown
61 lines
4.8 KiB
Markdown
# 🧹 `chore` — обслуживание, наблюдаемое поведение не меняется
|
|
|
|
Зависимости, сборка, перенос, чистка, оснастка. Отвечает на **«что нужно
|
|
сделать»**, глаголом в неопределённой форме.
|
|
|
|
Общая форма записи (мета, слаг, строка индекса) — [task-format.md](task-format.md).
|
|
Здесь только то, что у этого типа своё.
|
|
|
|
## Схема
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| Заголовок отвечает на | что нужно сделать |
|
|
| Обязательные разделы | `Затрагивает`, `Критерии приёмки` |
|
|
| Допустимые сверх того | `Рамки`, `Вопросы` |
|
|
| Поле места | **Категория** — полка домена беклога |
|
|
| Цель (`goal:<слаг>`) | нет: цель — это возможность, а здесь её не появляется |
|
|
| Индекс | `BACKLOG.md` → `SPRINT.md` |
|
|
| Берётся в спринт | да |
|
|
|
|
## Адресат — разработчик, и это законно
|
|
|
|
Тест готовности спрашивает «что станет наблюдаемо иначе». У `chore` ответ
|
|
адресован **разработчику**, а не пользователю: «перестанет собираться два раза»,
|
|
«уедет последний вызов устаревшего API», «проверки гоняются одной командой».
|
|
Это ответ, а не отговорка.
|
|
|
|
**У `chore` тест готовности слабее честно, а не молча.** Пока типа не было,
|
|
такие задачи либо не заводились вовсе, либо формулировались как выдуманная
|
|
пользовательская польза — и то и другое хуже, чем сказать прямо, для кого работа.
|
|
|
|
Отсюда же граница: если после задачи меняется то, что видит пользователь, — это
|
|
не `chore`. Тип, оставшийся от первой формулировки, врёт ровно там, где по нему
|
|
отбирают.
|
|
|
|
## Алгоритм
|
|
|
|
1. **Проверить, что поведение не меняется.** Меняется — это `feature` или `fix`,
|
|
и у неё другие требования (цель, воспроизведение).
|
|
2. **Назвать, что перестанет мешать** — одной фразой, адресуясь разработчику.
|
|
«Прибраться в модуле X» — не ответ: непонятно, что изменится.
|
|
3. **Назвать границы** в `Затрагивает`. У обслуживания они часто не в коде:
|
|
конфиг и его образцы, версия зависимости, команда сборки, файл CI. Границей
|
|
считается то, у чего есть внешняя сторона и цена изменения.
|
|
4. **Написать критерии приёмки** — 2–5 утверждений с оракулами. У `chore`
|
|
оракул обычно самый дешёвый из всех типов: команда, которая раньше падала
|
|
или требовала трёх шагов, теперь отрабатывает одним.
|
|
5. **Проверить, что это не «заодно».** Обслуживание любит склеиваться в пачку
|
|
(«обновить зависимости и переписать сборку и убрать мёртвый код»). Не
|
|
мерджится порознь — это несколько задач ([split.md](split.md)).
|
|
6. **Цель не проставлять.** `chore` служит работоспособности, а не направлению,
|
|
и в набор спринта входит помимо его цели. Работа по сопровождению проекта
|
|
при этом видна в роадмапе — секцией `Сопровождение`, но целью не становится.
|
|
|
|
## Что видит машина, а что человек
|
|
|
|
`check` и `sprint take` смотрят на **наличие непустого** `Затрагивает` и на
|
|
**число** критериев — ровно то же, что у `feature`. Разница между типами здесь не
|
|
в строгости проверки, а в том, **кому адресован ответ** на «что станет
|
|
наблюдаемо иначе», — и это судит человек.
|