av-dev-pipeline: бриф удалён, проходы читают документы канона напрямую
- удалены скилл project-brief и контракт брифа; вместо них references/ project-facts.md — карта «что нужно проходу → где лежит» и таблица поразрядной деградации по документам - девять charter'ов, review-pipeline, task-pipeline и task-batch переписаны на пути канона; OpenSpec стал объявленной предпосылкой без ветки деградации - шаг синка документации переписан в построчный доклад, закрытие задачи — вызовом скилла av-dev-pm:tasks вместо строки-слота из CLAUDE.md - по находкам ревью: docs.py звал tasks.py из чужого каталога и выдавал его отказ окружения за дрейф; сверка миграций не видела рабочее дерево; плейсхолдер краснел вместо замечания; сверка capability проходила по совпадению с именем пакета; tasks.py не читал docs/.pm.json; скилл docs пересказывал канон в пяти местах
This commit is contained in:
@@ -64,31 +64,24 @@ description: Вести содержимое документов канона
|
||||
**ADR цитирует решение оттуда и ссылается на источник.** Не пересказывает и не
|
||||
сочиняет заново.
|
||||
|
||||
Заводится, когда верно одно из трёх:
|
||||
**Триггер заведения, форма имени и правило замены — в
|
||||
[каноне](../canon/references/canon.md), раздел `adr/`.** Здесь они не
|
||||
повторяются: копия правила расходится с оригиналом на первой же смене версии
|
||||
канона, а расходится незаметно.
|
||||
|
||||
- **дорогой откат** — переделка стоит дороже переписывания одного файла;
|
||||
- **намеренный отказ** от очевидного подхода — чтобы не переоткрывать «а почему
|
||||
мы не сделали X»;
|
||||
- **пересмотр прежнего решения** — тогда у старой записи обязателен статус
|
||||
`заменено на ADR-…`, а у новой в контексте строка «Заменяет ADR-…».
|
||||
Твоя часть — **применить триггер к этой задаче и сказать вслух, сработал он или
|
||||
нет**. Строка «adr/ — не требуется: решение рутинное» и есть то, ради чего
|
||||
чек-лист существует; её отсутствие неотличимо от «забыл посмотреть».
|
||||
|
||||
Не заводится для рутины и для того, что видно из кода и `git log`.
|
||||
|
||||
Порядок: имя `ADR-ГГГГ-ММ-ДД-slug.md`, дата — когда решение **принято**, слаг
|
||||
английский; тело по `docs/adr/template.md`; строка в индексе `docs/adr/README.md`
|
||||
сверху. Активная запись статуса не имеет.
|
||||
Порядок работы: открой архивный `design.md` change, найди в `Decisions` то, что
|
||||
проходит триггер, процитируй решение и его причину, сошлись на источник, добавь
|
||||
строку в индекс `docs/adr/README.md` сверху.
|
||||
|
||||
## Чистка `architecture.md`
|
||||
|
||||
Обзор не держит поведение — его нормативный дом `openspec/specs/`. Раздел, где
|
||||
поведение осталось, помечается маркером долга:
|
||||
|
||||
```
|
||||
<!-- канон: поведение → openspec/specs/<capability> -->
|
||||
```
|
||||
|
||||
`docs.py` считает маркеры и печатает числом; **гейт от них не краснеет** — это
|
||||
долг, а не отказ, иначе постепенный переезд стал бы невозможен.
|
||||
Обзор не держит поведение — его нормативный дом `openspec/specs/`. **Форма
|
||||
маркера долга и правило «гейт от них не краснеет» — в
|
||||
[каноне](../canon/references/canon.md), раздел `architecture.md`.**
|
||||
|
||||
Разбирается порциями: раздел вычищается той задачей, которая его касается.
|
||||
Содержимое не выбрасывается, а переезжает — требования в дельта-спеку change,
|
||||
@@ -97,45 +90,36 @@ description: Вести содержимое документов канона
|
||||
## Запись в `research/`
|
||||
|
||||
Наблюдение о внешнем мире: что реально шлёт источник, чем документация формата
|
||||
расходится с практикой. **Число — с провенансом**: команда или условия, которыми
|
||||
получено, чтобы его можно было перепроверить.
|
||||
расходится с практикой. **Требование провенанса и правило про расходящееся
|
||||
число — в [каноне](../canon/references/canon.md), раздел `research/`.**
|
||||
|
||||
Число без источника проход обязан читать как условие. Число, чей источник по
|
||||
ссылке не подтвердился, **не переписывается по догадке** — остаётся с пометкой
|
||||
«расходится с источником: там <что нашли>». Молча подставить «правильное» число
|
||||
хуже всего: расхождение перестанет быть видно, а причина останется.
|
||||
Твоя часть — заметить, что по ходу задачи узналось новое о внешних данных, и не
|
||||
дать этому остаться в контексте. Признак: ты правил разбор, опираясь на то, чего
|
||||
нет ни в одном документе.
|
||||
|
||||
## Запись в `review.md`
|
||||
|
||||
Два раздела с разными сроками жизни, и путать их нельзя.
|
||||
Файл держит два раздела с разными сроками жизни — журнал дефектов и настройку
|
||||
конвейера. **Что в каком и в какой форме — в
|
||||
[каноне](../canon/references/canon.md), раздел `review.md`**; подробности формы
|
||||
записи и выбор адреса, куда она ведёт, — в конвейере ревью,
|
||||
`references/review-journal.md`.
|
||||
|
||||
**Журнал дефектов.** Запись на каждый воспроизведённый дефект с пометкой
|
||||
**проскочил / пойман ревью**. Пишется сразу, а не ретроспективно: со временем
|
||||
теряется не факт, а причина непоймания — единственное, ради чего журнал есть.
|
||||
Форма: где, симптом, чем воспроизведён, почему не поймали (для проскочивших),
|
||||
что меняем. Вывод «ничего не меняем, цена поимки выше цены дефекта» — законный
|
||||
исход.
|
||||
|
||||
**Настройка конвейера.** Типовые узлы; типовые ложноположительные; вопросы к
|
||||
проходам поимённо с провенансом; недоступно проверке. Последний раздел делится
|
||||
на «не проверит ни один проход» (принципиальная граница, по факту промаха не
|
||||
пересматривается) и «перестали проверять сознательно» — этот **пересматривается
|
||||
первым**, как только что-то проскочило.
|
||||
Твоя часть на синке: **дефект пишется сразу**, а не «потом, когда починим».
|
||||
Со временем теряется не факт, а причина непоймания — единственное, ради чего
|
||||
журнал есть. И решение о сужении проверок (перестали звать проход, понизили
|
||||
профиль) обязано попасть в раздел настройки, а не остаться в отчёте ревью.
|
||||
|
||||
## Промоут в конвенции
|
||||
|
||||
Находка → конвенция → правило линтера → **удаление из прозы**. Процедура
|
||||
принадлежит конвейеру ревью и живёт в его `references/promote.md`; здесь только
|
||||
то, что касается документа:
|
||||
Находка → конвенция → правило линтера → **удаление из прозы**. Процедура целиком
|
||||
принадлежит конвейеру ревью и живёт в его `references/promote.md`; роль каталога
|
||||
конвенций — в [каноне](../canon/references/canon.md).
|
||||
|
||||
- формулировка — **проверяемое свойство**, а не совет;
|
||||
- в прозе остаётся только то, что принципиально не выражается правилом;
|
||||
- как только правило работает, формулировка из `conventions/<тема>.md`
|
||||
**удаляется**, а правило попадает в перечень механизированного в
|
||||
`conventions/README.md` со ссылкой на место механизации.
|
||||
|
||||
Непойманное место механизации означает, что проход по конвенциям будет
|
||||
добросовестно проверять уже проверенное.
|
||||
Твоя часть — **третий шаг, который пропускают чаще всего**: правило заработало,
|
||||
а формулировка осталась в прозе, и проход продолжает проверять уже проверенное.
|
||||
На синке это отдельная строка: «conventions/ — правило X механизировано,
|
||||
формулировка удалена» либо «не требуется».
|
||||
|
||||
## Чего этот скилл не делает
|
||||
|
||||
|
||||
Reference in New Issue
Block a user