From 52cc4d05d4835bf95fd37f4ca1b8cf80e097600a Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Wed, 5 Aug 2026 11:21:40 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=85=D0=BE=D0=B4=D0=BE=D0=BA=20doc-consistency:=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D1=82=D0=BA=D0=B8=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D0=B8=20=D0=B2=20=D1=81=D1=81=D1=8B?= =?UTF-8?q?=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Первый прогон агента — по репозиторию, который его же и содержит. Два прохода, 17 находок, все подтверждены по файлам. Пять находок — остатки прежней модели типов в файлах, до которых я не дошёл двумя коммитами раньше. adopt.md держал имена секций роадмапа канона 2 («порядка», «темы») и «пустой goal законен только у идеи»; from-review.md и TODO.md — упразднённый [idea]; task-batch в другом плагине — «задачи-идеи». Правку модели я вёл от документов, которые менял, а не от тех, что на них ссылаются: grep по упразднённому слову дал бы все пять за минуту. Самая дорогая находка оказалась моей и свежей. Таблица типов в canon.md объявляла цель у fix запрещённой, а tasks/SKILL.md и task-fix.md — необязательной; код на стороне вторых. Копия разошлась с домом за один день, обе половины писал один проход. Поправлено не значение, а причина: canon.md дважды объявлял, что фиксирует только словарь типов, — значит колонкам «разделы» и «цель» в нём не место. Осталась таблица из двух колонок и ссылка на дом схемы. Перечень «чем держат проект» пересказывался втроём и разъехался: «метрики и логи» против «мониторинга», «проверки» есть в двух из трёх. При этом tasks/SKILL.md ссылался на дом рядом с собственным пересказом — ссылка не мешает копии разойтись, если копия всё равно стоит. Перечень остался в canon.md, два места ссылаются. README пересказывал раскладку канона блоком кода, и копия была уже неполна — не хватало путей, чьё отсутствие docs.py считает нарушением. Заменено ссылкой. Там же измеренное число из DECISIONS III заменено ссылкой на решение. REMAINING дублировал два отмеченных сделанными пункта TODO и держал счётчики, которые обязан двигать человек: «двенадцати тем и 16 коммитов» (стало 28 и 52), «три неизмеренных изменения» (стало больше). Счётчики отменены как класс, причина записана в шапку. Открытый вопрос про парный статус ADR переформулирован: судья появился, открыт остался охват. Три противоречия вне av-dev-pm: --roadmap-sections перечислен среди флагов init прозой того же файла, объявляющей, что его нет; review-ops берёт журнал docs/review.md и тут же объявляет историю инцидентов принципиально недоступной; «честный предел» конвейера отменял целиком документ docs/research/. Плюс битый якорь ссылки на раздел вычитки. Находка про Co-Authored-By снята как неверная: агент прочитал av-dev-git/skills/commit/SKILL.md как описание практики этого репозитория, а это продукт, уезжающий в чужие проекты. Устав агента не различает «документ про нас» и «документ про то, что мы производим» — остаток записан в REMAINING, в устав пока не дописан. DECISIONS тема 29 (ЧЧШШ–ЮЮЯЯ, следствия 109–113). Co-Authored-By: Claude Opus 5 (1M context) --- DECISIONS.md | 63 +++++++++++++++++++ README.md | 35 ++++------- REMAINING.md | 45 +++++++------ TODO.md | 4 +- av-dev-pipeline/agents/review-ops.md | 3 +- .../skills/review-pipeline/SKILL.md | 3 +- av-dev-pipeline/skills/task-batch/SKILL.md | 5 +- av-dev-pm/skills/canon/references/canon.md | 26 +++++--- av-dev-pm/skills/tasks/SKILL.md | 20 +++--- av-dev-pm/skills/tasks/references/adopt.md | 8 ++- .../skills/tasks/references/from-review.md | 5 +- .../skills/tasks/references/task-goal.md | 10 +-- 12 files changed, 150 insertions(+), 77 deletions(-) diff --git a/DECISIONS.md b/DECISIONS.md index fa8bd34..f78ed66 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -1978,3 +1978,66 @@ ADR, запискам разведки и сообщениям коммитов показывал закрывающие маркеры как ``, а требовал ``; нашлось это первой же попыткой ими воспользоваться. Пример в докстроке — тот же образец, что плейсхолдер в схеме. + +## 29. Обкатка `doc-consistency` на самом dev-skills (2026-08-05) + +Первый прогон агента — по репозиторию, который его же и содержит. Два прохода +(av-dev-pm; пайплайн плюс верхний уровень), 17 находок, все подтверждены по +файлам. + +**ЧЧШШ. Агент нашёл ровно тот класс, ради которого заводился, и в свежей +работе.** Пять находок — остатки прежней модели типов в файлах, которые я не +дошёл поправить двумя коммитами раньше: `adopt.md` держал имена секций **канона +2**, `from-review.md` и `TODO.md` — упразднённый `[idea]`, `task-batch` в другом +плагине — «задачи-идеи». Правку модели я вёл от документов, которые менял, а не +от документов, которые на них ссылаются, — и обратный обход не сделал ни разу. + +**ЩЩЪЪ. Самая дорогая находка была моей и свежей.** Таблица типов в `canon.md` +объявляла цель у `fix` запрещённой, а `tasks/SKILL.md` и `task-fix.md` — +необязательной; код на стороне вторых. Копия разошлась с домом **за один +день** — я написал обе половины в одном коммите. Это и есть цена второго дома в +чистом виде: не «когда-нибудь разойдётся», а «разошлось прежде, чем высохли +чернила». + +Исход не «поправить значение», а **убрать причину**: `canon.md` дважды объявлял, +что фиксирует только словарь типов, — значит колонкам «разделы» и «цель» в нём +не место. Осталась таблица из двух колонок и ссылка на дом схемы. + +**ЫЫЬЬ. Копии перечня «чем держат проект» разъехались втроём.** `canon.md`, +`tasks/SKILL.md` и `task-goal.md` пересказывали его своими словами: «метрики и +логи» против «мониторинга», «проверки» есть в двух из трёх. При этом +`tasks/SKILL.md` **ссылался на дом рядом с собственным пересказом** — ссылка не +мешает копии разойтись, если копия всё равно стоит. + +**ЭЭЮЮ. Находка про коммиты снята как неверная, и это дефект самого агента.** +Он прочитал `av-dev-git/skills/commit/SKILL.md` («без `Co-Authored-By`») как +описание практики этого репозитория и предъявил 38 коммитов с трейлером. Но +dev-skills — **маркетплейс плагинов**: скилл коммита здесь продукт, уезжающий в +чужие проекты, а не правило, которому подчиняется сам репозиторий. Устав агента +не различает «документ описывает этот репозиторий» и «документ описывает то, что +репозиторий производит». + +**ЮЮЯЯ. Счётчики в документах отменены как класс.** `REMAINING.md` держал «после +разбора двенадцати тем и 16 коммитов» (стало 28 и 52) и «три неизмеренных +изменения подряд» (стало больше). Оба числа обязан двигать человек, и оба +отстали молча. Заменены на формулировки, которые не надо поддерживать, и в шапку +записана причина. + +### Что из этого следует + +109. **Правка модели идёт по обратным ссылкам, а не по изменённым файлам.** + Меняешь дом — обойди тех, кто на него ссылается: `grep` по упразднённому + слову дал бы все пять остатков за минуту. Это дешевле любого агента и + должно идти до него. +110. **Ссылка на дом не отменяет копию, стоящую рядом.** Проверять надо не + «есть ли ссылка», а «есть ли пересказ»; `tasks/SKILL.md` имел и то и другое. +111. **Копия расходится с домом в пределах одного коммита.** Прежняя оценка + («разойдётся на первой правке») занижена: расхождение возникает при + написании, если оба места пишет один проход. +112. **Агент, читающий репозиторий-продукт, обязан различать «про нас» и «про + то, что мы производим».** Иначе он предъявляет продукту практику его + потребителя. Устав `doc-consistency` этого различения не содержит — остаток + записан в REMAINING. +113. **Число в документе — обязанность, которую никто не берёт.** Счётчик тем, + коммитов, правок протухает молча; формулировка без числа дешевле его + сопровождения. diff --git a/README.md b/README.md index 59054e9..252a772 100644 --- a/README.md +++ b/README.md @@ -72,29 +72,17 @@ flowchart TB ## Канон документов проекта Все проекты приводятся к одной раскладке — так проще ориентироваться, когда -проектов много, и рядом OpenSpec тоже держит строгую структуру. Определение — -[av-dev-pm/skills/canon/references/canon.md](av-dev-pm/skills/canon/references/canon.md). +проектов много, и рядом OpenSpec тоже держит строгую структуру. `CLAUDE.md` плюс +`docs/` (паспорт, архитектура, база, безопасность, конвенции, разведка, ADR, +ревью, задачи) и `openspec/` — **раскладка целиком, роли документов и правило +единственного дома живут одним домом**: +[canon.md](av-dev-pm/skills/canon/references/canon.md). Здесь она не +пересказывается: копия перечня путей уже расходилась с домом, и как раз в +обязательных — в ней не хватало путей, чьё отсутствие `docs.py check` считает +нарушением. -``` -CLAUDE.md инварианты с severity, команды, семантика гейта -docs/ - .pm.json версия канона и пути для проверок - passport.md зачем и для кого; чем НЕ является - architecture.md как сложено — обзор; окружение и эксплуатация - database.md схема хранилища; настройки с числовым значением - security.md периметр; недоверенный вход; что вне модели - conventions/ как пишем код + что уже механизировано - research/ что показала реальность; числа с провенансом - adr/ почему — промоут поверх архивных design.md - review.md настройка конвейера + журнал дефектов - tasks/ роадмап (что умеет), беклог, спринт, отклонённое -openspec/ - specs//spec.md что система делает — нормативно - changes/archive/ архив изменений с design.md -``` - -**Отдельного файла-брифа для ревью нет.** Проходы читают эти документы напрямую; -карта «что нужно проходу → где лежит» — +**Отдельного файла-брифа для ревью нет.** Проходы читают документы канона +напрямую; карта «что нужно проходу → где лежит» — [project-facts.md](av-dev-pipeline/skills/review-pipeline/references/project-facts.md). Прийти в старый проект и перевести его на канон — `/av-dev-pm:canon`. Канон @@ -277,7 +265,8 @@ uv run python scripts/frontmatter.py # 0 в порядке, 1 расхожд - **двоеточие с пробелом в описании без кавычек.** Для YAML `: ` внутри простого скаляра начинает вложенное отображение, так что «конвейер ревью: гейт, сверка…» — это не текст с двоеточием, а синтаксическая ошибка. Так было - написано три описания из четырнадцати, и читались они правильно; + написано часть описаний плагинов, и читались они правильно — замер и разбор + в [DECISIONS.md](DECISIONS.md), решение III; - **`name`, разошедшееся с именем каталога скилла или файла charter'а.** Вызов разрешается по каталогу, а сообщение о промахе говорит «нет такого скилла», а не «имя не то»; diff --git a/REMAINING.md b/REMAINING.md index 34f1eaf..1050383 100644 --- a/REMAINING.md +++ b/REMAINING.md @@ -1,7 +1,8 @@ # Остатки, открытые вопросы и принятые пределы -Состояние на 2026-08-03, после разбора двенадцати тем и 16 коммитов реализации -(`ad1779b` … `885981c`). +Состояние пересобирается по ходу работы; счётчика тем и коммитов здесь нет +намеренно — он протухает молча, а двигать его некому. Что и когда решено — +[DECISIONS.md](DECISIONS.md), записи датированы. План работ — [TODO.md](TODO.md). Решения с причинами — [DECISIONS.md](DECISIONS.md). Здесь то, что **не** является работой из плана: незакрытые риски, честно принятые @@ -9,16 +10,16 @@ ## Главный незакрытый риск -**Калибровка не сделана, а charter'ы переписаны трижды.** +**Калибровка не сделана, а уставы проходов с тех пор переписывались не раз.** -Первый раз девять charter'ов правили при выносе в плагин: предмет проверки -заменили ссылкой на раздел брифа. `references/calibration.md` требует при такой -правке замерить, помогла ли она, — **замера не было**. Второй раз их переписали -коммитом `9cef452`: ссылка на раздел брифа заменена путём документа канона. -Третий — коммитами `0eab075` и следующим, по находкам ревью: `adversary`, `ops`, -`reimpl`, `rubric` и `triage` правились ещё раз. +Правки шли волнами: вынос в плагин (предмет проверки заменён ссылкой на раздел +брифа), переход на пути документов канона, две правки по находкам ревью, граф +порядка, ступень `wide`, пересмотр триггеров ступени. +`references/calibration.md` требует при каждой такой правке замерить, помогла ли +она, — **ни одного замера не было**. Числа правок здесь нет намеренно: счётчик +пришлось бы двигать вручную, и он уже однажды отстал. -**Три неизмеренных изменения подряд** в том самом месте, где присваивается +**Неизмеренные изменения копятся** в том самом месте, где присваивается severity. Пробы готовы и синтетических не нужно — четыре реальные находки прошедшей сессии healthlog: @@ -35,17 +36,15 @@ severity. Пробы готовы и синтетических не нужно но работает ли обязанность, не проверено. Оркестратор реагирует на severity, поэтому цена — не «не найдём», а **«найдём и не починим»**. -Замер стоит перед переездом jellybit и блокирует его (решение 39). +Сама работа — [TODO.md](TODO.md), раздел 3; здесь только цена: замер стоит +перед переездом jellybit и блокирует его (решение 39), а ожидаемый исход уже +назван выше. ## Что ещё не сделано Список работ — в [TODO.md](TODO.md). Здесь только то, что стоит держать в голове отдельно: -- **Плагины отправлены, но ни к одному проекту не подключены.** 17 коммитов - ушли на origin, клон маркетплейса обновлён до `88c5d97` и видит `av-dev-pm` - и `av-dev-pipeline` — то есть подключать теперь есть что. Первым делом это - делает healthlog, по разделу 2 плана. - **Ни один скилл не прогонялся на живом проекте.** `docs.py` прогнан на healthlog и jellybit в режиме `check` и находит осмысленный дрейф; `init`, `canon adopt`, `canon upgrade` и скилл `docs` не исполнялись ни разу. @@ -57,14 +56,22 @@ severity. Пробы готовы и синтетических не нужно ## Открытые вопросы +**`doc-consistency` не различает «про нас» и «про то, что мы производим».** +Первый прогон на самом dev-skills предъявил репозиторию правило из +`av-dev-git/skills/commit/SKILL.md` — а это продукт, уезжающий в чужие проекты, +а не правило, которому подчиняется маркетплейс. На проекте под каноном такой +путаницы нет (там документы описывают сам проект), поэтому в устав это пока не +дописано: сперва посмотреть, встретится ли класс ещё раз. + **Как проверять, что канон не разошёлся с проектами после `upgrade`.** `canon check` сверяет версию, но не то, что миграционные записи journal'а применены верно. Проект может нести `"canon": 2` и не иметь того, что версия 2 требовала. -**Форма ADR при пересмотре решения.** Правило «старая запись получает статус -`заменено на`» требует, чтобы кто-то заметил, что новое решение отменяет старое. -Механической проверки нет, а принуждённое отрицание на шаге синка спрашивает про -`adr/` вообще, а не «не отменяет ли это что-то из существующего». +**Форма ADR при пересмотре решения.** Парный статус («старая запись получает +`заменено на`») судит агент `doc-consistency` — правило 6 его устава. Открытым +остаётся не это, а охват: агент зовётся на синке по документам, которых синк +касался, и пересмотр, отменяющий решение из документа, к которому не +притрагивались, он не увидит. Механической проверки по-прежнему нет. **Что делать с `av-dev-backlog` после перевода jellybit.** Помечен устаревшим и переписан так, чтобы не ловить триггер. Удалять его из маркетплейса или оставить diff --git a/TODO.md b/TODO.md index b1dbfac..084e4ef 100644 --- a/TODO.md +++ b/TODO.md @@ -151,8 +151,8 @@ - [ ] `docs/specs/architecture.md` → `docs/architecture.md`, `database.md` → `docs/database.md`, `jellyfin-layout.md` → `docs/research/` - [ ] `docs/review/journal.md` → `docs/review.md` -- [ ] `drafts/` растворить: roadmap → `ROADMAP.md`, conventions-backlog → задачи - `[idea]`, logical-title-model → ADR (H) +- [ ] `drafts/` растворить: roadmap → `ROADMAP.md`, conventions-backlog → записи + `research` (сырьё: тип есть, «Вопрос» пуст), logical-title-model → ADR (H) - [ ] `docs/backlog/` → `docs/tasks/` - [ ] удалить проектные копии скиллов и агентов (4 из REMAINING) - [ ] `av-dev-backlog` удалить из маркетплейса diff --git a/av-dev-pipeline/agents/review-ops.md b/av-dev-pipeline/agents/review-ops.md index dd680e6..09fb489 100644 --- a/av-dev-pipeline/agents/review-ops.md +++ b/av-dev-pipeline/agents/review-ops.md @@ -145,7 +145,8 @@ color: green ## Чего этот проход принципиально не может поймать - Реальный профиль нагрузки и реальные размеры данных на проде. -- Историю инцидентов: что уже ломалось и по какой причине. +- Историю инцидентов **сверх записанного в `docs/review.md`**: инцидент, не + попавший в журнал, для тебя не существует. - Поведение внешних систем в их конкретных версиях и настройках. - Дефекты, проявляющиеся только на настоящих данных владельца. diff --git a/av-dev-pipeline/skills/review-pipeline/SKILL.md b/av-dev-pipeline/skills/review-pipeline/SKILL.md index 126f167..2c55bfb 100644 --- a/av-dev-pipeline/skills/review-pipeline/SKILL.md +++ b/av-dev-pipeline/skills/review-pipeline/SKILL.md @@ -699,7 +699,8 @@ flowchart TD Независимо от проекта недоступно: - поведение внешних систем в их будущих версиях; -- реальный профиль нагрузки и то, что на самом деле лежит в данных; +- реальный профиль нагрузки; и то, что на самом деле лежит в данных, — **сверх + того, что снято с провенансом в `docs/research/`**; - завязка внешних потребителей на текущую форму ответа; - суждение «этой функциональности не должно существовать». diff --git a/av-dev-pipeline/skills/task-batch/SKILL.md b/av-dev-pipeline/skills/task-batch/SKILL.md index dadda18..a359a55 100644 --- a/av-dev-pipeline/skills/task-batch/SKILL.md +++ b/av-dev-pipeline/skills/task-batch/SKILL.md @@ -88,8 +88,9 @@ description: Проводит несколько задач разом — пл ### 1. Прочитать набор Набор задан списком (слаги, файлы, описания) — прочитай файл каждой задачи и -связанные спеки и черновики. Задачи-идеи включаются, но помни: сабагент проведёт -их сперва через `opsx:explore`, это тяжелее и чаще упирается в вопрос. +связанные спеки и черновики. Сырьё (в терминах `av-dev-pm` — запись типа +`research` с пустым разделом «Вопрос») включается, но помни: сабагент проведёт +его сперва через `opsx:explore`, это тяжелее и чаще упирается в вопрос. ### 2. Спланировать порядок и пересечения (автономно) diff --git a/av-dev-pm/skills/canon/references/canon.md b/av-dev-pm/skills/canon/references/canon.md index 4e29117..abd7d60 100644 --- a/av-dev-pm/skills/canon/references/canon.md +++ b/av-dev-pm/skills/canon/references/canon.md @@ -265,13 +265,21 @@ kebab-case.** Причина не эстетическая: имя файла с поле меты `Тип` первой строкой; эмодзи в заголовке от него производна. Словарь закрыт: -| Тип | Что это | Обязательные разделы | Цель | -| --- | --- | --- | --- | -| 🎯 `goal` | возможность приложения | `Завершение` | — | -| ✨ `feature` | снаружи появляется то, чего не было | `Затрагивает`, `Критерии приёмки` | обязательна | -| 🐞 `fix` | поведение расходится с заявленным | `Воспроизведение`, `Затрагивает`, `Критерии приёмки` | нет | -| 🧹 `chore` | обслуживание, поведение не меняется | `Затрагивает`, `Критерии приёмки` | нет | -| 🔬 `research` | исход — знание, а не изменение | `Вопрос`, `Куда ляжет ответ` | нет | +| Тип | Что это | +| --- | --- | +| 🎯 `goal` | возможность приложения | +| ✨ `feature` | снаружи появляется то, чего не было | +| 🐞 `fix` | поведение расходится с заявленным | +| 🧹 `chore` | обслуживание, поведение не меняется | +| 🔬 `research` | исход — знание, а не изменение | + +**Схемы записи здесь нет намеренно.** Какие разделы тип требует, нужна ли ему +цель и берётся ли он в спринт — скилл `tasks`: сводка в его +[SKILL.md](../../tasks/SKILL.md), раздел «Тип записи», подробно — по файлу на +тип в `tasks/references/task-<тип>.md`. Канон фиксирует **словарь**, потому что +от него зависит, читается ли проект как продукт; схема — механика ведения задач, +и второй её экземпляр разошёлся бы с первым (он и разошёлся: канон успел +объявить цель у `fix` запрещённой, хотя она там необязательна). Схема требуется **к взятию в спринт**, а не к заведению: беклог пополняется чаще, чем разбирается, и требование на входе выгоняло бы в заметки то, что должно @@ -282,9 +290,7 @@ kebab-case.** Причина не эстетическая: имя файла с род работы, и называется оно **`research` без раздела «Вопрос»**. Такая запись в спринт не берётся и лежит в конце своей категории. -Раскладку, форму записи и алгоритм работы над каждым типом держит скилл `tasks` -(`references/task-<тип>.md`); канон фиксирует только словарь типов и то, от чего -зависит, читается ли проект как продукт. +Раскладку, форму записи и алгоритм работы над каждым типом держит скилл `tasks`. ### `CLAUDE.md` diff --git a/av-dev-pm/skills/tasks/SKILL.md b/av-dev-pm/skills/tasks/SKILL.md index f059198..c46b389 100644 --- a/av-dev-pm/skills/tasks/SKILL.md +++ b/av-dev-pm/skills/tasks/SKILL.md @@ -193,9 +193,9 @@ stateDiagram-v2 только, чтобы формулировка отвечала на «что приложение делает», а не на «какую часть кода мы трогаем». -**Что целью не является — работа, которой держат проект.** Сборка, проверки, -сам этот скилл, а также выкладка, мониторинг и дежурство: на вопрос «что -приложение будет уметь» они не отвечают. Им отведена отдельная секция роадмапа, +**Что целью не является — работа, которой держат проект.** Состав перечислен +[в каноне](../canon/references/canon.md), раздел «Сопровождение и эксплуатация»; +на вопрос «что приложение будет уметь» ничто из него не отвечает. Им отведена отдельная секция роадмапа, чтобы они были видны в том же экране и при этом не читались как возможности продукта. @@ -205,12 +205,12 @@ stateDiagram-v2 наблюдаем мы. Одна и та же наблюдаемость попадает в разные секции, и это верно — секции отвечают на разные вопросы. -**Сопровождение и эксплуатация — целое и часть**, а не синонимы: сопровождение -это всё, чем держат проект (инструмент, процесс, выкладка, метрики и логи, -инфраструктура, дежурство), эксплуатация — работа системы на проде. Та же тема -живёт ещё в двух местах канона — разделе «Эксплуатация» в `architecture.md` и -эксплуатационном проходе ревью, — и словарь у всех трёх общий: +**Сопровождение и эксплуатация — целое и часть**, а не синонимы, и та же тема +живёт ещё в двух местах канона: разделе «Эксплуатация» в `architecture.md` и +эксплуатационном проходе ревью. Словарь у всех трёх общий и живёт одним домом — [canon.md](../canon/references/canon.md), раздел «Сопровождение и эксплуатация». +Пересказывать его здесь нельзя: три перечня «чем держат проект» уже разъезжались +на «метриках и логах» против «мониторинга». Секция выбирается так: очередь значима и обоснована прозой — `Запланировано`; тянется долго и очереди не имеет — `Направления`; не про приложение, а про то, @@ -315,7 +315,7 @@ stateDiagram-v2 здоровья, не замечанием на файл: проверка эвристическая (первое слово на `-ть`/`-ти`/`-чь`), а беклог, заведённый до правила, не переоформляют «заодно». Годность формулировки — не машине: её смотрит -[агент вычитки](#вычитка-формулировок). +[агент вычитки](#вычитка-два-прохода-а-не-один). **Функции и границы, а не намерения.** Задача называет, что система начнёт делать, и какие границы это трогает: эндпоинт или команду, таблицу и миграцию, @@ -370,7 +370,7 @@ python3 $tk close S --dir D --reason R # в REJECTED.md + удалить ( python3 $tk close S --dir D --implemented # просто удалить (реализована и закоммичена) python3 $tk reopen S --dir D --reason R # вернуть закрытую: приёмка не сошлась python3 $tk sprint start --goal S --dir D | take S… | drop S… --reason R | close [--dissolve --reason R] -python3 $tk init --dir D [--sections …] [--roadmap-sections …] [--items …] [--backlog …] … +python3 $tk init --dir D [--sections …] [--items …] [--backlog …] … python3 $tk adopt scan --from … | apply --plan … # разовая адаптация, references/adopt.md ``` diff --git a/av-dev-pm/skills/tasks/references/adopt.md b/av-dev-pm/skills/tasks/references/adopt.md index 39a85ed..5797f91 100644 --- a/av-dev-pm/skills/tasks/references/adopt.md +++ b/av-dev-pm/skills/tasks/references/adopt.md @@ -53,8 +53,9 @@ python3 $tk adopt apply --plan tasks-adopt-plan.json \ - **английские слаги.** Перевести `taj-brejk-pri-ravnoj-polnote` в `tie-break-equal-completeness` может только тот, кто понимает смысл. `scan` честно говорит: проверить надо **все** слаги, признаки транслита — эвристика; -- **цели.** Шаги роадмапа — готовые цели из **«порядка»** (очередь и обоснование у - них уже есть); тематические скопления задач — **«темы»** («прочность слияния», +- **цели.** Шаги роадмапа — готовые цели в **`Запланировано`** (очередь и + обоснование у них уже есть); тематические скопления задач — цели в + **`Направления`** («прочность слияния», «журнал и пересборка»). Предлагаешь ты, назначает человек; - **что вообще не задача.** Обоснование порядка шагов, абзац прозой, заголовок раздела — это не пункты беклога, и они уходят в «не разложилось» с причиной. @@ -70,7 +71,8 @@ python3 $tk adopt apply --plan tasks-adopt-plan.json \ прохода дадут два несогласованных состояния. 3. **Заполни карту**: `slug` (английский), `section`, `goal` у каждой записи; список `goals` — из шагов роадмапа и из тем. Закрытый шаг целью не - заводится. Пустой `goal` — законный исход только у идеи. + заводится. Пустой `goal` законен у `fix`, `chore` и `research` — они служат + работоспособности, а не направлению; у `feature` цель обязательна. 4. **Покажи человеку карту** через `AskUserQuestion`, ≤3 вопроса за итерацию, рекомендация первым вариантом. Показывается: сколько записей, предлагаемые цели (порядок и темы) с обоснованием, спорные отнесения, список «не diff --git a/av-dev-pm/skills/tasks/references/from-review.md b/av-dev-pm/skills/tasks/references/from-review.md index 2e2474d..8607675 100644 --- a/av-dev-pm/skills/tasks/references/from-review.md +++ b/av-dev-pm/skills/tasks/references/from-review.md @@ -86,7 +86,8 @@ - **находка, ломающая уже идущий спринт**, — не интейк вовсе: см. правило вторжения в скилле `session`. В беклог она падает, только если врываться не положено; -- **низкая уверенность или нет свидетельства** → идея; +- **низкая уверенность или нет свидетельства** → сырьё (`research` с пустым + разделом «Вопрос»); - **мелочь** → строка в пакетный файл; - **уже починено / развилка решена сейчас** → ничего. @@ -108,7 +109,7 @@ - Источник (какое ревью/аудит, сколько находок на входе). - Свёрнуто в задачи: N кластеров из M находок, со слагами, целями и тегом партии. -- Что не заведено и почему: починено инлайн, уже заведено, ушло в идеи, в +- Что не заведено и почему: починено инлайн, уже заведено, стало сырьём, ушло в `REJECTED.md`. - Поимённая сверка: находок на входе N, исход есть у N. - `tasks.py check`. diff --git a/av-dev-pm/skills/tasks/references/task-goal.md b/av-dev-pm/skills/tasks/references/task-goal.md index 9a22970..3b246ed 100644 --- a/av-dev-pm/skills/tasks/references/task-goal.md +++ b/av-dev-pm/skills/tasks/references/task-goal.md @@ -36,10 +36,12 @@ ## Алгоритм -1. **Проверить, что это возможность, а не работа.** Сборка, проверки, выкладка, - мониторинг, дежурство на вопрос «что приложение будет уметь» не отвечают. Им - отведена секция `Сопровождение` — там они видны в том же экране и не читаются - как обещание продукта. Граница проходит по тому, **кто наблюдает**: +1. **Проверить, что это возможность, а не работа.** Работа, которой держат + проект, на вопрос «что приложение будет уметь» не отвечает; состав перечислен + [в каноне](../../canon/references/canon.md), раздел «Сопровождение и + эксплуатация». Ей отведена секция `Сопровождение` — там она видна в том же + экране и не читается как обещание продукта. Граница проходит по тому, + **кто наблюдает**: «приложение сообщает о своём состоянии» — возможность, «дежурный видит состояние на одном экране» — сопровождение. 2. **Выбрать секцию.** Очередь значима и обоснована прозой — `Запланировано`;