JavaRush /Курси /Claude Code SELF /Доводимо виправлення чесно

Доводимо виправлення чесно

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

1. Спочатку — чесний червоний

Розмови, скриншоти й одна спіймана пастка — усе це було щойно. У Тьоми на руках уже все, що треба: ТЗ з розведеними чотирма графами, лог до рядка 9, зрозуміла зелена пастка й правило чесного тесту. Сам баг уже виправлено вдень — код правильний, табло показує три. Не вистачає одного, найголовнішого: чесного доказу. Бо перевірка в нього досі та сама — Санина пустушка із закоментованою логікою. Код виправлено, а довести це нічим.

Ось із цього Тьома й починає — з перевірки. І перше, що він пише Сашкові, раніше й на думку не спало б:

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

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

Сашко повертає if на місце — перевірка знову жива й зубаста. І тут же постає тонкість, яку легко прогавити. Перевірку треба тримати окремо від фіксу: зберегти її в git (закомітити), щоб вона не поїхала в кишеню разом із правкою рахунку. Інакше stash забере і фікс, і саму перевірку — і перевіряти стане нічим. Тьома просить Сашка допомогти:

— Збережи перевірку в git окремим комітом. А потім сховай у кишеню лише правку рахунку, src/bonus-game/score.js — повернемо баг і подивимось, чи почервоніє.

Сашко комітить тест і ховає лише фікс:

● git commit -m "restore score test"    # чесна перевірка збережена окремо
● git stash push -- src/bonus-game/score.js         # у кишеню йде ЛИШЕ фікс рахунку; тест лишається

Тьома просить прогнати перевірку:

  FAIL  score.test.js     # 3 у ряд → очікувалося 3, отримано 30

Червоне. FAIL.

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

Він на мить затримує погляд на цьому червоному на екрані. Ранкова пустушка була зелена й сліпа. Ця — червона й зряча. Із цих двох вірити можна тільки зрячій.

2. Чесне зелене

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

● git stash pop      # дістати готовий фікс із кишені — повернути на місце

Секунда. Іде прогін тестів. Тьома ловить себе на тому, що не дихає — зранку його це саме зелене вже один раз обмануло, і тепер наперед йому не вірить, а чекає. Зараз або вилізе червоним, або…

  PASS  score.test.js     # 3 у ряд → 3 очки

Зелене.

І цього разу Тьома дивиться на PASS без ранкової наївності — він тепер знає ціну зеленому. Але це зелене інше, і він промовляє різницю вголос:

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

Але тесту на слово він уже не вірить — учений. Відкриває bonus-game, ганяє наживо, збирає три в ряд.

На табло — чесні три. Не тридцять.

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

— Я тобі не повірив, — каже він PASS-у на екрані майже весело. — Я тебе довів.

3. Другий канал — скриншот через зрячу модель

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

Робить скриншот екрана рахунку вже після фіксу — score-after.png, де на табло чесні три. І перемикається на модель, яка бачить:

/model    # вибрати модель із зором (vision) — «надягти окуляри»

Потім подає картинку в сесію і просить підтвердити:

Ось скриншот екрана рахунку @screenshots/score-after.png — підтвердь, що рахунок тепер правильний.

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

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

Він повертає робочу модель — /model, «окуляри» більше не потрібні — і підбиває підсумок Сашкові:

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

4. EVIDENCE_LOG — вулика, яку зібрав сам

Коли баг виправлено й доведено, Льоха пише одну фразу — по-діловому скупу після важких днів:

— Те, що ти зараз зібрав, називається EVIDENCE_LOG. Доказовий пакет. Не «готово», а ланцюжок фактів, яким виправлення підтверджує себе саме.

Більше він нічого не пояснює — замовкає. І тут у Тьми спрацьовує звичка витягувати відповіді питаннями. Про форму він дізнається не з повітря: раніше він уже збирав полегшену картку-вулику під один палаючий симптом — EVIDENCE_LOG-lite. Це був зародок.

— А чим ця повна штука відрізняється від тієї lite-картки? — питає Тьома.

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

Тьома перепитує в Сашка, що має лежати всередині, аби пакетові можна було вірити, — і так, по одному питанню за раз, витягає структуру. Збирає її сам, поле за полем, із того, що прожив за день:

# EVIDENCE_LOG — баг рахунку в bonus-game
1. СИМПТОМ:            3 у ряд = 30 очок замість 3
2. ЛОГ-ВУЛИКА:          calcScore (src/bonus-game/score.js:9) — POINTS_PER_MATCH=10 замість 1
3. ПАДІННЯ НА ЗЛАМАНОМУ: тест червоний на багу (інакше довіри до нього нуль)
4. ВИПРАВЛЕННЯ:         POINTS_PER_MATCH з 10 на 1 у calcScore
5. ЧЕСНЕ ЗЕЛЕНЕ:        той самий тест зелений на фіксі
6. СКРИНШОТ:            score-after.png — зряча модель підтвердила чесні 3 на табло

Тьома дивиться на ці шість рядків і розуміє, чому такий пакет не можна підробити одним фейковим зеленим звітом. Кожен пункт перевіряється руками. Зелене тут стоїть не саме по собі — воно затиснуте між червоним «до» і скриншотом «після». Це не «я все перевірив, працює». Це вулика, яку можна відкрити й пройтися по кроках.

5. Перевірка — це теж ремесло

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

— Це що в тебе, — киває Олег на екран. Чекає побачити якусь вау-демку.

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

— Постривай. Ти не просто інструмент смикнув. — Він дивиться на Тьому без звичної кислої міни. — Ти хибний тест перевіркою спіймав. Наш чоловік. Красунчик.

Підморгує й іде, не чекаючи відповіді. Але Тьома все одно відчуває коротке тепло — старовір, який у «магію ШІ» не вірить анітрохи, щойно розгледів у ньому ремесло. А ремесло Олег поважає.

І раптом головне за весь день складається в нього саме собою.

— Слухай, — пише він Льосі. — Мене сьогодні врятувала не крута модель. Сашко сильний — а пастку все одно підсунув. Врятував порядок, який не дав зеленій лампочці проскочити без перевірки.

— Запиши й повісь на стінку, — відповідає Льоха. — Добра модель не рятує від поганого процесу. А добрий процес ловить навіть гарну брехню.

Тьома перечитує свій EVIDENCE_LOG. Нудний тягар, який він тижнями тягав мертвим вантажем, сьогодні вперше спрацював — і не крута модель, а оці шість занудних рядків.

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