ревью: гейт, прогнанный до ревью, засчитывается по отпечатку дерева
Повтор той же команды на неизменившемся дереве снят: ступень автотестов засчитывает прогон, сделанный шагом opsx:apply или шагом гейта обслуживания. Признак — отпечаток рабочего дерева, снятый дважды; любое расхождение ведёт к честному прогону. Журнал — тема 73.
This commit is contained in:
@@ -348,8 +348,12 @@ flowchart TD
|
||||
|
||||
### Возврат — не длиннее экрана
|
||||
|
||||
Агент возвращает: что сделано, **адресами** тронутого; исход гейта и чем он
|
||||
прогнан; что не удалось и почему; вопросы, если по заданию их не разрешить.
|
||||
Агент возвращает: что сделано, **адресами** тронутого; исход гейта, чем он
|
||||
прогнан, где логи шагов и **отпечаток дерева сразу после прогона**; что не
|
||||
удалось и почему; вопросы, если по заданию их не разрешить. Отпечаток нужен
|
||||
ревью: по нему ступень автотестов засчитывает этот прогон вместо своего
|
||||
(`av-dev:code-review`, ступень 1) — без него гейт гоняется дважды на том же
|
||||
дереве.
|
||||
Диффа, пересказа кода и логов в возврате нет — иначе экономия, ради которой шаг
|
||||
и вынесен, отменяется в момент возврата.
|
||||
|
||||
|
||||
@@ -295,6 +295,10 @@ ADR: список источников канон закрыл двумя — а
|
||||
Прогони гейт и добейся зелёного — он же условие следующего шага: пока гейт
|
||||
красный, проходы с мнением не запускаются.
|
||||
|
||||
**Сразу после зелёного сними отпечаток дерева** (`av-dev:code-review`, ступень 1)
|
||||
и сохрани его вместе со сводкой и путём к логам шагов. Шаг 4 передаёт их ревью, и
|
||||
тогда ступень автотестов не гоняет тот же гейт второй раз.
|
||||
|
||||
**Поведенческая верификация здесь другая, чем в решении.** Проверяется не новое
|
||||
поведение, а то, что прежнее не поехало: команда из `CLAUDE.md` поднимается, шаг
|
||||
сборки отрабатывает, хук ставится на чистом клоне. **У оснастки, заводимой
|
||||
@@ -304,8 +308,9 @@ ADR: список источников канон закрыл двумя — а
|
||||
|
||||
### 4. Ревью — план фиксирован сценарием
|
||||
|
||||
Вызови Skill **`av-dev:code-review`**, дав базу диффа, режим и **план сценария**.
|
||||
Change ты не передаёшь — его нет.
|
||||
Вызови Skill **`av-dev:code-review`**, дав базу диффа, режим, **план сценария** и
|
||||
**исход гейта с шага 3** — сводку, путь к логам шагов и отпечаток дерева. Change
|
||||
ты не передаёшь — его нет.
|
||||
|
||||
**Разметчик здесь не зовётся, и это правило, а не пропуск.** Обе оси, по которым
|
||||
он судит, у обслуживания не определены: размер он меряет по `proposal.md`,
|
||||
|
||||
@@ -254,7 +254,9 @@ flowchart TD
|
||||
**Код пишет агент, и в его же задании лежит весь этот раздел** (SKILL.md, «Кто
|
||||
пишет»): вызов `opsx:apply` для реализации `tasks.md`, гейт до зелёного,
|
||||
поведенческая верификация. Возврат — адреса тронутого, исход гейта и строка
|
||||
верификации; диффа в нём нет.
|
||||
верификации; диффа в нём нет. **Исход гейта возвращается сводкой, путём к логам
|
||||
шагов и отпечатком дерева** (SKILL.md, «Возврат — не длиннее экрана»): его
|
||||
передача на шаг 7 избавляет ревью от второго прогона того же гейта.
|
||||
|
||||
Код — по конвенциям проекта
|
||||
(каталог `docs/conventions/`). Меняешь схему — обнови её описание в документации
|
||||
@@ -273,7 +275,8 @@ flowchart TD
|
||||
### 7. Ревью кода — та же метка
|
||||
|
||||
Вызови Skill **`av-dev:code-review`**, дав ссылку на change `<id>`,
|
||||
базу диффа, **план разметки с шага 3** и режим запуска.
|
||||
базу диффа, **план разметки с шага 3**, режим запуска и **исход гейта с шага 6** —
|
||||
сводку, путь к логам шагов и отпечаток дерева.
|
||||
|
||||
**Метку ты не выбираешь, и это правило, а не упрощение.** Её назвал
|
||||
`review-scope` ещё на шаге 3 — по размеру и сложности, с обоснованием по каждой
|
||||
|
||||
@@ -221,6 +221,10 @@ description: "Конвейер ревью изменения, устроенны
|
||||
- **метка, его глубина и режим** прогона — чтобы проход знал, что писать в
|
||||
границы покрытия.
|
||||
|
||||
**Ступень 1 получает сверх этого исход гейта, прогнанного до ревью** — сводку,
|
||||
путь к логам шагов и отпечаток дерева, — если вызывающий скилл его дал. Зачем и
|
||||
что происходит при расхождении — «Ступень 1 — Автотесты».
|
||||
|
||||
Чего проход **не** получает ни в каком режиме — выводов других проходов. См.
|
||||
«Порядок прогона».
|
||||
|
||||
@@ -734,8 +738,9 @@ change**: у работы, не меняющей поведения, дельт
|
||||
|
||||
## Ступень 1 — Автотесты (обязательна при любой метке)
|
||||
|
||||
Агент `review-autotests`, тема `autotests`. Запускает команду гейта из семантики
|
||||
гейта в `CLAUDE.md` и интерпретирует вывод.
|
||||
Агент `review-autotests`, тема `autotests`. Гонит команду гейта из семантики
|
||||
гейта в `CLAUDE.md` — либо засчитывает прогон, сделанный до ревью, — и
|
||||
интерпретирует вывод.
|
||||
|
||||
**Тема и проход названы одинаково намеренно, а «гейт» осталось именем команды.**
|
||||
Раньше тема звалась `autotests`, а проход — `gate`: одна сущность под двумя
|
||||
@@ -743,6 +748,42 @@ change**: у работы, не меняющей поведения, дельт
|
||||
Слово «гейт» теперь значит ровно одно — барьер, который проект запускает; тема
|
||||
шире него ровно на «чего в гейте намеренно нет».
|
||||
|
||||
**Гейт, прогнанный до ревью, второй раз не гоняется.** Задача приходит на ревью
|
||||
с зелёным гейтом: сценарий решения доводит его до зелёного шагом `opsx:apply`,
|
||||
сценарий обслуживания — своим шагом гейта. Повтор на неизменившемся дереве
|
||||
вернёт тот же вывод, а стоит он минут — то есть платит ими ни за что.
|
||||
|
||||
**Признак один и проверяемый — отпечаток рабочего дерева.** Его снимают дважды:
|
||||
тот, кто прогнал гейт, сразу после прогона, и проход перед началом работы.
|
||||
|
||||
<!-- дом: отпечаток-дерева -->
|
||||
|
||||
```sh
|
||||
{ git rev-parse HEAD; git status --porcelain -uall; git diff HEAD;
|
||||
git ls-files -o --exclude-standard -z | xargs -0 -r git hash-object; } | sha1sum
|
||||
```
|
||||
|
||||
<!-- /дом: отпечаток-дерева -->
|
||||
|
||||
Сводку прошлого прогона, путь к логам шагов и отпечаток проход получает
|
||||
**заданием** — их передаёт вызывающий скилл. Отпечатки совпали — проход читает
|
||||
готовую сводку и логи, команду не запускает. Разошлись, отпечатка в задании нет,
|
||||
логи недоступны — проход гонит гейт сам и ни у кого не спрашивает.
|
||||
|
||||
**Отказ здесь безопасен по построению.** Лишний прогон стоит минут, а
|
||||
засчитанный чужой — красноты, которой никто не увидел. Временный каталог проекта
|
||||
из отпечатка выпадает сам: `--exclude-standard` отбрасывает игнорируемое, а логи
|
||||
шагов гейт пишет именно туда. У проекта, держащего временный каталог под git,
|
||||
отпечатки не совпадут никогда — и он получит честный прогон вместо тихого
|
||||
засчитывания.
|
||||
|
||||
**Переиспользуется команда, а не проход.** Тема `autotests` закрывается целиком:
|
||||
логи проход читает сам, находки об отсутствующей верификации выдаёт как обычно.
|
||||
Переиспользование он объявляет строкой сводки и строкой границ покрытия — чем
|
||||
гейт прогнан, когда и на каком отпечатке. Молчащее переиспользование неотличимо
|
||||
от собственного прогона, а разница между ними в том, кто видел вывод своими
|
||||
глазами.
|
||||
|
||||
**Пока гейт красный — проходы с мнением не запускаются.** Оркестратор чинит и
|
||||
перезапускает гейт. Исключение одно: отказ, унаследованный от базовой ветки
|
||||
(гейт проверяет это прогоном на базе) — тогда он фиксируется находкой и не
|
||||
|
||||
Reference in New Issue
Block a user