Сценарий решения идёт от предложения сразу к чекпоинту и коду: стадия ревью
дизайна упразднена целиком, review-scope запускается после apply и меряет
размер по диффу, сложность — сверкой обещанных границ с тронутыми. Чекпоинт
остался единственным плановым стопом и стоит теперь до кода. review-rubric
конвейером не зовётся, слот рубрики в скелете config.yaml снят. Журнал —
тема 74.
Повтор той же команды на неизменившемся дереве снят: ступень автотестов
засчитывает прогон, сделанный шагом opsx:apply или шагом гейта обслуживания.
Признак — отпечаток рабочего дерева, снятый дважды; любое расхождение ведёт
к честному прогону. Журнал — тема 73.
Спеки, код и правки по находкам ревью пишет отдельный агент: оркестратору
оставлены задание, возврат, чекпоинт, сверка плана с исходом и доклад.
Заведён раздел «Кто пишет» в SKILL.md, переписаны шаги 2, 4, 6, 7 решения и
шаги 2, 4 обслуживания, у разведки названо, почему исполнителей нет.
Задачу часто нужно решить прямо по описанию в разговоре, без файла в
каталоге — так её берёт и opsx:propose. Скилл вход текстом объявлял, но
прорабатывала его одна разведка: у решения и обслуживания шаг «прочитать
задачу» читал разделы записи, шаг закрытия закрывал запись, признак
обслуживания опирался на объявленный автором тип, а критерии приходили
«от проекта».
Форм постановки теперь две, и они равноправны. Отпадают ровно те шаги, у
которых пропал предмет: ready гонять нечего, закрывать нечего. Ни один
шаг с предметом не выпал — гейт, ревью, синк, чекпоинт и коммит идут как
обычно, а сценарий, метку и глубину форма не выбирает.
Взамен пропавшего — названное вслух первой репликой: как понята
постановка, каким типом её считаешь и где проводишь границу. Человек,
написавший текст, сидит в этом же разговоре и поправляет одной фразой;
названный после работы тип не признак, а объяснение готового диффа.
По сценариям: решение добирает недостающие критерии приёмки на чекпоинте
и считает их данными только после ответа; обслуживание объявляет их
отсутствие строкой (чекпоинта у него нет) и само называет границы,
которых текст не дал; разведка увязана с общим правилом, а её шаг
закрытия отпал с оговоркой про единственный след — записанный ответ.
Записи в каталог скилл по-прежнему не заводит: ни перед работой, ни
задним числом ради закрытия. Похожую строку беклога не разыскивает.
Перечень осей пополнен формой постановки: по ней ветвятся готовность,
источник типа и наличие закрытия.
Команда stage была дефектна по шести пунктам, и все шесть подтверждены
прогоном: не звала raw_last (переход оставлял каталог красным), не
переписывала шапку беклога (индекс продолжал объявлять прежнюю стадию),
шла в обход write_config, молча пропускала файлы с непересобираемой метой,
ломалась на беклоге без заголовков и схлопывала полки при первом
объявлении стадии.
Объявление и смена разведены: объявление беклога не трогает вовсе, смена
трогает состав секций только по явному --sections, а слить полки скрипт
не берётся ни в одном случае. Абзац шапки размечен парой «стадия», и
расхождение с конфигом стало обычным дрейфом.
Отказ по недостающей строке индекса запирал запись, пережившую упразднение
роадмапа: edit, close и reopen теперь заводят или пропускают строку сами.
Прочее: регистр stage нормализуется при чтении; --fix снимает мёртвые теги
и у неразобранных записей; move отказывает переставлять сырьё; adopt
держит место сырья; docs.py bump двигает одну запись журнала за раз;
tasks.py получил перечень упразднённых адресов, и гейт наконец видит
собственное упразднение ROADMAP.md.
Запись «Версия 3» переписана по прогону на игрушечном проекте: прежний
порядок шагов был неисполним. Закрыты дыры модели стадий (пересмотр плана
стройки стал сценарием, приёмка отвязана от груминга, from-review,
research и adopt получили развилку по стадии, перечень осей пересчитан) и
находки, старшие этой сессии: review-triage получил режим без метки, три
списка проектных копий сведены к дому с проверяемыми копиями, пять
пересказов правил стали помеченными копиями или ссылками, language.md
перестал объявлять юрисдикцию над чужим плагином.
- каталог скилла и все вызовы переименованы: префикс `doc-` называл материал,
а скилл занят формой — раскладкой всех частей проекта и общим повышением
версии, включая каталог задач;
- README перестроен: `canon` вынесен из семейства документов отдельным блоком
и отдельным узлом графа, правило префиксов переформулировано, у документов
уточнено владение — содержимым, а не раскладкой;
- заведена запись 2 журнала версий: в проекте ничего не переехало, но путь к
`docs.py` и имя вызова живут в гейте и в `CLAUDE.md` проекта и сломаются
молча;
- прежние адреса в записи 1 и в журнале решений оставлены как есть: журнал
описывает состояния, которые были, и задним числом не переписывается.
Восемнадцать веток «плагина нет» описывали недостижимое: скиллы и агенты теперь
в одном плагине и разрешаются всегда. Где предмет всё же может отсутствовать —
ветка переписана на след в проекте (нет 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, ссылки на язык в закрытом журнале.
Дом shared/plugin-boundary.md переехал в shared/absence.md: отсутствовала всё
это время не установка плагина, а часть раскладки проекта, и узнавалась она
следом на диске. Перечень внешнего сократился до двух — opsx и av-dev-git.
Ветки «плагина нет» переписаны на «этой части в проекте нет»; там, где ветка
существовала только ради неразрешимого пути в чужое дерево, она снята вовсе.
Внутриплагинные копии языка и словаря сопровождения сняты: два справочника по
213 строк и один по 34 заменены ссылкой на общий дом. Копии остались там, где
текст обязан лежать внутри промпта, — в уставах вычитки. Заодно починены пути
$CLAUDE_PLUGIN_ROOT и относительные ссылки, разъехавшиеся с новыми именами
каталогов.
Каталоги, агенты и общие дома переехали в av-dev/; скиллы названы по прежнему
плагину — doc-*, task-*, code-*, с двумя смысловыми именами вместо тавтологии:
doc-sync вместо docs, task-track вместо tasks. Манифесты сведены к двум
плагинам. Пространства имён вызовов и пути внутри дерева переписаны машинно;
проза, которая называет прежние плагины отдельными, идёт следующим шагом.