Files
dev-skills/REMAINING.md
T
avandClaude Opus 5 c3e0a6d01f удалён av-dev-backlog: заморозка стоила дороже, чем удаление
Плагин был помечен устаревшим решением Q и жил до перевода jellybit.
Удалён раньше этого срока: условие пережило свою причину.

Заморозка выглядела бесплатной, а платила собой в каждой проверке
репозитория — exclude в pyproject.toml, SKIP_DIRS в copies.py, два абзаца
README, оговорка в описании маркетплейса, чтобы не ловить триггер
«добавь задачу в беклог». Пять исключений ради 706 строк, которые никто
не читает, и каждое надо объяснять всякий раз, когда спрашивают, почему
проверка обходит каталог.

Причина условия отпала раньше названного срока. docs/backlog/ читает не
backlog.py, а av-dev-pm:tasks — adopt.md и адаптер в tasks.py держат ту
же раскладку как вход миграции. Плагин перестал быть единственным, кто
её знает, ещё когда писался adopt, и «живёт до перевода последнего
проекта» с тех пор охраняло пустоту. Перевод jellybit на канон это не
задевает.

Порядок вышел обратный ожидаемому: плагин удалён из маркетплейса, а с
jellybit снят после. Ожидалась ручная чистка enabledPlugins и
installed_plugins.json, но claude plugin uninstall отработал штатно — он
идёт по реестру, а не по манифесту маркетплейса. Раздел «Снятие» в README
переписан с частного случая на общую процедуру, предупреждение заменено
проверенным фактом.

Записи Q и HH получили парные статусы, тема 30 в DECISIONS несёт причины
и три следствия, пункт 5 TODO отмечен, открытый вопрос из REMAINING убран.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 12:32:29 +03:00

109 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Остатки, открытые вопросы и принятые пределы
Состояние пересобирается по ходу работы; счётчика тем и коммитов здесь нет
намеренно — он протухает молча, а двигать его некому. Что и когда решено —
[DECISIONS.md](DECISIONS.md), записи датированы.
План работ — [TODO.md](TODO.md). Решения с причинами — [DECISIONS.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](TODO.md), раздел 3; здесь только цена: замер стоит
перед переездом jellybit и блокирует его (решение 39), а ожидаемый исход уже
назван выше.
## Что ещё не сделано
Список работ — в [TODO.md](TODO.md). Здесь только то, что стоит держать в голове
отдельно:
- **Ни один скилл не прогонялся на живом проекте.** `docs.py` прогнан на
healthlog и jellybit в режиме `check` и находит осмысленный дрейф; `init`,
`canon adopt`, `canon upgrade` и скилл `docs` не исполнялись ни разу.
- **Проектные копии в healthlog и jellybit.** Два `.claude/skills/` и одиннадцать
`.claude/agents/` старого поколения. У jellybit хуже: его скиллы названы
`task-pipeline`, `review-pipeline`, `task-batch`**ровно как в плагине**.
Claude Code не переопределяет их, а держит обе пары, так что короткое имя может
увести в устаревшую копию, и молча.
## Открытые вопросы
**`doc-consistency` не различает «про нас» и «про то, что мы производим».**
Первый прогон на самом dev-skills предъявил репозиторию правило из
`av-dev-git/skills/commit/SKILL.md` — а это продукт, уезжающий в чужие проекты,
а не правило, которому подчиняется маркетплейс. На проекте под каноном такой
путаницы нет (там документы описывают сам проект), поэтому в устав это пока не
дописано: сперва посмотреть, встретится ли класс ещё раз.
**Как проверять, что канон не разошёлся с проектами после `upgrade`.** `canon
check` сверяет версию, но не то, что миграционные записи journal'а применены
верно. Проект может нести `"canon": 2` и не иметь того, что версия 2 требовала.
**Форма ADR при пересмотре решения.** Парный статус («старая запись получает
`заменено на`») судит агент `doc-consistency` — правило 6 его устава. Открытым
остаётся не это, а охват: агент зовётся на синке по документам, которых синк
касался, и пересмотр, отменяющий решение из документа, к которому не
притрагивались, он не увидит. Механической проверки по-прежнему нет.
## Известные пределы — приняты, чинить не планируется
**Транзакций на несколько файлов нет.** POSIX её не даёт без журнала. Окно сжато
до цепочки `rename` без ввода-вывода, а всё, что в окне может разъехаться,
сделано производным и восстанавливается `check --fix` без потерь.
**Оракул в критериях приёмки проверяется эвристикой.** Число пунктов проверяется
жёстко, наличие оракула — по слову, и это **только замечание**. В тексте прямо
сказано, что проверено меньше, чем требуется.
**Recall прохода по конвенциям равен качеству конвенций проекта.** Своего списка
у него нет: критерий берётся из `docs/conventions/`. На проекте с тонкими
конвенциями проход почти пуст, и charter это признаёт вслух.
**Доменного словаря в каноне нет.** Проходы получают факты, но не термины;
словарь строится каждый раз заново из спек и архитектуры. Цена не измерена.
**Смысловые дубли ловит только агент.** `docs.py` видит раскладку, но не то, что
`docs/specs/recognition.md` описывает то же, что capability `recognition`.
Граница объявляется вслух в каждом отчёте — это единственная защита от
«соблюдено» на проекте с тремя лишними файлами.
**Приёмщик и исполнитель совпали.** Граница «пайплайн не закрывает задачу» снята
сознательно (решение P); три защиты из раздела «Стимулы» держатся теперь текстом,
а не механикой. Реальные опоры — сохранённый отчёт триажа, `SPRINT.md` под git и
`reopen`. Это записано в самом скилле, а не спрятано.
**Копия правила в шаблонах проекта.** `adr/README.md` и `review.md` уезжают в
репозиторий и обязаны там что-то говорить, поэтому правило канона в них
копируется намеренно. Расхождение копии с домом ловит `scripts/copies.py`
но только у **помеченной** копии, и только внутри маркетплейса. Остаётся на
человеке двое: пометить копию и завести запись в журнал версий, когда правка
уже уехала в проект.