На третій день навчання Тьома прокидається ще в ліжку, з телефоном у руці. У чаті з Артем2036 угорі лежить свіжа картинка.
Тьома дивиться на ті двері довше, ніж хотів. Але, так нічого й не вирішивши, іде на роботу.
Взявши свою улюблену каву, він відкриває ноутбук, і там на нього вже чекає launch-портал. Той самий клієнтський проєкт Антона. Тьома гортає його згори вниз — ось блок, який він сам переписав три задачі тому, ось зона, де тиждень тому розводив руками, а тепер знає кожен кут.
На вітрині є що підправити — дрібниця на кілька хвилин. Тьома відкриває чат з агентом, починає набирати: «Підправ блок…» — і зупиняється. Палець завмирає над Enter. Раніше він би натиснув без вагань. А тепер у голові крутиться чуже, незвичне запитання: агент полізе — зачепить щось сусіднє? Зламає те, що вже працює?
— Чого завис? — Олег притримує кружку біля столу, коситься в екран. — Раніше ти влітав у код, як у власну квартиру.
— Та я… — Тьома шукає слова й сам дивується тому, що говорить. — Слухай, дивна річ. Раніше я не боявся щось зламати. Пісочниця, іграшки, зніс — знову зібрав. А тут ось цю штуку, — він тицяє в блок, який сам вилизував, — шкода. Реально шкода чіпати.
Олег хмикає — без підколки, з упізнаванням.
— О, вітаю. Доріс.
— До чого доріс?
— До того, що є що втрачати. — Олег відсьорбує з кружки. — Місяць тому твій код був порожній, цінності — нуль. Зламав — не шкода. А тепер ти власними руками довів штуку до ладу, і вона коштує грошей та нервів. Ось тобі й страшно. Це не боягузтво, салаго. У тебе просто вперше зʼявилося щось, що варто берегти.
Тьома мовчить, переварює почуте. Влучно.
— І знаєш, що смішно? — Олег киває на портал. — Ти зараз наступаєш рівно на мої старі граблі. Памʼятаєш, я тобі про диплом базікав? Диплом_финал, Диплом_финал_испр, Диплом_вот_этот?
— Це коли ти чорновик на захист притяг замість чистовика? — Тьома фиркає. — Памʼятаю.
— Во-во. Я тоді що робив? Боявся втратити хорошу версію — і плодив копії. Ти, — Олег знову тицяє в екран, — зараз хочеш робити те саме. Злякаєшся лізти в портал — почнеш папки ліпити: портал2, портал-фінал, портал-точно. І потонеш у них, як я в дипломі. Як ти сам у тому 2048 тонув.
Тьома кривиться — впізнає себе тритижневої давнини.
— Ну а як тоді? Узагалі не лізти? Так із місця не зрушиш.
1. Дорослі не плодять копій — у них сейф
— А дорослі копій не плодять, — Олег ставить кружку. — У дорослих для цього є своя штука. Називається Git. Чув, мабуть, краєм вуха?
— Чув. — Тьома киває. — Я тоді ще про нього замислився. Доросла система для збереження історії станів. Замислився — і вирішив не розбиратися, мовляв, зарано.
— А тепер не зарано. — Олег хмикає. — Тепер у тебе є цінний проєкт, який шкода. Саме час. Git — це, грубо, сейф для коду. Не купа папок-копій у кутку, а одна акуратна історія: ось тут було добре, ось тут ще, до будь-якої точки повернешся. І, — він піднімає палець, — працює не так, як та твоя кнопка скасування, по якій ти вночі лупцював.
Тьома напружується.
— Стривай. А ти звідки про ніч знаєш?
— Та весь поверх знає, — усміхається Олег. — Портал ліг, ти по ньому /rewind гатив, а він не відкочував. Отже, слухай, чому не відкотив.
Він спирається на стіл — за справу береться стара школа.
— Твій /rewind живе у розмові з ШІ-агентом. Поки сесія жива — він тягне назад будь-що. Але вночі сесію знесло. А правки агент уже записав на диск, у самі файли. Кнопці твоїй стало нічого відмотувати: розмови, де вона працює, більше немає, а битий код лежить на диску сам по собі. Вона до диска не дістає. Не тому що погана — просто вона з іншого поверху.
Тьома повільно киває — та безнадія того ранку нарешті отримує імʼя.
— А Git? — запитує він.
— А Git живе на диску, разом із проєктом. Поверхом нижче, ніж твоя розмова. Зітри хоч десять сесій — точки Git як лежали, так і лежать. Ось тобі й різниця: /rewind — страховка розмови, Git — страховка самого проєкту. Тієї ночі тобі потрібен був нижній поверх, а збудований був лише верхній.
Олег іде, а Тьома, аби не сидіти без діла, знову відкриває нічний лог — той самий журнал автопілота, за яким він уже витягував уроки про ТЗ і перевірку. І сьогодні, після слів Олега, око чіпляється за рядок, який раніше він промотував як технічну дрібницю:
03:47 reward-flow.js — переписано
04:08 portal.js:15 — спростив перевірку
(за всю ніч — жодної точки повернення)
Жодної точки повернення. Агент усю ніч ламав, переписував, вимикав шматки — і жодного разу не лишив позаду себе чесного «ось тут ще все працювало». Просто котився вперед по битому склу, і за спиною не було жодної цілої сходинки, на яку впасти. Ось, отже, чому той ранок був таким безнадійним. Не в кнопці річ. У тому, що падати було нікуди.
2. Доведіть, що провал можна відкотити
Думка про сейф уже засіла, але перш ніж кликати Олега розбиратися з Git, Тьома відкриває чат з Льохою — треба оформити саму задачу. На порталі чекає доопрацювання reward-flow, тієї самої зони нарахування винагороди. Тьома на автопілоті відкриває TASK_SPEC і розписує звичне: що зламано, що має запрацювати, як зрозуміємо, що готово.
Льоха після нічного вигорання говорить напівголосом — на довгі розбори в нього немає сил. Але одного запитання не пропускає:
— Ти розписав, як виглядає успіх. А як виглядає безпечний провал? Якщо спроба зірветься — портал переживе? Доведи.
Тьома відкриває рот і закриває. У бланку — тільки успіх. А про провал — ніде. Виходить, доводити треба не лише «фіча запрацює», а й «у провалу є чистий вихід».
— Ну і куди ти повернешся, якщо поїде? — не відстає Льоха. — І головне: як ти цей провал розгрібатимеш — руками дочищатимеш чи…
— …або викину всю криву спробу, — сам ловить себе Тьома. Дочищати руками — це рівно те болото тієї ночі, де він виколупував правки по рядку і так і не був упевнений, що вичистив усе. — Не дочищаю. Викидаю всю криву спробу й падаю на чисту точку.
— Ось. — Льоха слабо, але схвально киває. — Ручне підчищення завжди лишає хвіст, якого ти не помітиш. А відкат до чистої точки — це не «ніби прибрав», це «знаю, що чисто». Запиши в бланк поруч із задачею. А як цей відкат влаштований — спитай у діда, він сьогодні у формі кращий за мене.
Тьома дописує в TASK_SPEC страховий контур: робота йде осторонь, на окремій лінії; до старту — точка повернення; перед прийняттям — обовʼязковий перегляд; провал не дочищається, а викидається весь.
Що треба — зрозуміло: окрема лінія, точка повернення, повний відкат. А от чим це робиться — тут Тьома зупиняє Олега, коли той знову шаркає повз із кружкою.
— Дядьку Олеже, ти про сейф почав — продовжуй. Як він усередині влаштований?
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ