ревью: гейт, прогнанный до ревью, засчитывается по отпечатку дерева

Повтор той же команды на неизменившемся дереве снят: ступень автотестов
засчитывает прогон, сделанный шагом opsx:apply или шагом гейта обслуживания.
Признак — отпечаток рабочего дерева, снятый дважды; любое расхождение ведёт
к честному прогону. Журнал — тема 73.
This commit is contained in:
av
2026-08-23 13:42:58 +03:00
parent 813345192d
commit 17be316634
7 changed files with 165 additions and 13 deletions
@@ -0,0 +1,68 @@
# 73. Гейт, прогнанный до ревью, не гоняется второй раз (2026-08-23)
## Что было
Гейт проекта прогонялся дважды на одном и том же дереве. Сценарий решения
доводит его до зелёного шагом `opsx:apply`, сценарий обслуживания — своим шагом
гейта; следом ступень автотестов конвейера запускала ту же команду заново.
Замер по прогонам в проекте transcriber 23 августа: ступень автотестов заняла 5
минут 51 секунду при ревью кода в 62 минуты. Дерево между двумя прогонами не
менялось ни разу — код писал агент, возвращал зелёный гейт, и до ревью его никто
не трогал.
Повтор держался не на доводе, а на умолчании: проход запускает команду, потому
что так написано в его уставе, и никто не спрашивал, откуда взялось дерево, на
котором он её запускает.
## Решено
**Р274. Гейт, прогнанный до ревью, второй раз не гоняется.** Переиспользуется
**команда, а не проход**: тема `autotests` закрывается целиком — логи шагов
проход читает сам, находки об отсутствующей верификации выдаёт как обычно. Дом
правила — ступень 1 конвейера, `av-dev:code-review`.
**Р275. Признак — отпечаток рабочего дерева, и он проверяемый.** Отпечаток
снимают дважды: тот, кто прогнал гейт, — сразу после прогона, проход — перед
началом работы. Совпали — прогон засчитан, разошлись — проход гонит гейт сам.
Команда живёт домом в ступени 1 и помеченной копией в уставе `review-autotests`;
дословность держит `copies.py`, а не обещание.
**Р276. Это не отмена правила «возврату на слово не верят»
([тема 72](72-writing-delegated-to-agents.md), Р270), и вот почему.** На слово
здесь не верят никому: гейт — вывод инструмента, а не проза агента, логи шагов
проход открывает сам, и отпечаток отвечает ровно на тот вопрос, который делает
чужой прогон доказательством, — **относится ли этот вывод к этому дереву**.
Правило Р270 запрещает верить пересказу; засчитывается же не пересказ, а
воспроизводимый артефакт с проверенной привязкой.
**Р277. Отказ безопасен по построению.** Любое расхождение — отпечатки не
совпали, отпечатка в задании нет, логи недоступны — ведёт к полному прогону, и
проход не спрашивает разрешения. Лишний прогон стоит минут, засчитанный чужой —
красноты, которой никто не увидел; асимметрия цены и задаёт направление отказа.
**Р278. Временный каталог из отпечатка выпадает сам.** `--exclude-standard`
отбрасывает игнорируемое, а логи шагов гейт пишет туда же. Проект, держащий
временный каталог под git, отпечатками не совпадёт никогда — и получит честный
прогон вместо тихого засчитывания. Настройки у этого нет намеренно: выключатель
здесь стал бы способом засчитать прогон, который засчитывать нельзя.
**Р279. Переиспользование объявляется строкой** — в сводке прохода и в границах
покрытия: чем гейт прогнан, когда и на каком отпечатке. Молчащее
переиспользование неотличимо от собственного прогона, а разница между ними в том,
кто видел вывод своими глазами.
## Следствия
**С254. Возврат агента письма пополнился отпечатком.** К исходу гейта и тому, чем
он прогнан ([тема 72](72-writing-delegated-to-agents.md), Р269), добавились путь к
логам шагов и отпечаток дерева. Возврат от этого не удлинился на экран: обе вещи
— строки, а не содержимое.
**С255. Оркестратор передаёт исход гейта в ревью.** Шаг 7 решения и шаг 4
обслуживания несут его вместе с планом, базой диффа и режимом. Не передал —
конвейер прогонит гейт сам, и это стоит минут, а не корректности.
**С256. Экономия названа замером, а не обещанием.** Снятый повтор — минуты одного
прогона из шестидесяти двух; остальное время ревью держат проход враждебных
постановок, цепочка за машину и триаж, и они разбираются отдельно.
+1
View File
@@ -124,3 +124,4 @@
| 70 | [«Провенанс» снят из словаря: одного синонима мало для проверки](70-provenance-word-removed.md) | 2026-08-13 |
| 71 | [Образец языка назван прямо; «интейк» снят вслед за «провенансом»](71-language-model-popular-science.md) | 2026-08-13 |
| 72 | [Письмо уходит агентам: оркестратор ставит задание и читает возврат](72-writing-delegated-to-agents.md) | 2026-08-22 |
| 73 | [Гейт, прогнанный до ревью, не гоняется второй раз](73-gate-run-reused-by-fingerprint.md) | 2026-08-23 |