JavaRush /Курсы /Claude code /3-layer review и human checkpoints

3-layer review и human checkpoints

Claude code
16 уровень , 3 лекция
Открыта

1. Автономность без точек контроля — это отложенный хаос

Когда вы впервые запускаете несколько параллельных треков, возникает очень соблазнительная мысль: «Ну всё, теперь агенты сами разберутся, а я потом посмотрю итог». На бумаге это почти мечта. А на практике очень быстро получается ситуация, где никто не знает, какой план утверждён, какой diff допустим, почему CI красный и кто разрешил трогать payments/. Автономность хороша ровно до секунды, пока кто-то не должен принять риск на себя.

Здесь важно развести два похожих, но разных понятия. Checkpoint — точка осознанного перехода между состояниями работы: одобрение плана, разрешение на edits, решение о merge, подтверждение деплоя. Quality gate — барьер на проверках: не пускает изменение дальше, пока не выполнены условия. Проще говоря, checkpoint отвечает «кто сейчас принимает решение», quality gate — «что должно пройти, чтобы это решение имело смысл обсуждать».

В параллельной работе без этих двух вещей всё начинает плыть. Представьте Commerce OS: один трек рефакторит корзину, второй меняет скидки, третий пишет тесты. Не зафиксировали, когда план approved, какой diff в рамках ownership и кто решает merge order — и хорошие по отдельности изменения конфликтуют как соседи, которые одновременно решили сверлить стену. Не злые. Просто координации нет.

Полезно смотреть на это как на инженерный конвейер:

flowchart TD
    A[План] --> B[Изменения]
    B --> C[Layer 1
локальный review] C --> D[Layer 2
CI и quality gates] D --> E[Layer 3
человеческое одобрение] E --> F[Merge / выпуск]

Эта схема кажется простой, но в ней есть важная мысль: человек не «мешает автоматизации» — он ставит точки, где её перестаёт хватать. Нет checkpoint’ов — workflow не ускорился. Хаос просто отложен на момент, когда цена ошибки выше.

2. 3-layer review как карта ответственности

Когда разработчик впервые слышит про human checkpoints, он часто начинает писать один бесконечный список: проверить план, diff, тесты, merge, деплой, секреты, а потом ещё раз на всякий случай. Получается не инженерная система, а тревожный список на холодильнике. Гораздо полезнее разложить точки контроля по знакомой вам модели 3-layer review.

Здесь слово Layer — слой review-решений: кто и на каком рубеже смотрит на изменение. Не уровень тестов, не таксономия session / worktree / Git / human.

Ниже — компактная карта, которая помогает не путаться:

Слой review Где срабатывает Кто основной участник Что обычно решается
Layer 1 локально, до commit или push автор изменения + reviewer-agent / свежий контекст одобрить план, разрешить edits, прочитать diff
Layer 2 на уровне CI и quality gates автоматические проверки + при необходимости AI-assisted review пропускать ли изменение дальше к merge
Layer 3 на уровне команды и рискованных действий человек, владелец зоны, тимлид, ответственный инженер можно ли merge, deploy, трогать конфиг, БД, внешние записи

Эта модель полезна тем, что убирает ненужные дубли: не нужно ставить одного «охранника» у каждой двери. No-secrets scan уже стоит blocking gate на Layer 2 — нет смысла вручную перечитывать репозиторий на Layer 3, если задача не high-risk.

Из этой карты следует и ещё одна полезная мысль: слои не конкурируют. Layer 1 дешёвый и быстрый, Layer 2 безэмоциональный (ему всё равно, что агент «очень старался»), Layer 3 нужен там, где цена ошибки выше цены паузы. Скучнее фантазий про автономную разработку — зато переживает реальный проект.

3. Layer 1: дешёвые локальные checkpoints

Локальный review многим кажется скучным этапом — именно поэтому его чаще всего и пропускают. Но правда в том, что Layer 1 — самый дешёвый слой контроля: ошибка здесь стоит минуты, а после merge нескольких треков — уже часы и настроение всей команды.

В параллельной работе Layer 1 обычно включает четыре понятных решения. Сначала кто-то одобряет план или разбиение задачи. Потом, если задача нетривиальная, — checkpoint перед реальными edits. Дальше — чтение diff до commit. И наконец, быстрый локальный прогон проверок под текущий scope.

Для Workflow Kit это удобно зафиксировать простым артефактом, например в CHECKPOINTS.md:

# CHECKPOINTS.md

## Слой 1
- plan approved before edits
- scope confirmed for current track
- diff reviewed before commit
- targeted checks passed locally

Здесь важен не сам файл как фетиш, а повторяемость. Когда у вас два-три параллельных workstream’а, память очень быстро начинает подменять факты: «план вроде обсуждали», «дифф вроде нормальный», «тесты кто-то запускал». Запись в артефакте возвращает процесс из тумана в проверяемую реальность.

На этом же слое reviewer-agent особенно полезен, но роль у него должна быть очень скромной. Он не «принимает PR» — помогает увидеть scope creep, странные изменения в соседних файлах, отсутствие тестов, пробелы в reasoning. Хороший Layer 1: автор делает изменение, reviewer-agent возвращает findings, человек читает diff и решает. Плохой: агент сказал «looks good», и все радостно разошлись.

4. Layer 2: детерминированные quality gates

Когда изменение выходит за пределы локального контекста и двигается дальше, нужен слой, которому вообще не важно, кто писал код — вы, агент, коллега или очень вдохновлённая кофемашина. Layer 2 именно такой: CI и quality gates, где решают не обещания, а сигналы: тесты, линт, сборка, типы, smoke checks, регрессионные проверки, проверка секретов, наличие описания риска.

Главная сила Layer 2 в том, что он не спорит. Падает ./gradlew test — никакая харизма агента не сделает этот факт менее красным. Не «как вам кажется», а «прошло или нет».

Для Commerce OS на этом слое разумно держать минимум такой набор: тесты по затронутому модулю, сборка, статические проверки, smoke check для основного сценария и no-secrets scan. Иногда добавляют AI-assisted review по diff — но порядок ролей помните: AI review здесь дополнение к deterministic checks, не их замена.

Даже hook’и лучше всего чувствуют себя именно на стыке Layer 1 и Layer 2: прогнать форматирование, заблокировать коммит с утёкшим секретом, запустить небольшой регрессионный набор. В конфиге это может выглядеть так:

{
  "pre-commit": [
    { "name": "no-secrets", "command": "scripts/no-secrets.sh", "blocking": true },
    { "name": "format", "command": "scripts/format.sh", "blocking": false }
  ]
}

Здесь очень важна мелочь: blocking и non-blocking — принципиально разные роли. Форматирование — помощник, подчищает хвосты. Проверка на секреты — настоящий gate. Но даже блокирующий hook не «финальный одобряющий»: он лишь не пускает изменение дальше, пока условие не выполнено.

Ещё одна важная мысль: gate, который никогда не падает, бесполезен — он поверхностный или его давно не пересматривали. Gate, падающий в половине задач по шуму, тоже плох: команда начинает его игнорировать. Настоящий quality gate ловит реальные нарушения и остаётся узким, чтобы ему верили.

5. Layer 3: дорогие решения остаются за человеком

На Layer 1 и Layer 2 многое автоматизируется, и это прекрасно. Но есть зона, где автоматизация должна уметь вовремя остановиться и честно сказать: «Дальше, пожалуйста, человек». Обычно это решения, затрагивающие общую историю проекта, чувствительные зоны или дорогие последствия ошибки. Тут начинается Layer 3.

В параллельной работе Layer 3 особенно важен, потому что именно здесь чаще всего встречаются результаты нескольких треков сразу. Один агент подготовил refactor checkout flow, второй правил promo rules, третий добавил тесты и документацию. По отдельности всё хорошо. Но решение о merge order, об объединении в main, о конфигурации или о выпуске нельзя передать механизму, который проверял линт.

Хорошее правило для команды можно зафиксировать прямо в CLAUDE.md или policy-документе Workflow Kit:

## Правила слоя 3

Не выполнять без явного одобрения человека:
- merge в main
- deployment
- изменения в config и secrets
- destructive commands
- внешние write-actions

Это простой кусок текста, но он делает важную вещь: снимает двусмысленность. У агента нет пространства для «я подумал, что тут, наверное, можно»: high-risk упирается в человека. И это не недоверие к инструменту, а нормальная инженерная дисциплина. Никто не считает унизительным, что релиз подписывает ответственный инженер, а не shell-скрипт.

На этом слое также особенно важно иметь владельца зоны. Задели payments/, pricing/ или общий конфиг — решает не абстрактный «кто-нибудь из команды», а конкретный человек или роль. Иначе — коллективная безответственность: все участвовали, никто ничего не разрешал.

6. Hooks помогают, но не одобряют

Когда в workflow появляется много автоматизации, hooks очень легко переоценить. Они действительно удобны: напомнят про тесты, отформатируют, заблокируют опасную команду, добавят контекст, запустят проверки после edits. После пары удач возникает почти магическое чувство: «теперь workflow сам себя охранит». А это уже ложная безопасность.

Хороший способ думать о hook’ах — как о помощниках на проходной. Они подсветят проблему, не пустят очевидно плохое действие, вовремя подадут сигнал. Но инженерное решение за команду не принимают. Hook не знает бизнес-контекст, не несёт ответственность за merge и не должен одобрять high-risk шаг только потому, что формальные признаки зелёные.

Это особенно важно в multi-agent сценариях. Hook блокирует запись в payments/ — замечательно. Но если изменение всё-таки допустимо, кто решит, что его можно проводить? Не hook. Человек на Layer 3. CI прошёл — значит можно merge? Не всегда: возможно, параллельный трек готовит конфликтующий выпуск; возможно, владелец домена ещё не смотрел diff; возможно, риск технически валидный, но продуктово сомнительный.

Поэтому полезно держать в голове очень простую формулу: hook может остановить, но не может одобрить. Пытаясь стать «маленьким начальником», автоматизация превращается либо в помеху, либо в фальшивое чувство безопасности.

7. Checkpoints живут в артефактах, не в голове

В первых попытках построить автономный workflow всю систему контроля держат в голове. «Мы же знаем: читаем план, потом diff, ждём CI, осторожно merge». Пока один трек и один человек — это ещё работает. Как только появляется несколько workstream’ов, память начинает предавать. Именно поэтому checkpoints и gates превращаем в артефакты.

Для текущего уровня курса особенно удобен тот же parallel-session-log.md. В нём фиксируем не только какие треки шли параллельно, но и какие слои review реально сработали:

# parallel-session-log.md

Track: feature/checkout-refactor
Layer 1: plan approved, diff reviewed
Layer 2: tests/lint/build green
Layer 3: merge paused until promo owner review
Decision: split PR, cherry-pick tests first

Это кажется мелочью, но именно такие мелочи делают workflow наблюдаемым. Откройте лог в любой момент и не вспоминайте, а видьте: где был человеческий checkpoint, где сработал quality gate, где решение отложили, где приняли. На границе текущего блока курса такой лог особенно ценен: он показывает, что extension + orchestration layer у вас освоен не на словах, а работает как система.

Часто рядом с этим логом имеет смысл держать и CHECKPOINTS.md для команды — чтобы общие правила не зависели от памяти конкретного разработчика. Разделение то же, что для handoff-контракта: policy-версия CHECKPOINTS.md живёт в Workflow Kit, а фактическое прохождение трека через эти checkpoints фиксирует runtime-лог рядом с проектом.

Соберём три слоя в одну картину. Layer 1 ловит ошибку за минуту, пока она дешёвая; Layer 2 безэмоционально режет то, что не прошло тесты, сборку и no-secrets scan; Layer 3 оставляет за человеком ровно те решения, где цена ошибки выше цены паузы — merge в main, деплой, конфиг, чувствительные зоны. Hook при этом честно знает свой потолок: он может остановить, но не одобрить. Выстройте эти рубежи — и автономность агентов перестаёт быть ставкой «а вдруг пронесёт»: она ограничена там, где риск реальный, и свободна там, где ошибка дешёвая.

1
Задача
Claude code, 16 уровень, 3 лекция
Недоступна
Запуск локальных quality gates из terminal
Запуск локальных quality gates из terminal
1
Задача
Claude code, 16 уровень, 3 лекция
Недоступна
Layer 1 local review внутри Claude CLI
Layer 1 local review внутри Claude CLI
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ