JavaRush /Курсы /Claude Code SELF /Вахтёр на диффе

Вахтёр на диффе

Claude Code SELF
15 уровень , 4 лекция
Открыта

1. Перезаход: ветка, режим, узкая задача

До сих пор его почти вели за руку: Олег учил чтению чужого кода, Лёха показывал инструменты. Теперь Тёма собирает правку начисто и сам — с Саней, от чистой ветки до слитого результата. На руках у него всё нужное: scope, три класса изменений, режим под риск. Задача простая: сделать ровно одну дверь и не дать перекрасить квартиру.

Утром он ломанулся бы в файл сходу. Сейчас — тормозит.

— Так, не гони, — говорит он себе под нос. — Как Олег учил: медленно и по порядку.

Первым делом — ветка. Чужой код на main он давно не трогает, это уже рефлекс.

— Сперва подстелить соломки, — бормочет он и пишет Сане словами:

Заведи ветку под правку partner-зоны и переключись на неё.

Саня заводит fix/partner-linkmain нетронут, есть куда откатиться, если пойдёт криво. Тёма для верности переспрашивает:

на какой я сейчас ветке?

fix/partner-link, не main, — докладывает Саня.

— Вот и хорошо. — Тёма выдыхает. — Теперь руль доверия. Тут чужое, вслепую не верю.

Жмёт Shift+Tab, пока режим не встанет в manual:

Shift+Tab → manual      # на чужом коде НЕ acceptEdits: хочу видеть КАЖДОЕ изменение

В статусе сессии — ⏸ manual mode on, не acceptEdits. Теперь ни одна правка не уедет в файл, пока Тёма сам её не глянет.

— И только теперь — сама задача, — говорит он. — Не как утром. С границей.

Пишет узко, с запретным блоком:

В partner-зоне поправь ссылку у спонсорского блока на новый адрес. Больше ничего не трогай.

Отправляет.

2. Разбираем дифф по ящикам

Саня делает нужную правку — и, как Тёма уже знает, тащит за собой хвост. Сообщает, что готов применить, и ждёт: режим manual сработал, в файл ещё ничего не уехало. Тёма открывает /diff — и видит разом всё: настоящее целевое изменение, чужое форматирование подрядчика, пара мелких beautify-штрихов и движение в соседней зоне, куда задача вообще не просила заходить.

/diff       # смотрим весь заход: сколько тут от задачи, сколько «заодно»

Раньше Тёма бы пролистнул это и кивнул. Сейчас наклоняется к экрану и идёт по диффу медленно, подозрительно, не скользя. Впервые в жизни он на диффе не пассажир, а вахтёр — и вслух разносит каждый кусок по ящикам.

— Так. Вот целевое — дверь, которую просили покрасить. Это беру. — Палец ползёт ниже. — А это что? Форматирование причесал, отступы переставил… я про это не просил. Лишнее. — Ещё ниже, и он хмурится. — Тут вообще в соседнюю зону залез, а я даже не знаю, что там держится. Опасное, руки прочь. — И замирает на последнем: непрошеная анимация, логотипы мягко всплывают, реально дорого сделано. — Ох, красиво же… старый я такое бы сразу в портфолио. — Палец висит секунду. — Но не заказывал. И не в чужом коде. Неожиданное — мимо.

— Оставить только целевое? — уточняет Саня.

— Не-а. — Тёма мотает головой. — Одна нужная строчка утонула в хвосте, весь заход кривой. diff мне для того, чтоб понять, а не по кусочку выковыривать. Заворачиваю целиком.

Он отклоняет правки — в файл не уходит ничего. И заворачивает Сане заход не просто «переделай», а с границей теснее, чтоб хвоста в принципе не было:

Только ссылку в спонсорском блоке. Форматирование, соседние зоны и анимацию не трогай вообще.

Саня заходит снова — и в этот раз дифф короткий: одна строчка. Та самая дверь. Тёма ещё раз проходит его вахтёромчисто, хвоста нет — и вот теперь принимает.

— Прикинь, Сань, — говорит он и сам на этом ловится, — первый раз в жизни горжусь не тем, что нагородил. А тем, что не сделал. Раньше кайф был от «ого, сколько я наворотил». А сейчас — от того, что ни одна лишняя фигня мимо меня не пролезла. Тише, а слаще.

3. Один заход — целиком в корзину

В одном из заходов Саня разгоняется так, что дифф снова на пол-экрана. Вылавливать по одному — и лень, и опасно: моргнёшь — пропустишь опасный кусок.

— Кривой дубль, — говорит Тёма без прежней паники. Полкурса назад он бы тут похолодел — «всё, опять сломал». Сейчас просто пожимает плечами и жмёт /rewind. Весь заход целиком — в корзину.

/rewind     # снять расползшийся заход целиком, вернуться к состоянию до правки

— Смешно, — говорит он Сане, глядя на чистое окно. — Я ж на эту кнопку в начале курса чуть не молился. Она одна меня и спасала.

— А теперь? — будто подыгрывает Саня.

— А теперь она просто верхняя сетка. Под ней ветка, под веткой ещё что-нибудь. Раньше вся защита висела на одном /rewind, а сейчас их у меня несколько. Заходим заново, поаккуратнее.

4. Закрепляем правила в settings.json

После пары таких заходов Тёма понимает, что управлять все руками каждый раз — морока. Одно и то же: partner-зону под спрос, замороженный кусок — наглухо. Он просит Саню положить это правилом в settings.json, чтоб не решать заново на каждом шаге:

{
  "permissions": {
    "ask":  ["Edit(src/partner/**)"],
    "deny": ["Edit(legacy/**)"]
  }
}

Читается прямо: правки в папке src/partner/спрашивать перед каждой; в legacy/, старом замороженном куске портала, — запрещено наглухо, агент туда даже не сунется.

— А ну проверим, что не для красоты написано, — Тёма нарочно толкает Саню в legacy/. Правило срабатывает, дверь заперта. — О, бьёт точно по адресу. Не «всё или ничего», а именно туда, куда надо.

5. Вошёл, сделал, вышел

День идет к концу, Тёма закрывает работу как положено — фиксирует чистую правку в гите и даже готовит её к слиянию. Саня все сделает сам - нужно просто попросить его словами:

Зафиксируй правку partner-ссылки осмысленным сообщением и подготовь к слиянию в main.

Саня делает коммит с понятным сообщением и готовит ветку к слиянию. Тёма открывает дифф последний раз — проверить. Одна строчка. Та самая дверь. Больше в ветке нет ничего.

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

Вошёл, сделал дело, вышел, — говорит он вслух пустой комнате. — И ничего не сломал.

Он ведёт пальцем по экрану, по чужим строчкам, которые так и не тронул.

— Смешно, — говорит он в пустоту. — Месяц назад я бы это и за работу не счёл. Где размах, где вау? Одна строчка, кто её заметит. — Качает головой. — А вот это и есть класс. Что незаметно. Что никто и не догадается, сколько я тут не сломал.

6. Зашёл и не наследил

Олег, который весь день краем глаза наблюдал за этой аккуратностью, подходит к концу — и не ворчит. Смотрит на узкий чистый дифф, на нетронутую соседнюю зону, и говорит просто:

Вот так с чужим кодом и надо. Зашёл, тронул аккуратно, вышел. Не наследил.

— Дядь Олег, ты ж меня месяц пилил за игрушки, — Тёма отрывается от экрана. — А хвалишь за одну строчку. Раньше меня хвалили, когда много и ярко. А ты — когда мало и незаметно.

— Так это и сложнее, — пожимает плечами Олег. — Наворотить всякий горазд. А зайти в чужое и ничего не сломать — это уметь надо.

Тёма молчит. И это скупое Олегово «сложнее» весит сейчас больше, чем весь офис хвалил за пол-экрана анимаций.

1
Задача
Claude code, 15 уровень, 4 лекция
Недоступна
Delegation brief для backend-owner
Delegation brief для backend-owner
1
Задача
Claude code, 15 уровень, 4 лекция
Недоступна
Создание AGENT_HANDOFF_CONTRACT.md
Создание AGENT_HANDOFF_CONTRACT.md
1
Опрос
Multi-agent в Claude Code, 15 уровень, 4 лекция
Недоступен
Multi-agent в Claude Code
Multi-agent в Claude Code
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ