шов между плагинами: канон перестал называть имена проходов
av-dev-pm и av-dev-pipeline раздельны: канон работает без конвейера, конвейер без канона — поразрядно деградируя и называя это строкой. Но канон в шести местах называл конвейер поимённо, и одно из них — вывод docs.py пользователю: «свои темы проекта: … — их разбирает review-basics». Такая строка чинится не правкой файла, а недоумением на чужом проекте. Правило записано в canon.md, чтобы не отрастало заново. Общий словарь — имена тем и имена ступеней, и только они: ими проект настраивает ревью, вопросами по темам и триггерами профиля. Имён проходов канон не называет нигде. Направление несимметрично, и это верно: конвейер называет документы канона поимённо, потому что он их читатель, а обратной ссылки быть не может — документ живёт дольше, чем раскладка проходов. Что вычищено: имя review-basics в canon.md, в changelog версии 5 и в выводе docs.py; «её берёт basics» из таблицы ролей; описательные адресации того же класса — «архитектурный проход судит», «враждебный проход выдумает». Худшей была строка в skeletons.md «там идут враждебный, эксплуатационный и архитектурный проходы»: утверждение о составе ступени, живущее на стороне, которая о составе не знает. Строка таблицы «эксплуатационный проход ревью» стала «тема ревью operations» — заодно совпала со словарём, к которому tasks/SKILL.md отсылает как к единому дому. Отдельно — пример, нарушавший собственное правило. Объяснение, почему вопросы адресуются темам, звучало «вопрос, адресованный ops, перестал задаваться в тот день, когда ops уехал в верхнюю ступень»: правило про нестабильность имён, проиллюстрированное именем. Стало «адресованный проходу» и переживёт переименование. Починена и висячая ссылка: project-facts.md отсылал к таблице «Кто читает» в каноне, которой там нет — она была убрана правкой, вводившей темы, и по новому правилу её и не должно быть. Списка читателей не ведёт никто: читателя назначает план прогона. Тема 38 в DECISIONS.md, следствия 143-144. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
| --- | --- | --- |
|
||||
| `ROADMAP.md`, секция `Сопровождение` | план | **работы**, которые собираемся делать: цели и их задачи |
|
||||
| `architecture.md`, раздел «Эксплуатация» | состояние | **как устроено сейчас**: где работает, что рядом, кто перезапускает |
|
||||
| эксплуатационный проход ревью | оптика | **чем проверяем**: «это упало через неделю на проде» |
|
||||
| тема ревью `operations` | оптика | **чем проверяем**: «это упало через неделю на проде» |
|
||||
|
||||
Слово **«поддержка» не употребляется вовсе** — в нём слышится помощь
|
||||
пользователю, а это другая работа.
|
||||
@@ -80,10 +80,10 @@ openspec/
|
||||
`ADR-ГГГГ-ММ-ДД-slug.md`.
|
||||
|
||||
**Список тем открытый, и это не послабление, а механизм.** Всё, что проект
|
||||
кладёт в `docs/`, становится темой ревью: конвейер разбирает её проходом
|
||||
`review-basics`, у которого именной оптики нет и который для того и заведён.
|
||||
Завёл `docs/accessibility.md` — появилась тема `accessibility`, и она попадает в
|
||||
план каждого прогона. Не темы ровно две: `docs/tasks/` (его ведёт скилл `tasks`)
|
||||
кладёт в `docs/`, становится темой ревью: у конвейера есть приёмник для темы, к
|
||||
которой нет именной оптики, и заведён он ровно за этим. Завёл
|
||||
`docs/accessibility.md` — появилась тема `accessibility`, и она попадает в план
|
||||
каждого прогона. Не темы ровно две: `docs/tasks/` (его ведёт скилл `tasks`)
|
||||
и `docs/review.*` — это настройка самого конвейера, слой над темами.
|
||||
|
||||
Отсюда следствие, ради которого правило и заведено: **`docs/` — это конфигурация
|
||||
@@ -121,6 +121,13 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
прогона и меняется вместе с конвейером, а документ живёт дольше. Раскладку
|
||||
«тема → проход → глубина» держит скилл `av-dev-pipeline:review-pipeline`.
|
||||
|
||||
**Общего словаря у канона с конвейером ровно два вида имён: имена тем и имена
|
||||
ступеней.** Ими проект и настраивает ревью — вопросами по темам и триггерами
|
||||
профиля. **Имён проходов канон не называет нигде**, включая вывод `docs.py`:
|
||||
проход переименовывается и переезжает между ступенями, и канон, назвавший его, в
|
||||
этот день соврёт молча. Обратное направление законно — конвейер называет
|
||||
документы канона поимённо, потому что он их читатель.
|
||||
|
||||
| Документ | Вопрос | Тема ревью |
|
||||
| --- | --- | --- |
|
||||
| `CLAUDE.md`, `AGENTS.md` | что нельзя нарушать, чем краснеет гейт | `autotests`; инварианты — сквозные, во все темы |
|
||||
@@ -133,7 +140,7 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
| `adr.*` | почему решено именно так | `architecture` |
|
||||
| `openspec/specs/` | что система делает — нормативно | `requirements` |
|
||||
| `review.*` | как настроен конвейер и что уже проскакивало | **не тема**: слой над всеми |
|
||||
| *свой документ проекта* | что проект счёл нужным проверять | **своя тема**, её берёт `basics` |
|
||||
| *свой документ проекта* | что проект счёл нужным проверять | **своя тема**, именем документа |
|
||||
|
||||
### `passport.md`
|
||||
|
||||
@@ -185,7 +192,7 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
|
||||
**Периметр первой строкой.** «Сервис открыт наружу» и «контур доверенный,
|
||||
публичного интернета здесь нет, не выдумывай его» — противоположные постановки
|
||||
под одним заголовком, и враждебный проход между ними сам не выберет. Контур ещё
|
||||
под одним заголовком, и разбор темы `security` между ними сам не выберет. Контур ещё
|
||||
не развёрнут — назови **оба** периметра, целевой и сегодняшний, и скажи прямо,
|
||||
против какого строятся находки.
|
||||
|
||||
@@ -250,7 +257,7 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
всегда неверны, каждая со строкой «почему здесь это не дефект»;
|
||||
- **Вопросы по темам** — в форме `<тема>: <вопрос> (<провенанс>)`. **Не по именам
|
||||
проходов**: проход уезжает между ступенями, а тема остаётся, и вопрос,
|
||||
адресованный `ops`, перестал бы задаваться молча в тот день, когда `ops` уехал
|
||||
адресованный проходу, перестал бы задаваться молча в тот день, когда тот уехал
|
||||
в верхнюю ступень. Задаёт вопрос тот, кто закрывает тему на этом прогоне;
|
||||
- **Триггеры профиля** — проектная конкретизация правила выбора профиля ревью:
|
||||
что в этом проекте считается **крупным или незнакомым** изменением (поднимает
|
||||
|
||||
@@ -29,8 +29,8 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
каталогами, остальные — файлами, и обосновать это было нечем. Обе формы сразу
|
||||
— ошибка: два дома для одного факта расходятся молча.
|
||||
2. **Список тем открытый.** Всё, что проект кладёт в `docs/`, становится темой
|
||||
ревью и попадает в план каждого прогона; разбирает такие темы проход
|
||||
`review-basics`, у которого именной оптики нет и который для того и заведён.
|
||||
ревью и попадает в план каждого прогона; именной оптики у такой темы нет, её
|
||||
разбирает общий проход конвейера, заведённый ровно за этим.
|
||||
Прежде `docs.py` называл незнакомый файл «вне канона» — теперь называет своей
|
||||
темой проекта и перечисляет их в отчёте. Не темы ровно две: `docs/tasks/` и
|
||||
`docs/review.*`.
|
||||
@@ -42,7 +42,7 @@ upgrade` идёт по записям снизу вверх от версии п
|
||||
|
||||
- в `docs/review.*`: **«Вопросы к проходам» → «Вопросы по темам»**, форма
|
||||
`<тема>: <вопрос> (<провенанс>)`. Причина не косметическая: вопрос,
|
||||
адресованный `ops`, перестал задаваться молча в тот день, когда `ops` уехал в
|
||||
адресованный проходу, перестал задаваться молча в тот день, когда тот уехал в
|
||||
верхнюю ступень ревью. Тема переезд прохода переживает, имя прохода — нет;
|
||||
- там же **«Недоступно проверке» — по темам**, оба подраздела.
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
## Что целью не является
|
||||
|
||||
Граница домена. По ней архитектурный проход судит, не перенесено ли понятие
|
||||
Граница домена. По ней в теме `architecture` судят, не перенесено ли понятие
|
||||
через границу.
|
||||
|
||||
## Типовые сценарии
|
||||
@@ -144,8 +144,8 @@
|
||||
|
||||
## Что вне модели
|
||||
|
||||
Перечислить явно. Пустой пункт означает, что враждебный проход выдумает угрозу
|
||||
сам, и находка никогда не будет исправлена.
|
||||
Перечислить явно. Пустой пункт означает, что в теме `security` угрозу выдумают
|
||||
за тебя, и находка никогда не будет исправлена.
|
||||
```
|
||||
|
||||
## `docs/conventions/README.md`
|
||||
@@ -283,8 +283,8 @@
|
||||
к обязательным.
|
||||
|
||||
**Адресуй теме, а не имени прохода.** Проходы переезжают между ступенями и
|
||||
упраздняются; вопрос, адресованный `ops`, перестанет задаваться в тот день, когда
|
||||
`ops` уедет в верхнюю ступень, — и заметить это будет нечем. Тема переезд
|
||||
упраздняются; вопрос, адресованный проходу, перестанет задаваться в тот день,
|
||||
когда тот уедет в верхнюю ступень, — и заметить это будет нечем. Тема переезд
|
||||
переживает.
|
||||
|
||||
Темы ядра: `requirements`, `autotests`, `conventions`, `architecture`,
|
||||
@@ -297,7 +297,7 @@
|
||||
узлами или capability.
|
||||
|
||||
**Крупное или незнакомое здесь** — поднимает прогон до `wide`, верхней ступени:
|
||||
там идут враждебный, эксплуатационный и архитектурный проходы, и там же
|
||||
там `security`, `operations` и `architecture` проверяют запуском, и там же
|
||||
единственные замеры. Ступень рассчитана на **5–10% задач**; если сюда попадает
|
||||
каждая третья, список написан слишком широко.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user