Commit Graph
3 Commits
Author SHA1 Message Date
avandClaude Opus 5 f0dd8f70c1 openspec уехал в конвейер: заводит его пайплайн, канон только высказывается
Версия 7 объявила openspec/ слотом канона: init его заводил, adopt тоже, образец
config.yaml лежал в скелетах, отсутствие каталога docs.py считал отказом. Разрез
был проведён не там. По OpenSpec работает конвейер — без каталога не запускаются
ни opsx:propose, ни ревью дизайна, ни сверка требований, — а канон документов о
нём только высказывался. Проект, которому конвейер не нужен, получал отказ за
отсутствие того, чем не пользуется.

Появился скилл av-dev-pipeline:openspec: заводит каталог, заменяет
закомментированный пример в config.yaml настройкой, объясняет разрез между
ссылкой и пересказом — утверждение, опровергаемое открытием другого файла, это
пересказ; строка, говорящая какой файл открыть, это ссылка. Образец переехал туда
же, в references/config-skeleton.md, а в скелетах канона остался указатель.

init и canon adopt OpenSpec больше не заводят, а зовут скилл конвейера через
пространство имён. Вызов не разрешился — плагина конвейера нет, и это строка
доклада, а не поломка: docs.py о каталоге тогда тоже молчит. Отсутствие openspec/
стало неприменимостью вместо отказа, остальные четыре проверки формы идут только
при живом каталоге. На фикстуре без openspec дрейф упал с 10 пунктов до 9.

Что осталось на месте и названо честно: проверка формы config.yaml и сторож
версии (docs.py openspec-form) пока живут в скрипте канона. Перенести их значит
завести в конвейере свой скрипт, а этого у него нет ни одного. У файла сейчас два
плагина — один заводит, другой проверяет, — и это временное состояние, а не
задуманное; в журнале версий оно записано так же.

Канон повышен до версии 9. Запись не двигает ни одного файла проекта: меняется
только то, кто их заводит. Но в ней названа потеря, которую легко не заметить —
проект по OpenSpec без установленного пайплайна теперь не услышит от docs.py
ничего про свою настройку, и молчание это законное.

Гейт зелёный, скиллов стало десять.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 14:17:19 +03:00
avandClaude Opus 5 1f31ac6afd канон отпустил каталог задач: docs.py не зовёт tasks.py, конфиг разъехался
Пока владелец был один, docs/tasks/ числился слотом канона: docs.py требовал
каталог, звал внутрь чужой скрипт подпроцессом и выдавал его дрейф за свой, а
настройки задач жили ключом tasks в docs/.pm.json. Для проекта, поставившего
только документы, всё это отказ на ровном месте — задач он не ведёт, и требовать
их не за что.

Раскол вскрыл это немедленно и молча: check_tasks искал tasks.py по пути
parents[2]/tasks/scripts, то есть внутри своего плагина, и после переезда
скатывался в ветку «скрипт не найден» на каждом прогоне. Проверка выглядела
живой и не проверяла ничего.

Теперь docs.py про задачи не говорит ни слова: check_tasks снят целиком, каталог
остаётся в NOT_DOCS, его отсутствие дрейфом не считается. Канон резервирует место
в docs/ и внутрь не смотрит.

Дом настроек каталога задач вернулся в свой файл — <каталог>/.tasks.json. Прежний
ключ tasks в docs/.pm.json читается, только когда своего файла нет, и скрипт
говорит, куда его перенести; есть оба — побеждает свой, и об этом тоже говорится
вслух. Порядок именно такой, потому что docs/ принадлежит другому плагину: дом
настроек в чужом дереве это дом, которого у половины проектов нет.

Заодно закрыта дыра, которую сам же и открыл первый вариант правки: битый
docs/.pm.json ронял бы задачи даже при живом своём конфиге. Чужой файл здесь
только повод для замечания, и его поломка не наша. Проверено на четырёх случаях —
только чужой конфиг, оба, свой плюс битый чужой (код 0), только битый чужой
(код 3, окружение).

Канон повышен до версии 8 с записью, выполнимой upgrade. В ней названо и то, что
легко потерять: раньше согласованность задач тянул за собой docs.py check, и
проект, у которого в гейте стоял только он, обязан добавить второй шаг — иначе
дрейф индексов перестанет ловиться молча.

Гейт зелёный. Оба скрипта прогнаны: docs.py check на фикстуре про задачи не
упоминает, tasks.py check код 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-09 14:12:08 +03:00
avandClaude Opus 5 00ddfb0dde av-dev-pm расколот на av-dev-docs и av-dev-tasks
Плагин владел двумя разными вещами сразу — документацией проекта и учётом работ,
— и это мешало обеим. Канон нельзя было поставить без задач, задачи без канона, а
язык проектных текстов лежал внутри скилла 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>
2026-08-09 14:06:26 +03:00