В цикле задачи темы security и operations закрывает один лёгкий проход
review-proof: чтением и рассуждением, без запуска, потолки раздельные. Машину
он не держит, поэтому идёт в общем залпе — цепочки за ресурс в обычном прогоне
не осталось. Тяжёлая пара adversary и ops переехала в новый скилл
code-deep-review: вход — названная область кода, глубина постоянная, исход —
разбор с человеком и задачи через task-track. Вход глубокому прогону копит сам
цикл строками «отложено». Журнал — тема 76.
description:"Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Разметка задачи идёт один раз, после apply: агент review-scope выводит размер по диффу и сложность по форме решения, из их максимума — метка, и раздаёт темы проходам. Метка правит состав ревью кода: small — гейт, спеки, код, триаж; medium — плюс приёмник тем; large — плюс доказательство: враждебные постановки, эксплуатационный постмортем, архитектурный проход на широком входе. Триаж обязателен всегда. Порядок прогона — граф зависимостей: гейт открывает проходы с мнением, проходы с пометкой «держит машину» идут цепочкой, триаж — единственный сток. Проектная специфика приходит из документов канона проекта. Вызывается из скилла av-dev:code-resolve после apply. Второй вызов идёт от сценария обслуживания: без change и без метки, фиксированным планом (autotests, operations, плюс conventions, если тронут код), разметчик при этом не запускается."
description:"Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Разметка задачи идёт один раз, после apply: агент review-scope выводит размер по диффу и сложность по форме решения, из их максимума — метка, и раздаёт темы проходам. Метка правит состав ревью кода: small — гейт, спеки, код, триаж; medium — плюс приёмник тем; large — плюс review-proof (security и operations разом, чтением и рассуждением) и архитектурный проход на широком входе. Триаж обязателен всегда. Порядок прогона — граф зависимостей: гейт открывает проходы с мнением, триаж — единственный сток; проходы с пометкой «держит машину» идут цепочкой, но в обычном прогоне таких нет. Тяжёлые проходы — adversary и ops — переехали в скилл av-dev:code-deep-review, который идёт по области кода и время от времени. Проектная специфика приходит из документов канона проекта. Вызывается из скилла av-dev:code-resolve после apply. Второй вызов идёт от сценария обслуживания: без change и без метки, фиксированным планом (autotests, operations, плюс conventions, если тронут код), разметчик при этом не запускается."
способ закрыть тему на заданной глубине, и проходы меняются: уезжают в старшую метку, сливаются, упраздняются. Если состав прогона считать списком проходов,
то уехавший проход уносит тему с собой **беззвучно** — отчёт честно скажет
«`ops` не запускался» и не скажет «эксплуатацию не смотрел никто», а нужно
второе. Поэтому прогон описывается таблицей «тема → глубина → кто закрывает», и
второе. Проверено на живом переезде: `ops` ушёл в `av-dev:code-deep-review`, а
тема `operations` осталась в конвейере и досталась `proof`. Поэтому прогон описывается таблицей «тема → глубина → кто закрывает», и
таблица эта есть в каждом отчёте.
1.**Recall чек-листа равен длине чек-листа.** Проход, устроенный как «проверь
план фиксирован и назван сценарием. Разметчик не запускается вовсе.
- **Без метки** — размечать нечего, план фиксирован и назван вызывающим,
разметчик не запускается вовсе. Так идут двое: сценарий обслуживания, у
которого нет change, и скилл `av-dev:code-deep-review`, у которого нет задачи —
он смотрит названную область кода.
**Без метки — не то же самое, что `small`.**`small` — это суждение о размере и
сложности, снятое с изменения; отсутствие метки — утверждение, что снимать её
@@ -867,52 +873,51 @@ Recall темы `conventions` равен длине конвенций прое
взгляда на ось времени — значит изменение, которое не откатывается обратной
правкой, на `small` не идёт вовсе, каким бы малым оно ни было.
## Ступень 4 — Доказательство (только `large`)
## Ступень 4 — Риск и устройство (только `large`)
Три прохода, и все три уходят сразу после зелёного гейта, в одном ряду со
ступенью 2. Каждый берёт свою тему и доводит её до **доказательства**:
Два прохода, оба уходят сразу после зелёного гейта, в одном ряду со ступенью 2.
Машину не держит ни один, ждать им нечего:
-`review-adversary`, тема `security` — находка есть **построенный путь**, а не
свойство: он пишет падающий тест и гоняет его;
-`review-ops`, тема `operations` — постмортем от симптома у владельца сервиса к
строке кода, с числами;
-`review-proof` — **две темы разом**, `security` и `operations`. Набросок пути
(вход, преобразование, куда легло) и ось времени (миграция и откат, рост,
удержание, чужая деградация). Строит сценарий рассуждением и ничего не
запускает; потолки раздельные — 2 находки на тему;
-`review-architecture`, тема `architecture` — концептуальная целостность на
входе шире диффа.
**Первые двое помечены «держит машину», поэтому между ними ребро конфликта: они
идут цепочкой, а не разом** (правило и его причина — в «Порядок прогона», раздел
«Кто держит машину»). Направления у ребра нет: кто первый — неважно.
`architecture` машину не держит и ждать ему нечего — он уходит в первой волне.
**Доказательства на этой ступени больше нет, и это решение по цене.** Прежде обе
темы закрывала пара тяжёлых проходов: `review-adversary` строил путь и **прогонял**
падающий тест, `review-ops` снимал числа замером. Оба держали машину, шли
цепочкой и стоили часов на каждой задаче, где запускались.
Цепочка не отменяется общим «гони по графу» — она и есть часть графа. Отменяет
её только прямое слово оператора проэту пару, и тогда в границы покрытия идёт
строка, что числа прогона сняты под соседней нагрузкой.
Пара никуда не делась — её зовёт скилл **`av-dev:code-deep-review`**, который
идёт не на задаче, а по названной области и время от времени. Замер, ради
которого её и держали, остался: враждебный проход дал пять из семи выживших
находок дозапуска на пяти задачах подряд, эксплуатационный — единственный, кто
нашёл, что откат бинаря поверх новой схемы стартует молча. Ценность этой пары
оплачивалась **на каждой** задаче, а получалась на немногих; теперь она
оплачивается тогда, когда её решают получить.
**Эта ступень зарабатывает больше всех остальных вместе — и она же дороже всех
остальных вместе.** Измерено на пяти задачах подряд: враждебный проход дал пять из
семи выживших находок дозапуска (включая обе верхние); эксплуатационный —
единственный, кто нашёл, что откат бинаря поверх новой схемы стартует молча. Оба
несут внешний оракул по построению: один обязан путь **прогнать**, второй смотрит
ось времени и эксплуатации. Ровно поэтому они и стоят денег: оракул добывается
запуском, а запуск — это машина, цепочка и часы.
**`review-proof` копит вход глубокому прогону.** Всё, что доказывается только
запуском, он не выдаёт находкой и не выбрасывает: строка в границах покрытия
называет тему, место и запуск, которым это проверяется. Строка — единственный
вход `av-dev:code-deep-review`, заводящийся по ходу обычной работы.
Раньше эта пара стояла в `medium`, то есть на большинстве задач. Ступень
переехала в `large`**сознательно и по цене, а не потому, что перестала находить**:
она осталась самой ценной, но её ценность оплачивается на каждой задаче, а
получается — на немногих. Что из-за этого перестало проверяться на младших метках, названо в «Честном пределе» и обязано идти строкой в границы покрытия
каждого прогона `small` и `medium`.
**Чем платит цикл, названо прямо.**`critical` эта ступень больше не присваивает:
его оракул добывается запуском. Дефект, который виден только под нагрузкой —
гонка, деградация, исчерпание ресурса, — в цикле задачи не ловится ничем; это
идёт строкой в границы покрытия каждого прогона и разобрано в «Честном пределе».
Дома тем приходят из плана разметки задачи: `security`— враждебному,`operations`
(эксплуатация и хранилище) — эксплуатационному, `architecture` (устройство,
граница домена) — архитектурному. Что с чем сшивать и почему —
[project-facts.md](references/project-facts.md), раздел «Сшивать обязаны
проходы». Без домов ступень вырождается в общие места.
Дома тем приходят из плана разметки задачи: `security`и`operations` —
`review-proof`, `architecture` (устройство, граница домена) — архитектурному. Что
с чем сшивать и почему — [project-facts.md](references/project-facts.md), раздел
«Сшивать обязаны проходы». Без домов ступень вырождается в общие места.
**Числа и решения проекта эта ступень больше не читает.**`research.*` и `adr.*` —
процессные документы, и прогон их не открывает. Для эксплуатационного прохода это
значит, что **число он обязан снять сам** — замером, а не цитатой из чужой
записки; для архитектурного — что граница домена берётся из `passport.*`, а не из
истории решений. Обе потери названы в «Честном пределе».
**Числа и решения проекта эта ступень не читает.**`research.*` и `adr.*` —
процессные документы, и прогон их не открывает. Для `review-proof` это значит,
что чужое число ему не оракул: он его не снимал, а свои он не снимает вовсе. Для
архитектурного — что граница домена берётся из `passport.*`, а не из истории
решений. Обе потери названы в «Честном пределе».
**Условие ступени и есть условие метки `large`:** изменение крупное **или**
незнакомое — любая из двух осей. Разведены они не для красоты: у архитектурного
@@ -1033,8 +1038,8 @@ change»: сверять исход с планом триаж обязан и
Отдельно и честно: **поимённая сверка с положениями руководств по стилю языка не
задаётся ни одним проходом.** Проход про идиоматичность упразднён, его способные
части переселены (эксперимент против поведения библиотеки и драйвера — в `ops`,
вопрос 8; «не изобретаем ли то, что уже есть в библиотеке» — в `architecture`,
вопрос 1), но различение «идиоматично против распространено» теперь не спрашивает
вопрос 8, а он теперь в `av-dev:code-deep-review`; «не изобретаем ли то, что уже
есть в библиотеке» — в `architecture`, вопрос 1), но различение «идиоматично против распространено» теперь не спрашивает
никто. Класс обратимый — портит форму кода, не данные, — и его надо признавать в
границах покрытия, а не считать проверенным.
@@ -1068,14 +1073,21 @@ change»: сверять исход с планом триаж обязан и
**Темы при этом названы все — но закрыты они по-разному, и это надо читать
буквально.** «Тема `security`, глубина сверка» не значит «безопасность
проверена»: значит, что дом темы открыли, дифф посмотрели и сравнили. Между
сверкой и доказательством лежит весь класс дефектов, который виден только
построенным путём, — и он проверяется на 5–10% задач.
проверена»: значит, что дом темы открыли, дифф посмотрели и сравнили.
Это сознательная сделка, а не пробел в устройстве: цена метки `large` платится на
каждой задаче, а окупается на немногих. Проверяется сделка не рассуждением, а
журналом дефектов: если класс, который ловят только меряющие проходы, начал
всплывать после мерджа — метку выбирают слишком низко.
**Доказательства в цикле задачи нет ни на одной метке, и это самая крупная его
граница.** Класс дефектов, который виден только построенным путём и снятым
числом — гонка, деградация под нагрузкой, исчерпание ресурса, откат бинаря поверх
новой схемы, — не ловится здесь ничем: на `large` его смотрит `proof` чтением и
называет отложенным, ниже `large` его не смотрит никто.
Это сознательная сделка, а не пробел в устройстве: пара меряющих проходов
оплачивалась на каждой задаче с меткой `large`, а получалась на немногих. Теперь
она живёт в `av-dev:code-deep-review` и оплачивается тогда, когда её решают
получить. Проверяется сделка не рассуждением, а двумя следами: **строками
«отложено»** в отчётах — если по одному месту повторяется один и тот же неснятый
замер, глубокий прогон просрочен, — и **журналом дефектов**: класс, всплывающий
после мерджа, значит, что прогон надо звать чаще.
Так же честно и про упразднённый проход: **«не знаю, чего не знаю» больше
не достаёт никто.** Проход независимой реализации писал свою версию узла, не
@@ -1100,6 +1112,9 @@ change»: сверять исход с планом триаж обязан и
и где это лежит в документах проекта; таблица поразрядной деградации.
- [references/review-levels.md](references/review-levels.md) — дом правила выбора
метки: две оси, спорное вниз, чем `small` дешевле, доли как проверка правила.
- Skill `av-dev:code-deep-review` — глубокое ревью области кода: там живут
`review-adversary` и `review-ops`, там же единственное место процесса, где
находка доказывается прогоном и замером.
- Skill `av-dev:canon` — приведение проекта к канону документов.
- [references/finding-contract.md](references/finding-contract.md) — контракт находок.
| `review-basics` | отказ, видимый чтением | убрать обработку ошибки записи так, чтобы отказ считался успехом |
| `review-basics` | своя тема проекта | нарушить правило из документа, у которого нет именного прохода |
| `review-architecture` | второй способ | завести вторую точку генерации id мимо единой |
| `review-adversary` | построенный путь | принять внешний идентификатор без разбора до запроса в хранилище |
| `review-ops` | деградация окружения | убрать обработку недоступности внешней зависимости в фоновом цикле |
| `review-proof` | набросок пути и ось времени | принять внешний идентификатор без разбора до запроса в хранилище; убрать обработку недоступности внешней зависимости в фоновом цикле |
| `review-triage` | шум | подать 20 находок, из них 15 вкусовщина и 3 дубля — проверить потолок и дедуп |
Метрик сверх этого не заводим. Precision, корреляция между проходами, стоимость
- **Спорно между `medium` и `large` → бери `medium`.** Ошибка в эту сторону
стоит находки, которая всплывёт на следующей задаче или в журнале дефектов.
Ошибка в обратную стоит трёх тяжёлых проходов, двое из которых держат машину и
идут цепочкой, — и платится она **на каждой** задаче, выбранной неверно.
Ошибка в обратную стоит двух лишних проходов на каждой задаче, выбранной
неверно. Цена этого шага заметно упала: тяжёлая пара, что держала машину и шла
цепочкой, переехала в `av-dev:code-deep-review`, и `large` теперь добавляет два
прохода чтением, а не часы запусков.
- **Спорно между `small` и `medium` → бери `medium`.** Раньше эта строка
обосновывалась тем, что состав одинаков и ошибка почти бесплатна. Теперь состав
разный, и обоснование стало прямо противоположным: на `small` три темы ядра
@@ -101,7 +103,7 @@
Обратное тоже верно и тоже не бесплатно: у каждой задачи есть **несокращаемый
костяк — гейт, спеки, код, триаж**. Разрезать задачу, обе половины которой
остаются в одной метке, значит заплатить костяк дважды за ту же проверку.
Резать стоит там, где разрез **снимает доказательство с большей части диффа**.
Резать стоит там, где разрез **снимает старшую метку с большей части диффа**.
Шов и правило нарезки живут у того, кто ведёт задачи, — скилл
`av-dev:task-track`, его раздел о нарезке. Пути туда конвейер не выносит: за
пределы своего скилла он ходит вызовом, а не файлом.
@@ -150,9 +152,10 @@
## Доли — не пожелание, а проверка правила, и проверок две
**Сверху: `large` — 5–10%.** Если туда уходит каждая третья задача, метку
выбирают по ощущению важности. Обратный перекос виден по журналу проскочивших
дефектов: класс, который ловят только меряющие проходы, начинает всплывать после
мерджа.
выбирают по ощущению важности. Обратный перекос виден по двум следам: по журналу
проскочивших дефектов и по строкам «отложено» в отчётах — если по одному месту
повторяется один и тот же неснятый замер, дело не в метке, а в том, что глубокое
ревью области просрочено.
**Снизу: `small` не должен обгонять `medium`.** Ориентир — до трети задач, но
сравнение важнее числа: **перевес `small` над `medium` значит, что рабочее
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.