старший долг: развилка тремя основаниями, вопросы тем, версия раскладки 5

Третий заход по находкам ревью — то, что старше темы 78 и тянулось с тем 74–77.

Оснований у развилки три во всех местах: конвейер называл два, а устав триажа,
контракт находок, сценарий решения и журнал — три. Там же сказано, чем третье
отличается: по первым двум оркестратор урезает изменение до остатка, третье
отменяет одобрение и возвращает на чекпоинт.

Вопросы проекта по темам достались проходам, которые эти темы закрывают:
review-code, review-specs и review-autotests получили обязанность отвечать
дословно и строку в блоке покрытия. Прежде конвейер обещал их каждому проходу,
а знал о них только приёмник тем.

Глубокое ревью приведено к уставам, которые зовёт: глубина у проходов разная —
доказательство у тех двоих, что держат машину, разбор у architecture и code;
у триажа три вызывающих, а не два режима, и потолка в 7 пунктов там нет.

Версия раскладки поднята до 5 с записью журнала: скелет docs/review.md потерял
подраздел «Триггеры метки» ещё темой 77, а миграции проектам никто не дал.
Сняты остатки меток в task-track и в config-skeleton, уезжающем в чужой проект.
Перечень осей досчитал три оси: глубина темы, разметка действия, род правки.

Журнал — тема 81.
This commit is contained in:
av
2026-08-23 19:51:47 +03:00
parent d79f9d2286
commit 7ab759ae4a
17 changed files with 254 additions and 46 deletions
+30 -17
View File
@@ -1,6 +1,6 @@
---
name: code-review
description: "Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Состав прогона постоянный, метки у него нет: гейт (autotests), сверка со спекой (specs), разбор кода и конвенций (code), триаж; приёмник тем (basics) идёт, когда у проекта есть свои темы. Цикл задачи проверяет корректность и механику против записанного критерия — дельта-спеки, конвенции, инварианты CLAUDE.md, вывод инструментов. Темы риска и устройства — security, operations, architecture — закрыты в цикле только сверкой с записанными инвариантами: их разбор, доказательство запуском и суждение о форме решения живут в скилле av-dev:code-deep-review, который идёт по области кода и время от времени. Порядок прогона — граф зависимостей: гейт открывает проходы с мнением, триаж — единственный сток. Находки по умолчанию чинятся инлайн и молча; человеку уходит только необратимое и то, что меняет дельта-спеки, а задачи из урожая заводятся по его слову. Проектная специфика приходит из документов канона проекта. Вызывается из скилла av-dev:code-resolve после apply. Второй вызов идёт от сценария обслуживания: без change, фиксированным планом (autotests, operations, плюс conventions, если тронут код)."
description: "Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Состав прогона постоянный, метки у него нет: гейт (autotests), сверка со спекой (specs), разбор кода и конвенций (code), триаж; приёмник тем (basics) идёт, когда у проекта есть свои темы. Цикл задачи проверяет корректность и механику против записанного критерия — дельта-спеки, конвенции, инварианты CLAUDE.md, вывод инструментов. Темы риска и устройства — security, operations, architecture — закрыты в цикле только сверкой с записанными инвариантами: их разбор, доказательство запуском и суждение о форме решения живут в скилле av-dev:code-deep-review, который идёт по области кода и время от времени. Порядок прогона — граф зависимостей: гейт открывает проходы с мнением, триаж — единственный сток. Находки по умолчанию чинятся инлайн и молча; человеку уходит только необратимое, трогающее инвариант CLAUDE.md и меняющее дельта-спеки, а задачи из урожая заводятся по его слову. Проектная специфика приходит из документов канона проекта. Вызывается из скилла av-dev:code-resolve после apply. Второй вызов идёт от сценария обслуживания: без change, фиксированным планом (autotests, operations, плюс conventions, если тронут код)."
---
# Конвейер ревью
@@ -188,7 +188,9 @@ description: "Конвейер ревью изменения, устроенны
**Проектная тема закрывается `basics`**, и только она. Именных проходов конечное
число, а тем — сколько заведёт проект; приёмник обязателен, иначе открытость
списка была бы обещанием без механизма. Темы **ядра** он не держит вовсе:
списка была бы обещанием без механизма. Темы **ядра** он не держит **в цикле
задачи** — на прогоне обслуживания план сценария даёт ему `operations`, и это
единственное исключение (раздел «Прогон без change»). В цикле:
`requirements` закрывает `specs`, `conventions` и технику — `code`, а риск и
устройство — тот же `code` сверкой с инвариантами. Отсюда правило состава:
**`basics` запускается тогда и только тогда, когда ему есть что принимать** — см.
@@ -322,9 +324,12 @@ charter'а, а модель потом двигает калибровка, и
## Состав прогона — постоянный
**Ступени нумерованы и наружу не выходят.** Прогон ревью один, и зовёт его
**Ступени нумерованы, и наружу выходит одна.** Прогон ревью один, и зовёт его
`av-dev:code-resolve` после того, как код написан; членение внутри прогона —
ступени, и знать их снаружи не нужно. Перечень осей процесса целиком —
ступени, и знать их снаружи не нужно. Исключение единственное и названное:
**ступень 1**, автотесты, — на неё ссылаются снаружи, потому что она умеет
засчитать чужой прогон гейта по отпечатку дерева, и вызывающему надо знать, куда
этот отпечаток едет. Перечень осей процесса целиком —
[shared/axes.md](../../shared/axes.md).
**Состав не выводится ни из чего: он один и тот же на всякой задаче.** Гейт,
@@ -487,7 +492,7 @@ flowchart TD
|---|---|---|
| `autotests` | да | запускает инструменты проекта — но он источник графа и один по построению |
| `triage` | да | проверяет оракул `major` запуском — но он сток и тоже один |
| `specs`, `code`, `basics`, `rubric` | нет | читают и рассуждают, ничего не исполняют |
| `specs`, `code`, `basics` | нет | читают и рассуждают, ничего не исполняют |
**В цикле задачи цепочки за машину нет.** Оба прохода, что её держали —
`adversary` и `ops`, — переехали в скилл `av-dev:code-deep-review`; там правило
@@ -504,8 +509,10 @@ flowchart TD
державшихся на таких замерах; у каждого проекта они свои и лежат в журнале
`docs/review.md`.
Проект вправе пометить «держит машину» и другой проход — в `docs/review.md`,
разделе настройки конвейера. Снимать пометку с перечисленных нельзя.
Проект вправе пометить «держит машину» и другой проход — строкой в подразделе
**«Недоступно проверке»** файла `docs/review.md`: своего подраздела у пометки нет,
и заводить его канон не станет ради одного проекта. Читает её тот, кто строит
порядок прогона, то есть этот скилл. Снимать пометку с перечисленных нельзя.
### Находка «переделать форму» — прогон повторяется целиком
@@ -554,7 +561,7 @@ flowchart TD
## Прогон без change — сценарий обслуживания
Третий вызывающий конвейера — сценарий обслуживания скилла `av-dev:code-resolve`
Второй вызывающий конвейера — сценарий обслуживания скилла `av-dev:code-resolve`
(тулчейн и сборка, зависимости, гит-хуки, перенос, чистка). Он приходит **без
change**: у работы, не меняющей поведения, дельта-спек нет по построению.
@@ -709,7 +716,7 @@ change**: у работы, не меняющей поведения, дельт
**Технический разбор — не тема, а обязанность прохода, и он единственный.**
Остальные читают код как материал для своей оптики: `specs` — против требований,
`basics` — против отказов окружения, `architecture` — против устройства. «Здесь
`basics` — против отказов окружения проекта. «Здесь
ошибка в логике» не говорит больше никто, и до недавнего времени не говорил
никто вовсе: `code` был проходом только по конвенциям, а дефект ловился разве что
случайно. Это была самая крупная дыра конвейера, и стоила она дороже любой
@@ -789,9 +796,9 @@ change»: сверять исход с планом триаж обязан и
ущербу × вероятности → потолок 7 пунктов в основном списке.
**Разметку действия ставит он же, и умолчание у неё одно — `инлайн`.** Развилку
получает только то, что инлайном чинить нельзя: находка по необратимому месту и
находка, чья правка меняет дельта-спеки. Остальное чинится молча — см. «Что
происходит с находками дальше».
получает только то, что инлайном чинить нельзя, и оснований у неё три: правка
меняет дельта-спеки, находка сидит в необратимом месте, находка трогает инвариант
`CLAUDE.md`. Остальное чинится молча — см. «Что происходит с находками дальше».
**Он же собирает строки «отложено в `av-dev:code-deep-review`».** Проход, упёршийся
в предел цикла — нужен замер, нужен прогнанный путь, нужен вход шире диффа, —
@@ -821,11 +828,17 @@ change»: сверять исход с планом триаж обязан и
- **`Действие: развилка`** — вопросом с вариантами и ценой каждого туда, где
проект держит вопросы (это знает вызвавший скилл, а не конвейер ревью).
Помечается так **только** то, что инлайном чинить нельзя: находка по
необратимому месту (миграция, формат на диске, публичный контракт) и находка,
чья правка меняет **дельта-спеки** — то есть отменяет одобренное человеком.
Оркестратор при этом не останавливается: он урезает изменение до остатка и
доводит его.
Помечается так **только** то, что инлайном чинить нельзя, и оснований ровно
три: находка по **необратимому** месту (миграция, формат на диске, публичный
контракт), находка, трогающая **инвариант** `CLAUDE.md`, и находка, чья правка
меняет **дельта-спеки** — то есть отменяет одобренное человеком.
По первым двум основаниям оркестратор **не останавливается**: он урезает
изменение до остатка и доводит его. Третье старше: правка, меняющая
дельта-спеки, отменяет одобрение, и оркестратор **возвращается на чекпоинт**
(`av-dev:code-resolve`, `references/solve.md`, шаг 5). Вопрос в запись при этом
остаётся, но возврата не заменяет — иначе одобренный дизайн переделывался бы
молча.
- **урожай** — находка реальная, но не для этого мерджа: отложенный `major`,
развилка, решённая «потом», пачка `nit`. Конвейер отдаёт её **списком** в
отчёте: формулировка, оракул, откуда взялась (какой проход, какой change).
@@ -98,7 +98,8 @@
**Кто какой документ читает — из документа не выводится, а назначается планом.**
Документ питает тему (это записано на стороне канона, таблица «Роли документов и
темы ревью»), а тему на этом прогоне закрывает тот, кто назван в составе прогона; вся
раскладка «тема → проход → глубина» — в `SKILL.md` этого скилла и больше нигде.
раскладка «тема → кто закрывает → против чего» — в `SKILL.md` этого скилла и
больше нигде.
**Списка читателей не ведёт никто, и это не пробел.** Он жил бы на стороне
канона, а документ живёт дольше, чем раскладка проходов: список разошёлся бы с
конвейером молча и при этом выглядел актуальным. Однажды уже разошёлся.