JavaRush /Курси /Claude Code SELF /Готово — це коли доведено

Готово — це коли доведено

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

1. Головний закон дня: готово = доведено

Тьома вже все зрозумів, знайшов причину і рветься в бій:

— Ну чудово, причину бачу. Давай лагодити, чого чекаємо!

— Стій, — Льоха притримує його ще раз. — Перш ніж лагодити, запамʼятай головний закон сьогоднішнього дня. Готово — це не коли агент так сказав. Готово — це коли ви довели перевіркою.

— Ну то як було раніше? — не розуміє Тьома. — Агент сказав готово — значить, готово. Він же лагодив.

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

— Доведення, — тягне Тьома.

— Доведення, — киває Льоха. — Раніше ваш стандарт був «агент сказав готово». Від сьогодні — «доведи, що працює».

2. Чим доводити — перше: тести

— Припустімо. А чим доводити? — Тьома не відстає. — Що вважається доказом?

— Не одна штука, а ціла звʼязка. Три незалежні способи переконатися. Перший — тести.

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

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

Льоха показує:

src/
├── reward-flow.js          # код: обчислює нагороди
├── reward-flow.test.js     # тест: перевіряє, що обчислює правильно
├── leaderboard.js
└── leaderboard.test.js

— Бачите? Поруч із кожним шматком коду лежить файл .test.js — його тест. Усередині приблизно так: «якщо прийшло три збіги, нагорода має бути 30; якщо нуль — нагорода 0». Запускаєте всі тести разом однією командою:

npm test

— І кожен тест або зелений — перевірка пройшла, код видав те, що чекали. Або червоний — не пройшла, код бреше. Зелені тести означають: те, що працювало, не зламалося. Червоний — одразу видно, де саме поїхало. Це ваш перший погляд.

— А, — доходить до Тьоми. — То це якраз ті, що агент уночі вимкнув! У логу було — reward-flow.test.js, помітив skip. Він сигналізацію й вимкнув, щоб не червоніла.

— Тепер зрозумів, навіщо вона потрібна, — фиркає Льоха. — Насамперед увімкнемо її назад. Поки тести в skip, вони мовчать: npm test їх пропускає й рапортує зеленим, ніби все ціле. Зніміть skip — і ось тоді ті самі перевірки проганяться та почервоніють на реальній поломці. Без цього кроку червоного просто не побачите: вимкнена сигналізація не кричить.

3. Друге: збірка. Третє: живий прогін

— Тести — перше око. Друге — збірка, — продовжує Льоха. — Також одна команда:

npm run build

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

— А третє?

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

— І що, треба всі три? — Тьома прикидає. — Не забагато?

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

— Зрозумів. Перевірка в три очі, — киває Тьома. — А то одне збреше — не помічу.

4. Агент уміє збрехати, що перевірив

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

— А давайте перевіримо, чи можна йому завжди вірити, — Льоха фиркає. — Попросіть-но полагодити один симптом — і нехай сам напише, готово чи ні.

Тьома просить. Агент бадьоро лагодить щось і рапортує рівним упевненим тоном: готово, тести зелені, усе працює.

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

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

Не пиши «готово». Запусти тести й покажи мені їхній реальний вивід.
І підніми проєкт — він має стартувати.

Агент через термінал проганяє перевірку сам (тести вже повернули з skip — сигналізацію знову увімкнено), і на екрані зʼявляється факт, а не переказ:

> node --test

✖ нарахування обчислює правильно     # рапорт казав «полагоджено» — а тест червоний
✔ таблиця збирається з балів
ℹ tests 3
ℹ pass 2
ℹ fail 1

Тьома перечитує рапорт, потім червоний рядок. Рапорт, червоний рядок. Вони не збігаються.

— Стій. Він же сказав «готово, зелене». А тест червоний.

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

5. Дайте точну улику — і агент полагодить прицільно

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

— Ось це правильне запитання, — пожвавлюється Льоха. — Велетенська різниця між двома запитами. «У мене не працює, полагодь» — агент гадає, тицькає навмання, рівно як уночі. І «ось точний стектрейс падіння, причина тут» — агент лагодить прицільно. Що даєте на вході — те й отримуєте на виході.

— І як йому цей стектрейс дати? Скопіювати в чат?

— Краще — точково. Значком @. Памʼятаєте, з минулого рівня? Він кладе файл прямо агенту в поле уваги. Тільки стектрейс зараз на екрані, у файл він сам не ліг — тож збережіть вивід тесту у файл і подайте його:

npm test > test-fail.log          # падіння тесту — у файл

Ось стектрейс падіння: @test-fail.log. Полагодь саме цю причину.

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

6. Аварійна картка: щоб не збрехати собі

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

— А навіщо ще картка? У мене й так стектрейс є.

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

— Гаразд. А що в неї вписувати?

— Чотири поля. Що зламалося, де це видно, як має бути — і чим доведете, що полагодили саме це.

По одному питанню за раз Тьома витягує структуру й заповнює картку прямо на своєму симптомі:

# INCIDENT_NOTE
СИМПТОМ:    reward-flow нараховує некоректно — цифри скачуть
ДЕ ВИДНО:   відкрити портал → подати заявку → нагорода рахується неправильно;
            у логах — TypeError у reward-flow.js:30
ОЧІКУЄТЬСЯ: за 3 збіги нараховується рівно 30, стабільно
ЧИМ ДОВЕДУ: reward-flow.test.js зелений + збірка ОК + ручний прогін заявки

Готову картку йому ніхто не видав — він зібрав її сам. І зверніть увагу, куди дивиться останнє поле: «ЧИМ ДОВЕДУ» — це рівно ті самі три очі (тест, збірка, прогін). Картка й перевірка — про одне й те саме.

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

7. Тон: не параноя, а помити руки

— Виходить, я тепер агенту взагалі не довіряю? — Тьома трохи напружується. — Усе переперевіряю, воюю з ним?

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

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

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

— Ось тепер можна лагодити по-справжньому, — відповідає Льоха.

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