Три слова жили в текстах, не входя в закрытый словарь правила 6, — то есть
выглядели словарём, не будучи им. Решение по каждому своё.
Чекпоинт и синк внесены с определением: первый называет плановый стоп, на
котором ждут ответа, второй — сверку каждого документа канона с работой, с
обязательным отрицанием по нетронутым. Русские замены обоих называют либо исход,
либо обряд, но не саму работу.
Опиниативный заменён на «проход с мнением» в 13 местах и добавлен к снятому
рядом с конфляцией и гайдом. Копии правил пересобраны resync.py; версию канона
это не двигает — в репозиторий проекта отсюда ничего не уезжает.
Правило границы моё, копий восемь — и нарушал его я же.
- путь в дерево чужого плагина снят из пяти мест; маркер копии, уезжающий
в проект скелетом, оставлен, но сказано, что сама пара маркеров не едет
- короткое имя чужого скилла в четырёх местах стало полным
- стык «урожай ревью → задачи» не был назван ни с одной стороны, хотя
механика написана с обеих; теперь назван, с веткой «плагина нет»
- resolve звал av-dev-git:commit без строки доклада и пересказывал формат
коммита, нарушая собственное «ссылайся, не пересказывай»
- doc-wording обещал момент вызова, которого не исполнял никто. Правило:
звонящий — тот, кто только что писал текст. Вызов появился шагом в docs,
init, adopt и upgrade; healthcheck по-прежнему его не зовёт
- openspec.py искал SHALL по всему файлу, а образец даёт его в context —
проверка молчала ровно в том случае, ради которого написана
- фаза 2 review-rubric была недостижима; проход стал судить задуманное,
а не код, и это сходится с тем, что о нём говорит конвейер
- rules.tasks в образце конфига, ветка «записи задачи нет» у review-scope,
возвраты на чекпоинт в схеме resolve, старшинство правила дельта-спек
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Аудит четырьмя сабагентами показал систематическую дыру: механика правилась,
а описывающее её вовне — нет. Дороже всего скелеты: они уезжают в проект.
- слоты спринта в скелете CLAUDE.md стали слотами груминга, имена взяты
у groom, а не выдуманы заново — журнал версии 12 их уже назвал
- "canon": 11 в двух образцах стал плейсхолдером: литерал протухал третий
раз подряд, а незамещённый плейсхолдер ломает разбор громко
- обещание, что docs.py проверяет форму openspec/config.yaml, снято из трёх
мест; владелец назван полным именем, с оговоркой об отсутствии плагина
- adopt ставил в гейт проекта один шаг из трёх; соседские ставятся по следу
присутствия, следа нет — строка доклада
- битая ссылка на tasks/ROADMAP.md из скелета паспорта
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Плагин владел двумя разными вещами сразу — документацией проекта и учётом работ,
— и это мешало обеим. Канон нельзя было поставить без задач, задачи без канона, а
язык проектных текстов лежал внутри скилла canon и потому принадлежал половине.
Теперь плагина два, каждый ставится сам по себе.
av-dev-docs: скиллы canon, docs, init; агенты doc-consistency, doc-code-drift,
doc-wording; скрипт docs.py. av-dev-tasks: скиллы tasks, session; агенты
task-form, task-wording; скрипт tasks.py.
Между собой они зовутся через пространство имён, а не по пути в чужое дерево.
Все относительные ссылки, пересекшие границу плагина, сняты: tasks больше не
указывает в canon, canon не указывает в tasks. Вместо ссылки — имя скилла и
оговорка, что вызов может не разрешиться, и это исход, а не поломка.
То, что нужно обоим дословно, стало вторым общим домом. Словарь «Сопровождение и
эксплуатация» назван в трёх местах трёх плагинов — секция роадмапа, раздел
«Эксплуатация» в architecture.md, тема ревью operations — и ни один из трёх им не
владеет; он уехал в shared/operations.md, а canon.md и скилл задач везут копии.
Три перечня «чем держат проект» уже разъезжались на «метриках и логах» против
«мониторинга», так что ссылка тут не годится: плагин, поставленный в одиночку,
получил бы указатель в никуда. Тем же способом язык: у av-dev-tasks появилась
своя копия language.md.
Копий стало 18 при 8 домах.
Переименования разведены по смыслу, а не заменой строки: где речь о каноне —
av-dev-docs, где об учёте задач — av-dev-tasks. В пайплайне таких мест
одиннадцать, и оба адресата там встречаются вперемешку.
Журналы (DECISIONS, TODO, HISTORY) намеренно не тронуты: они описывают состояние
на момент записи. По той же причине оставлена наблюдённая строка в комментарии
docs.py — она цитирует конфиг живого проекта, а не называет плагин.
Не входит в этот заход и названо отдельно: слияние canon и docs в один скилл,
разделение docs/.pm.json на два конфига и переезд openspec в пайплайн.
Гейт зелёный: копии, фронтматтеры, диаграммы, json. Оба скрипта прогнаны после
переезда — docs.py version и tasks.py check на фикстуре.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>