Стояло в пяти местах в пяти редакциях: два разных довода, ни в одном месте оба, и три места из пяти молчали о том, что делать при неразрешившемся вызове. Плюс невысказанный инвариант: $CLAUDE_PLUGIN_ROOT ведёт только в свой плагин. Дом — shared/plugin-boundary.md, блок «граница-плагинов», семь помеченных копий. В дом вошло правило, последствия остались на местах вызова: «нет плагина задач — учёт остаётся владельцу» знает только конвейер. Оглавление адресов в CLAUDE.md проекта отклонено — второй дом раскладки, и протухший адрес в нём выходит правдоподобной строкой честной деградации. Сверка адресов уходит машине, записана в TODO разделом 5.
138 lines
11 KiB
Markdown
138 lines
11 KiB
Markdown
# Что осталось сделать
|
||
|
||
**Здесь только работы и их порядок.** Чего здесь нет намеренно:
|
||
|
||
- **риски, открытые вопросы и принятые пределы** — [REMAINING.md](REMAINING.md);
|
||
- **почему решено так** — [DECISIONS.md](DECISIONS.md), записи датированы;
|
||
- **шаги повышения проекта с версии канона на версию** — журнал версий
|
||
([changelog.md](av-dev-docs/skills/canon/references/changelog.md)). Пересказ их
|
||
сюда был бы вторым домом, и прежний план на этом уже разъезжался: он повторял
|
||
записи версий 3, 4 и 5 построчно, и половина повторов протухла молча.
|
||
|
||
Сделанное отсюда **удаляется, а не помечается галочкой**. След остаётся в
|
||
коммитах и в `DECISIONS.md`; список из двух сотен `[x]` перестают читать целиком,
|
||
и живые пункты в нём теряются — прежний план умер именно так.
|
||
|
||
## Где мы сейчас
|
||
|
||
Плагинов четыре, и каждый ставится отдельно: `av-dev-docs` (канон документов и
|
||
их содержимое), `av-dev-tasks` (задачи и цели), `av-dev-pipeline` (SDD и конвейер
|
||
ревью, он же заводит OpenSpec), `av-dev-git`. Общее, что нужно нескольким
|
||
дословно, живёт домом в `shared/` и уезжает копиями.
|
||
|
||
Канон документов — **версия 11**. Живые проекты стоят на 2–3 и на плагине
|
||
`av-dev-pm`, которого больше нет.
|
||
|
||
## 1. Живые проекты — вернуть в рабочее состояние
|
||
|
||
Блокирует всё остальное: под текущим каноном не стоит ни один проект, и ни один
|
||
скилл, кроме `docs.py check`, не исполнялся на живом коде ни разу
|
||
(см. REMAINING, «Что ещё не сделано»).
|
||
|
||
### healthlog — первым
|
||
|
||
- [ ] переустановить плагины: снять `av-dev-pm`, поставить `av-dev-docs` и
|
||
`av-dev-tasks`. `marketplace update`, затем `plugin update` — одного шага
|
||
мало (README, «Обновление»)
|
||
- [ ] удалить проектные копии: `.claude/skills/healthlog-{task,review}-pipeline`
|
||
и девять `.claude/agents/healthlog-review-*.md`. Они прошлого поколения и
|
||
после переезда указывают на документы, которых уже не будет
|
||
- [ ] `av-dev-docs:canon` в режиме `adopt` — он приведёт проект к канону 11
|
||
сразу, картой и с подтверждением. Файл-в-файл здесь не расписан: раскладку
|
||
знает скилл, и второй перечень разошёлся бы с ним
|
||
- [ ] каталог задач — в `tasks/` корня (канон 11), не в `docs/tasks/`. Скилл
|
||
задач зовётся из `adopt` сам
|
||
- [ ] гейт проекта: три шага вместо одного — `docs.py check`, `tasks.py check
|
||
--dir tasks`, `openspec.py check`. **Второй и третий раньше не были
|
||
нужны:** согласованность задач тянул за собой `docs.py`, форму `config.yaml`
|
||
он же. Теперь оба молчат, и без своих шагов дрейф перестанет ловиться
|
||
- [ ] разобрать урожай `doc-consistency` и `doc-code-drift` порциями — правило
|
||
единственного дома на живом проекте не проверял никто
|
||
|
||
### jellybit — после калибровки
|
||
|
||
Порядок не произволен: замер (раздел 3) блокирует переезд jellybit, и только его.
|
||
|
||
- [ ] то же, что у healthlog: плагины, проектные копии, `adopt`, каталог задач,
|
||
гейт
|
||
- [ ] проектные копии здесь опаснее: скиллы названы `task-pipeline`,
|
||
`review-pipeline`, `task-batch` — **ровно как в плагине**, и короткое имя
|
||
может увести в устаревшую копию молча (REMAINING)
|
||
|
||
## 2. Учёт работ без спринтов
|
||
|
||
Решено: спринты отменяются, беклог и роадмап остаются. Причина — процесс идёт
|
||
задача за задачей, и замороженный набор перестал что-либо удерживать.
|
||
|
||
- [ ] снять спринт: `SPRINT.md`, команды `sprint *`, переходы схемы состояний,
|
||
правило «задача живёт в одном индексе за раз» упрощается до беклога
|
||
- [ ] **приоритет — явный порядок строк в беклоге.** Правило 4 скилла задач
|
||
(«порядка нет, есть цель») переписывается целиком: оно обосновано тем, что
|
||
«что делать дальше» отвечает набор спринта, — а набора больше нет.
|
||
Записать, что приоритет это **свойство очереди, а не задачи**, и потому его
|
||
дом индекс: то же исключение из правила 2, что уже есть у «в каком индексе
|
||
лежит задача, знают индексы»
|
||
- [ ] **перевесить гейт готовности.** Схема типа (обязательные разделы, ≥2
|
||
критерия, границы) проверяется на `sprint take`. Спринта нет — момента нет;
|
||
нужен `tasks.py ready <слаг>` или `check --task <слаг>` на входе пайплайна,
|
||
иначе задача уедет в работу без критериев приёмки
|
||
- [ ] `check --fix`: восстановленная строка индекса теряет позицию, а позиция
|
||
теперь и есть приоритет. Класть в конец категории и печатать пометкой, что
|
||
приоритет назначен не человеком
|
||
- [ ] `session` → скилл груминга внутри `av-dev-tasks`: пересортировка беклога,
|
||
разбор вопросов, переоценка. `references/sprint.md` в мусор, `cadence.md`
|
||
переписать под ритуал без спринта
|
||
- [ ] запись в журнал версий канона: проектам надо снести `SPRINT.md` и
|
||
расставить порядок
|
||
|
||
## 3. Калибровка — блокирует переезд jellybit
|
||
|
||
- [ ] замер на четырёх находках healthlog: скелет из `null`, откат бинаря,
|
||
канонизация в транзакции, `-1 >= -1`. Цена и ожидаемый исход — REMAINING,
|
||
«Главный незакрытый риск»
|
||
|
||
## 4. Пайплайн одной задачи — три этапа
|
||
|
||
Обкатывается на healthlog после разделов 1 и 2. Пайплайн нескольких задач на
|
||
паузе намеренно.
|
||
|
||
- [ ] **этап 1** — первичный ресерч и смысл задачи. Заканчивается дешёвым
|
||
подтверждением: две строки «понял так, собираюсь делать это». Без него
|
||
проверка «то ли я делаю» приходит после готового дизайна, то есть когда
|
||
ошибка стоит дороже всего
|
||
- [ ] **этап 2** — propose, дизайн, ревью дизайна, краткое объяснение решения.
|
||
Заканчивается полноценным чекпоинтом
|
||
- [ ] **этап 3** — код, ревью, архивация. Автоматически: дизайн уже согласован.
|
||
Решить, что делает этап, когда ревью находит расхождение **с утверждённым
|
||
дизайном**: находка внутри дизайна дожимается сама, находка, отменяющая
|
||
дизайн, отменяет и чекпоинт и обязана всплыть к человеку
|
||
- [ ] перемерить `review-pipeline` тем же вопросом, что и проект целиком:
|
||
сколько из пяти стадий реально смотрятся глазами. 1028 строк, и весь
|
||
автоматический этап держится на них
|
||
|
||
## 5. Стык плагинов — проверка адресов
|
||
|
||
Не блокирует ничего и делается после раздела 1: писать чекер лучше, когда
|
||
`adopt` на живом проекте покажет, какие адреса называются вслух. Правило
|
||
обращения к соседу дом уже получило (`shared/plugin-boundary.md`, решение 54) —
|
||
осталась вторая половина.
|
||
|
||
- [ ] `scripts/addresses.py`: владелец отдаёт перечень своих адресов машинно
|
||
(константа, по которой он и так проверяет раскладку, — `docs.py` и
|
||
`tasks.py`), чекер грепает чужие деревья и падает на адресе, которого у
|
||
владельца нет. **Зачем машина, а не внимание:** протухший адрес в проходе
|
||
ревью попадает в механизм честной деградации и выходит правдоподобной
|
||
строкой «документа в проекте нет» (решение 54, вывод 179)
|
||
- [ ] форма адреса нормализуется до имени темы: `docs/security.md`,
|
||
`docs/security/` и `docs/security.*` — одна запись. Иначе чекер начнёт
|
||
требовать выбора формы, которую канон сознательно оставляет проекту
|
||
- [ ] упоминание **отставленного** адреса в чужом плагине — тоже находка:
|
||
карта RETIRED у `docs.py` уже есть, и сейчас её не сверяет никто. Журнал
|
||
версий из проверки исключается — задним числом он не переписывается
|
||
|
||
## 6. Обкатка
|
||
|
||
- [ ] один-два цикла healthlog на новом процессе; наблюдение к первой обкатке —
|
||
не выродились ли «границы покрытия» в шаблон (REMAINING, «Открытые
|
||
вопросы»)
|