README, HISTORY и REMAINING пересобраны под новую картину
- README: три плагина, канон документов, явное обновление маркетплейса - HISTORY: сжатый AGENTIC-TASKS — что отвергнуто и почему, числа первого замера - REMAINING: главным риском названа несделанная калибровка при двух подряд переписываниях charter'ов; закрытые разбором вопросы убраны
This commit is contained in:
+73
-108
@@ -1,137 +1,102 @@
|
||||
# Остатки и открытые вопросы
|
||||
# Остатки, открытые вопросы и принятые пределы
|
||||
|
||||
Состояние на 2026-08-03, после ввода `av-dev-tasks` и `av-dev-pipeline`
|
||||
(коммиты `9219f4a` → `20dca29` → `0eca206`).
|
||||
Состояние на 2026-08-03, после разбора восьми тем и первых двух коммитов
|
||||
реализации (`ad1779b`, `9cef452`).
|
||||
|
||||
Плагины написаны, проверены тремя проходами ревью и починены по находкам. Но
|
||||
**ни один из них ещё не подключён ни к одному проекту**, а часть работы
|
||||
осознанно отложена. Здесь то, что осталось, — с причинами, потому что через
|
||||
месяц причина забывается раньше факта.
|
||||
План работ — [TODO.md](TODO.md). Решения с причинами — [DECISIONS.md](DECISIONS.md).
|
||||
Здесь то, что **не** является работой из плана: незакрытые риски, честно принятые
|
||||
пределы и вопросы, у которых пока нет ответа.
|
||||
|
||||
## Что осталось сделать
|
||||
## Главный незакрытый риск
|
||||
|
||||
Порядок примерно соответствует зависимостям: верхнее мешает нижнему.
|
||||
**Калибровка не сделана, а charter'ы переписаны второй раз.**
|
||||
|
||||
### 1. Калибровка переписанных проходов
|
||||
Первый раз девять charter'ов правили при выносе в плагин: предмет проверки
|
||||
заменили ссылкой на раздел брифа. `references/calibration.md` требует при такой
|
||||
правке замерить, помогла ли она, — **замера не было**. Второй раз их переписали
|
||||
сейчас, коммитом `9cef452`: ссылка на раздел брифа заменена путём документа
|
||||
канона.
|
||||
|
||||
Все девять charter'ов ревью переписаны при выносе в плагин: предмет проверки
|
||||
заменён ссылкой на раздел брифа. `references/calibration.md` самого плагина
|
||||
требует при такой правке замерить, помогла ли она, — **замера нет ни одного**.
|
||||
|
||||
Оценка «проход всё ещё нашёл бы находку» получена рассуждением по текстам, и
|
||||
ревьюер честно пометил её `Confidence: medium`. По правилам плагина такая
|
||||
оценка не поднимается выше `major`.
|
||||
|
||||
Пробы готовые, синтетических не нужно — четыре реальные находки прошедшей
|
||||
сессии healthlog:
|
||||
Два неизмеренных изменения подряд **в том самом месте, где присваивается
|
||||
severity**. Пробы готовы и синтетических не нужно — четыре реальные находки
|
||||
прошедшей сессии healthlog:
|
||||
|
||||
- скелет из `null` затирает маршрут тренировки молча и необратимо;
|
||||
- откат бинаря поверх новой схемы стартует без единого слова;
|
||||
- канонизация внутри транзакции — 768 МиБ пика, 5.019 с удержания блокировки;
|
||||
- `-1 >= -1` читается как «журнал разобран целиком».
|
||||
|
||||
Ожидаемый результат замера известен и его стоит проверить в первую очередь:
|
||||
метод переносится, а **severity деградирует** — третья находка без слота под
|
||||
представление данных и настройки хранилища превращается из `critical` с
|
||||
прогнанным оракулом в условное наблюдение. Оркестратор реагирует на severity,
|
||||
поэтому цена обобщения — не «не найдём», а «найдём и не почините».
|
||||
Ожидаемый исход известен и его стоит проверить первым: метод переносится, а
|
||||
**severity деградирует**. Третья находка без слота под представление данных и
|
||||
настройки хранилища превращалась из `critical` с прогнанным оракулом в условное
|
||||
наблюдение. Ровно ради этого случая канон развёл числа (`docs/research/`) и
|
||||
настройки (`docs/database.md`) по разным домам и **обязал проход их сшивать** —
|
||||
но работает ли обязанность, не проверено. Оркестратор реагирует на severity,
|
||||
поэтому цена — не «не найдём», а **«найдём и не починим»**.
|
||||
|
||||
### 2. Завести брифы
|
||||
Замер стоит перед переездом jellybit и блокирует его (решение 39).
|
||||
|
||||
Скилл `av-dev-pipeline:project-brief` написан и собирает бриф из `CLAUDE.md`,
|
||||
архитектуры, Taskfile и конвенций. Но брифов нет ни у healthlog, ни у jellybit,
|
||||
а без них конвейер идёт в деградированном режиме: `critical` по основанию
|
||||
«нарушен инвариант проекта» не присваивается.
|
||||
## Что ещё не сделано
|
||||
|
||||
При починке бриф заполнялся на обоих проектах для проверки контракта (841 и
|
||||
734 строки) — эти заполнения были **черновыми, в скретчпаде**, и в проекты не
|
||||
попали. Повторить и положить в репозитории.
|
||||
Список работ — в [TODO.md](TODO.md). Здесь только то, что стоит держать в голове
|
||||
отдельно:
|
||||
|
||||
### 3. Переезд healthlog на новый формат
|
||||
|
||||
`docs/backlog/` → `docs/tasks/` с `items/`, `PLAN.md`, `BACKLOG.md`,
|
||||
`SPRINT.md`, `REJECTED.md`. Скилл `av-dev-tasks:adopt` для этого написан и
|
||||
прогнан на **копии** живого беклога: 12 целей, 38 задач, 36 переименований
|
||||
слагов из транслита в английские, 86 ссылок поправлено в 36 файлах, `check`
|
||||
зелёный.
|
||||
|
||||
Переходное состояние после переезда известно числом: задач без цели — 0, без
|
||||
двух критериев приёмки — 29. `check` при этом зелёный, но `sprint take` такие
|
||||
задачи не возьмёт; закрывается порциями переоценки на сессиях.
|
||||
|
||||
Вместе с переездом придётся переписать то, что противоречит новой семантике:
|
||||
раздел «Процесс» в `CLAUDE.md`, преамбулу `docs/plan.md` («свой приоритет»,
|
||||
«беклог — что брать следующим») и строку «блокеры разбираются пачками» — по
|
||||
новому определению блокер эскалируется немедленно, пачками разбираются вопросы.
|
||||
|
||||
### 4. Удалить проектные копии
|
||||
|
||||
После подключения плагинов в healthlog остаются два источника правды:
|
||||
`.claude/skills/healthlog-task-pipeline/`, `healthlog-review-pipeline/` и девять
|
||||
`.claude/agents/healthlog-review-*.md`. Проектные факты из них уезжают в бриф,
|
||||
сами файлы удаляются.
|
||||
|
||||
У jellybit хуже: его скиллы называются `task-pipeline`, `review-pipeline`,
|
||||
`task-batch` — **ровно как в плагине**. Claude Code не переопределяет их, а
|
||||
держит обе пары, так что короткое имя может увести в устаревшую проектную
|
||||
копию, и молча. Тексты плагина зовут своё через пространство имён
|
||||
(`av-dev-pipeline:review-pipeline`), но проектные копии всё равно надо удалять
|
||||
при установке.
|
||||
|
||||
### 5. Перевод jellybit
|
||||
|
||||
Отложен сознательно: сперва обкатать на healthlog один-два спринта, потом
|
||||
переносить. Иначе мы одновременно вводим непроверенный процесс и ломаем
|
||||
работающий проект.
|
||||
|
||||
Объём: беклог с приоритетами `высокий/средний/низкий` без целей и спринтов,
|
||||
одиннадцать ревью-агентов старого поколения (включая `idiom` и `negative`,
|
||||
упразднённые в healthlog), три скилла с коллизией имён. Часть `capability-map`
|
||||
живёт в памяти агента, а не в файле, — при переводе это надо материализовать.
|
||||
- **`git push`.** Четыре коммита с `av-dev-pm` и `av-dev-pipeline` не отправлены
|
||||
на origin, поэтому установленный маркетплейс их не видит и до сих пор стоит на
|
||||
`092d07c`. Это буквальное объяснение фразы «плагины ни к одному проекту не
|
||||
подключены»: подключать пока нечего.
|
||||
- **Ни один скилл не прогонялся на живом проекте.** `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 не переопределяет их, а держит обе пары, так что короткое имя может
|
||||
увести в устаревшую копию, и молча.
|
||||
|
||||
## Открытые вопросы
|
||||
|
||||
**Что делать с `av-dev-backlog`.** В маркетплейсе сейчас оба плагина, и их
|
||||
описания ловят один и тот же триггер («добавь задачу в беклог») — агент выберет
|
||||
случайный. Пометить устаревшим, удалить из маркетплейса или оставить до
|
||||
перевода jellybit, который пока на нём и живёт.
|
||||
**Как проверять, что канон не разошёлся с проектами после `upgrade`.** `canon
|
||||
check` сверяет версию, но не то, что миграционные записи journal'а применены
|
||||
верно. Проект может нести `"canon": 2` и не иметь того, что версия 2 требовала.
|
||||
|
||||
**Оставлять ли раздел `## Триггеры` в контракте брифа.** Он задумывался как
|
||||
проектная конкретизация правила выбора профиля ревью, но при заполнении на
|
||||
обоих проектах выродился в пересказ таблицы профилей самого скилла. Контракт не
|
||||
запрещает скопировать общее правило, а слот, который заполняется копированием,
|
||||
пользы не несёт.
|
||||
**Форма ADR при пересмотре решения.** Правило «старая запись получает статус
|
||||
`заменено на`» требует, чтобы кто-то заметил, что новое решение отменяет старое.
|
||||
Механической проверки нет, а принуждённое отрицание на шаге синка спрашивает про
|
||||
`adr/` вообще, а не «не отменяет ли это что-то из существующего».
|
||||
|
||||
**Название процесса.** Плагины названы, процесс — нет. Обсуждались кодовое имя
|
||||
из Средиземья (`fellowship` / `council`, под стать `rivendell` и `umbar`),
|
||||
нейтральная «каденция» и описательные варианты. Для плагинов выбрана функция
|
||||
(`av-dev-tasks`, `av-dev-pipeline`), но у процесса как целого имени нет.
|
||||
|
||||
**Судьба `AGENTIC-TASKS.md`.** Черновик дизайна лежит в корне healthlog и не
|
||||
закоммичен. Содержимое переехало в плагины, значит документ стал вторым домом
|
||||
для тех же правил — а расхождение двух домов ровно то, против чего он сам и
|
||||
написан. Либо удалить, либо сжать до истории решений («почему не Scrum», числа
|
||||
первого замера, что и почему отвергнуто).
|
||||
**Что делать с `av-dev-backlog` после перевода jellybit.** Помечен устаревшим и
|
||||
переписан так, чтобы не ловить триггер. Удалять его из маркетплейса или оставить
|
||||
как есть — решится, когда jellybit переедет.
|
||||
|
||||
## Известные пределы — приняты, чинить не планируется
|
||||
|
||||
**Транзакции на несколько файлов нет.** POSIX её не даёт без журнала. Окно
|
||||
сжато до цепочки `rename` без ввода-вывода, а всё, что в окне может разъехаться,
|
||||
**Транзакций на несколько файлов нет.** POSIX её не даёт без журнала. Окно сжато
|
||||
до цепочки `rename` без ввода-вывода, а всё, что в окне может разъехаться,
|
||||
сделано производным и восстанавливается `check --fix` без потерь.
|
||||
|
||||
**Оракул в критериях приёмки проверяется эвристикой.** Число пунктов
|
||||
проверяется жёстко, наличие оракула — по слову, и это **только замечание**.
|
||||
В тексте прямо сказано, что проверено меньше, чем требуется, — притворяться тут
|
||||
дороже, чем признаться.
|
||||
**Оракул в критериях приёмки проверяется эвристикой.** Число пунктов проверяется
|
||||
жёстко, наличие оракула — по слову, и это **только замечание**. В тексте прямо
|
||||
сказано, что проверено меньше, чем требуется.
|
||||
|
||||
**Recall прохода по конвенциям равен качеству конвенций проекта.** Своего
|
||||
списка у него больше нет: критерий берётся из файла проекта. На проекте с
|
||||
тонкими конвенциями проход почти пуст, и charter это признаёт вслух.
|
||||
**Recall прохода по конвенциям равен качеству конвенций проекта.** Своего списка
|
||||
у него нет: критерий берётся из `docs/conventions/`. На проекте с тонкими
|
||||
конвенциями проход почти пуст, и charter это признаёт вслух.
|
||||
|
||||
**Доменного словаря в брифе нет.** Charter'ы получают факты, но не термины;
|
||||
словарь проход строит каждый раз заново из спек и архитектуры. Цена не
|
||||
измерена.
|
||||
**Доменного словаря в каноне нет.** Проходы получают факты, но не термины;
|
||||
словарь строится каждый раз заново из спек и архитектуры. Цена не измерена.
|
||||
|
||||
**`adopt` не удаляет источники и не правит подписи ссылок.** Удалять чужое
|
||||
молча нельзя, а подпись вида `[docs/backlog](docs/tasks/BACKLOG.md)` правится
|
||||
глазами. И то и другое печатается в отчёте, а не проглатывается.
|
||||
**Смысловые дубли ловит только агент.** `docs.py` видит раскладку, но не то, что
|
||||
`docs/specs/recognition.md` описывает то же, что capability `recognition`.
|
||||
Граница объявляется вслух в каждом отчёте — это единственная защита от
|
||||
«соблюдено» на проекте с тремя лишними файлами.
|
||||
|
||||
**Приёмщик и исполнитель совпали.** Граница «пайплайн не закрывает задачу» снята
|
||||
сознательно (решение P); три защиты из раздела «Стимулы» держатся теперь текстом,
|
||||
а не механикой. Реальные опоры — сохранённый отчёт триажа, `SPRINT.md` под git и
|
||||
`reopen`. Это записано в самом скилле, а не спрятано.
|
||||
|
||||
**Копия правила в шаблонах проекта.** `adr/README.md` и `review.md` уезжают в
|
||||
репозиторий и обязаны там что-то говорить, поэтому правило канона в них
|
||||
копируется намеренно. Цена: правка такого правила обязана тянуть запись в журнал
|
||||
версий, иначе копия в проекте останется старой молча.
|
||||
|
||||
Reference in New Issue
Block a user