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. Увійшов, зробив, вийшов

День іде до кінця, Тьома закриває роботу як належить — фіксує чисту правку в Git і навіть готує її до злиття. Сашко все зробить сам — треба просто попросити його словами:

Зафіксуй правку partner-посилання зрозумілим повідомленням і підготуй до злиття в main.

Сашко робить коміт із зрозумілим повідомленням і готує гілку до злиття. Тьома відкриває диф востаннє — перевірити. Один рядок. Те саме цільове посилання. Більше в гілці немає нічого.

Він гортає вниз — туди, де вранці розповзалася косметика. Чужа верстка стоїть як стояла: ті самі дивні відступи, чужі імена, своя крива логіка. Той блок, який він так і не зрозумів, цілий — саме тому, що Тьома до нього не поліз.

Увійшов, зробив справу, вийшов, — каже він уголос порожній кімнаті. — І нічого не зламав.

Він веде пальцем по екрані, по чужих рядках, яких так і не торкнувся.

— Смішно, — каже він у порожнечу. — Місяць тому я б це й роботою не вважав. Де розмах, де вау? Один рядок — хто його помітить. — Хитає головою. — А от це і є клас. Те, що непомітно. Що ніхто й не здогадається, скільки я тут не зламав.

6. Зайшов і не наслідив

Олег, який увесь день краєм ока спостерігав за цією акуратністю, підходить наприкінці — і не бурчить. Дивиться на вузький чистий диф і на неушкоджену сусідню зону та каже просто:

Ось так із чужим кодом і треба. Зайшов, торкнувся акуратно, вийшов. Не наслідив.

— Дядьку Олеже, ти ж мене місяць пилив за іграшки, — Тьома відривається від екрана. — А хвалиш за один рядок. Раніше мене хвалили, коли багато й яскраво. А ти — коли мало й непомітно.

— Так це й складніше, — знизує плечима Олег. — Наворотити кожен здатен. А зайти в чуже й нічого не зламати — це треба вміти.

Тьома мовчить. І це скупе Олегове «складніше» важить зараз більше, ніж уся офісна похвала за пів екрана анімацій.

1
Опитування
Multi-agent у Claude Code, рівень 15, лекція 4
Недоступний
Multi-agent у Claude Code
Multi-agent у Claude Code
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ