JavaRush /Курси /Claude Code SELF /Диф як ворота якості

Диф як ворота якості

Claude Code SELF
Рівень 15 , Лекція 3
Відкрита

1. Диф — це ворота, а не підсвічування

— Окей, три кошики я зрозумів, — каже Тьома. — А руками я це де розбираю? Де взагалі дивитися цей диф?

Льоха відкриває термінал.

— Кілька днів тому ти вже навчився дивитися зміни перед тим, як комітити їх. Прокрутити, кивнути: «ніби ок». Тепер наступний рівень — не просто прокрутити, а розібрати кожну зміну по суті. Команда та сама:

/diff       # показати всі зміни — проходимо кожен фрагмент окремо

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

✓ цільова правка                              → це й просив
✗ переформатував пів файлу «заодно» (зайве)   → повз задачу
✗ торкнувся сусідньої зони поза scope (небезпечне) → повз задачу
? додав непрохану анімацію (неочікуване)     → не замовляв; на чужому — повз

— І ось тут важливо, як це працює вручну, — Льоха зупиняється. — /diff тобі все показує, але вишкрябати з нього один шматок і залишити решту він не дає — не для того його зроблено. Це вікно огляду, а не хірургічний стіл. Тому рішення тут не таке: «прийняти цей рядок, відхилити той». Рішення ширше: якщо в дифі є хвіст — увесь захід кривий. Ти його не береш цілком і просиш агента переробити вузько, рівно по межі.

— Тобто я не відсіюю шматки по одному, — здогадується Тьома. — Я по дифу БАЧУ, що захід розповзся, — і розвертаю весь. А потім ставлю задачу вужче, щоб хвоста й не було.

— Саме так. Диф — це ворота якості: ти на них вахтер. Побачив зайве — захід не проходить, розвертаєш і переробляєш чистіше. Не лагодиш кривий дубль по шматочках, а не пропускаєш його взагалі. І ось це вже не «диф показав» — це диф тебе питає, впускати захід чи ні. А відповідаєте ви, а не агент.

Тьома промовляє своє:

— Раніше диф мені показував: «ось тут змінилося». А тепер по ньому я вирішую: цей захід у проєкт чи назад на переробку.

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

2. Коли простіше відкотити весь захід

— А якщо Сашко так широко напартачив, що чистити руками кожен шматок — втомишся? — питає Тьома. — Реально ж буває, що він пів файлу перелопатить.

— Буває. Тоді не мучся, — Льоха показує. — Не виловлюй сто дрібних шматків по одному. Знімаєш увесь захід разом:

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

— Твоя найперша кнопка курсу, памʼятаєш? — додає Льоха. — Жива й корисна, але тепер це ближня страховка сесії — прибрати один невдалий захід. Не єдина сітка, а верхня з кількох: під нею ще гілка в git, яку ти нещодавно вивчав.

Тьома киває. Колись він думав, що ця кнопка врятує від будь-чого. Тепер бачить її справжнє місце.

3. Режим довіри під ризик

— Слухай, а можна якось заздалегідь зробити так, щоб він узагалі в чуже не ліз? — Тьома хоче не ловити хвіст щоразу, а перекрити все на вході. — А то я втомився за ним підчищати.

— Можна. Половина успіху — вибрати правильний режим заздалегідь, — Льоха перемикається. — Памʼятаєш «кермо довіри» минулого тижня? Раніше крутив за звичкою. Тепер — за ціною помилки. І перше, що робиш у чужому коді, — НЕ довіряєш сліпо.

— У Claude Code є три режими роботи:

  • manual — ШІ просить дозвіл на будь-яку дію з файлами на диску
  • acceptEdits — редагування дозволено.
  • plan mode — узагалі не можна нічого змінювати на диску. Займаємося тільки плануванням роботи.

Перемикати їх можна за допомогою комбінації клавіш "Shift+Tab".

— Давай я поясню кожен із них, — продовжує Льоха. — manual — «покажи кожну зміну файла й спитай, перш ніж торкатися». У командах це ж default: --permission-mode default. Є швидший режим, acceptEdits: агент сам править файли в проєкті й не смикає вас щоразу. У своєму коді — чудово, не страшно. У чужому — ворог: агент накоїть багато чого, а ви й не побачите. Тому в чужій квартирі — manual, бачимо кожен крок.

— І правило тут одне, — додає Льоха, — налаштуй кермо за ризиком, а не за звичкою. Безпечне — читання файлів, прогін тестів — нехай проходить вільно. Небезпечне — правки в чужій зоні — суворо під контролем. А прикордонне нехай питає.

4. Точкові правила прав у settings.json

— А якщо щоразу читати, що ШІ питає, і відповідати — це не втомить? — Тьома шукає, як спростити роботу. — Чим більше питань він ставить, тим менш уважно я їх читаю.

— Не втомить, те саме можна прописати один раз, — Льоха відкриває налаштування. — Щоб не вирішувати заново на кожному кроці, що під запит, а що під заборону, можна записати всі правила в .claude/settings.json:

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

— Давай поясню, що тут написано, — продовжує Льоха. — Edit — «агент править файл», у дужках — де саме. src/partner/** — уся папка src/partner з усім усередині, твоя сьогоднішня робоча зона, тож будь-які правки там — питати. А legacy/ — це старий, давно заморожений шматок порталу, якого торкатися не можна взагалі; ставиш його в deny — і там правки заборонені наглухо, агент навіть не запропонує. Бʼє точково по шляхах, а не «все дозволяю» або «все забороняю».

Тьома дивиться на дві стрічки й сам, здогадавшись, добудовує третій кошик:

— Тобто ми можемо заздалегідь позначити папки? Небезпечне — у deny. Проміжне — у ask. А безпечне ніде не пишу — воно проходить вільно, як allow за замовчуванням. Три кошики: заборонити, спитати, дозволити.

— Саме так. Тільки тримай у голові, — додає Льоха, — це поки кермо плюс кілька правил під конкретні шляхи. Повноцінна система прав, де вся політика проєкту розписана наперед як закон, — окрема доросла тема буде потім. І синтаксис із часом змінюється — тримайся не за дужки, а за логіку: заборонити / спитати / дозволити.

5. Чому «питати про все» вбиває захист

Тьомі спадає на думку, як йому здається, геніальне:

— О! Тоді давай я поставлю ask узагалі на все. Нехай про кожен рух питає. Максимальний захист же!

— Стоп, — Льоха зупиняє. — Ось це і є пастка. Називається втома від підтверджень. Якщо агент смикає на кожну дрібницю — відкрив файл? спитай; прочитав рядок? спитай — ти через двадцять хвилин почнеш тиснути «так» не дивлячись, на автоматі. І тут підтвердження помре як захист: воно працює лише доти, доки ви його читаєте. А читати ви перестанете, бо втомилися.

Тьома приміряє це на себе — і впізнає власну нічну звичку тиснути «так» на все підряд. Тепер видно, звідки вона росте: не від дурості, а від втоми.

— Тобто питати про все — це те саме, що не питати ні про що, — повільно каже він. — Я просто перестану вчитуватися.

— Саме так. Тому навпаки: «спитати» залишайте лише там, де справді треба подумати. Безпечне пропускайте вільно, небезпечне забороняйте наглухо — щоб і питання не було. Під питання — рівно проміжне, де ціна помилки велика і вирішувати має людина. Тоді кожне «спитати» ви читаєте серйозно, бо їх мало.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ