Восемнадцать веток «плагина нет» описывали недостижимое: скиллы и агенты теперь в одном плагине и разрешаются всегда. Где предмет всё же может отсутствовать — ветка переписана на след в проекте (нет docs/, нет каталога задач, нет openspec/); где отсутствовать нечему — снята. Туда же анонсы, обещавшие ветку, которой в разделе больше нет. Правило копий и его применение разъезжались в одном коммите: правило называло два законных случая, а absence.md разослан семью копиями по SKILL.md. Назван третий случай, и разрез проверяемый — файл, который модель получает целиком, против файла, за которым она идёт отдельным чтением. Заодно сняты объявления копий там, где копию сменила ссылка, и довод у карты домов в doc-consistency: он ссылался на отсутствие плагина, хотя устав едет вместе с плагином. Описания скиллов во фронтматтерах звали снятые короткие имена — по ним скилл не находится. task-track перестал обещать повышение: версию двигает doc-canon. Язык: сняты кросс-вызов, опцион и деградация, конверсия и «читатель» в config.py, charter'ы против уставов, замер против подсчёта, страдательный залог в журнале. Строка «настройки av-dev» в таблице отсутствия — слово «раскладка» называло и целое, и его часть. Мелкое: тема 52 в README была 64, транслит в task-wording машина не проверяет, мёртвая ветка REQUIRED в addresses.py, ссылки на язык в закрытом журнале.
13 KiB
Остатки, открытые вопросы и принятые пределы
Состояние пересобирается по ходу работы; счётчика тем и коммитов здесь нет намеренно — он протухает молча, а двигать его некому. Что и когда решено — DECISIONS.md, записи датированы.
План работ — TODO.md. Решения с причинами — DECISIONS.md. Здесь то, что не является работой из плана: незакрытые риски, честно принятые пределы и вопросы, у которых пока нет ответа.
Главный незакрытый риск
Калибровка не сделана, а уставы проходов с тех пор переписывались не раз.
Правки шли волнами: вынос в плагин (предмет проверки заменён ссылкой на раздел
брифа), переход на пути документов канона, две правки по находкам ревью, граф
порядка, ступень wide, пересмотр триггеров ступени.
references/calibration.md требует при каждой такой правке замерить, помогла ли
она, — ни одного замера не было. Числа правок здесь нет намеренно: счётчик
пришлось бы двигать вручную, и он уже однажды отстал.
Неизмеренные изменения копятся в том самом месте, где присваивается severity. Пробы готовы и синтетических не нужно — четыре реальные находки прошедшей сессии healthlog:
- скелет из
nullзатирает маршрут тренировки молча и необратимо; - откат бинаря поверх новой схемы стартует без единого слова;
- канонизация внутри транзакции — 768 МиБ пика, 5.019 с удержания блокировки;
-1 >= -1читается как «журнал разобран целиком».
Ожидаемый исход известен и его стоит проверить первым: метод переносится, а
severity деградирует. Третья находка без слота под представление данных и
настройки хранилища превращалась из critical с прогнанным оракулом в условное
наблюдение. Ровно ради этого случая канон развёл числа (docs/research/) и
настройки (docs/database.md) по разным домам и обязал проход их сшивать —
но работает ли обязанность, не проверено. Оркестратор реагирует на severity,
поэтому цена — не «не найдём», а «найдём и не починим».
Сама работа — TODO.md, раздел «Калибровка»; здесь только цена: замер стоит перед переездом jellybit и блокирует его (решение 39), а ожидаемый исход уже назван выше.
«Главный» здесь про цену, а не про очередь. Первой идёт адаптация healthlog (TODO, раздел «Живые проекты»): без неё нет проекта под каноном, на котором работают остальные скиллы. Калибровка блокирует один шаг — переезд jellybit, — а не всё подряд.
Что ещё не сделано
Список работ — в TODO.md. Здесь только то, что стоит держать в голове отдельно:
- Ни один скилл не прогонялся на живом проекте.
docs.pyпрогнан на healthlog и jellybit в режимеcheckи находит осмысленный дрейф;init,canon adopt,canon upgrade, скиллыdocs,openspecиresolveне исполнялись ни разу.openspec.py, раскол плагинов и оба чекпоинтаresolveпроверены только на фикстурах и на установке каждого плагина в одиночку. - Проектные копии в healthlog и jellybit. Два
.claude/skills/и одиннадцать.claude/agents/старого поколения — их надо снести при установке. Совпадение имён при этом больше не грозит: скиллы jellybit названыtask-pipeline,review-pipeline,task-batch, а плагин теперь даётresolve,review,openspec— ни одно имя не пересекается. Риск снят переименованием, а не устранён по существу: заведись у проекта свойreview, Claude Code держал бы обе пары, и короткое имя увело бы в копию молча.
Открытые вопросы
doc-consistency не различает «про нас» и «про то, что мы производим».
Первый прогон на самом dev-skills предъявил репозиторию правило из
av-dev-git/skills/commit/SKILL.md — а это продукт, уезжающий в чужие проекты,
а не правило, которому подчиняется маркетплейс. На проекте под каноном такой
путаницы нет (там документы описывают сам проект), поэтому в устав это пока не
дописано: сперва посмотреть, встретится ли класс ещё раз.
Как проверять, что канон не разошёлся с проектами после upgrade. canon check сверяет версию, но не то, что миграционные записи journal'а применены
верно. Проект может нести "canon": 2 и не иметь того, что версия 2 требовала.
Ответ выбран: шагом 6 upgrade зовутся оба судьи документов — проверка не
механическая, но других у существа записей нет. Останется открытым, пока не
прогнано на живом проекте: неизвестно, ловят ли они недоделанную миграцию или
только её последствия.
Не выродились ли «границы покрытия» в шаблон. Строка «что смотрели и чего не
смотрели» обязательна в докладе check, adopt, интейка, штурма и всех пяти
агентов канона и задач (doc-consistency, doc-code-drift, doc-wording,
task-form, task-wording) — девять мест, и проверить её исполнение некому:
приёмщик и исполнитель одно лицо (task-groom/SKILL.md, «Стимулы»). Выродившаяся
строка хуже отсутствия: доклад выглядит проверенным.
Приём не правится: это гипотеза об износе, а не находка, и менять работающее по догадке дороже. Наблюдение к первой обкатке на живом проекте: если в трёх докладах подряд границы покрытия совпали дословно или называют не то, чего проверка действительно не касалась, — приём выродился, и вот тогда решать.
Форма ADR при пересмотре решения. Парный статус («старая запись получает
заменено на») судит агент doc-consistency — правило 6 его устава. Охват был
открытым вопросом, пока агент звался пачкой, отобранной работой; переезд вызова
в av-dev:doc-healthcheck с пачкой «весь канон» его снял. Остаётся зазор до
ближайшего прогона healthcheck и отсутствие механической проверки — то есть
пересмотр, сделанный сегодня, судится тогда, когда позовут сверку, а не в момент
правки.
Известные пределы — приняты, чинить не планируется
Транзакций на несколько файлов нет. POSIX её не даёт без журнала. Окно сжато
до цепочки rename без ввода-вывода, а всё, что в окне может разъехаться,
сделано производным и восстанавливается check --fix без потерь.
Оракул в критериях приёмки проверяется эвристикой. Число пунктов проверяется жёстко, наличие оракула — по слову, и это только замечание. В тексте прямо сказано, что проверено меньше, чем требуется.
Recall прохода по конвенциям равен качеству конвенций проекта. Своего списка
у него нет: критерий берётся из docs/conventions/. На проекте с тонкими
конвенциями проход почти пуст, и charter это признаёт вслух.
Доменного словаря в каноне нет. Проходы получают факты, но не термины; словарь строится каждый раз заново из спек и архитектуры. Цена не измерена.
Смысловые дубли ловит только агент. docs.py видит раскладку, но не то, что
раздел docs/architecture.md описывает поведение, уже записанное capability
recognition.
Граница объявляется вслух в каждом отчёте — это единственная защита от
«соблюдено» на проекте с тремя лишними файлами.
Приёмщик и исполнитель совпали, и опор стало меньше. Граница «пайплайн не
закрывает задачу» снята сознательно (решение P); защиты держатся текстом, а не
механикой. Реальных опор было три, осталось две: сохранённый отчёт триажа и
reopen (индексы под git показывают закрытие, потому что оно коммитится
отдельным коммитом учёта). Третья — приёмка шагом сессии — ушла вместе со
спринтами: у неё больше нет момента, и происходит она только тогда, когда
что-то бросилось в глаза на груминге. Это записано в самих скиллах, а не
спрятано.
Копия правила в шаблонах проекта. adr/README.md и review.md уезжают в
репозиторий и обязаны там что-то говорить, поэтому правило канона в них
копируется намеренно. Расхождение копии с домом ловит scripts/copies.py —
но только у помеченной копии, и только внутри маркетплейса. Остаётся на
человеке двое: пометить копию и завести запись в журнал версий, когда правка
уже уехала в проект.