Ранок у Тьоми — суцільна благодать. Виспався, дорогою взяв свій улюблений капучино з корицею, зайшов в офіс неквапом, кивнув парі колег. Опустився в крісло, сьорбнув, потягнувся й відкрив ноутбук із лінивою напівусмішкою. Учора він ліг чемпіоном: зібрав із кубиків цілий власний світ, узяв друге звання, а надвечір поставив робочий портал Антона на всю ніч — щоб той доробився сам. Зараз відкриє, а там готове диво. Життя прекрасне.
Він відкриває портал.
Вітрина не завантажується — замість неї битий блок. Тьома насуплюється, тисне оновлення. Битий блок лишається. Клікає по навігації — вона веде в нікуди. Лізе в reward-flow, де рахуються нагороди, — цифри стрибають, нараховує як пʼяний. Відкриває таблицю лідерів — порожньо, ніби таблиці й не було. Ще раз оновлення. Ще раз. Нічого не змінюється.
— Це що за… — капучино завмирає на півдорозі до рота.
Рука звично тягнеться до рятівного кола. Ну й що, Сашко вночі дав збій. Щось пішло не так — тисни /rewind, поверни все назад. Ця кнопка витягувала його весь місяць, він поводиться з нею як профі. Тисне й видихає — усе повернулося як було.
Або ні?! Не відкочується!
Тьома моргає. Тисне ще раз — упевненіше, ніби кнопка не заїла. Порожньо. Лізе в історію скасувань подивитися, до чого відкотити, — а історії нема. Пробує інакше, втретє — той самий результат. Відкат не працює.
— Та ну, — уже без усмішки. — А ти чого.
Спробувавши всі можливі варіанти, Тьома доходить очевидного висновку: відкат сьогодні взагалі не працює. І повільно, знову набираючи різні команди, починає здогадуватися чому. /rewind жив усередині нічної сесії — відмотував розмову з агентом і правки в ній. А вночі щось дало збій: сесія не закрилася охайно, її знесло. Разом із нею знесло й усе, до чого відкотити, — історію, точки повернення. Команда є, а відмотувати їй більше нічого.
Цей урок відчувається набагато гірше, ніж кава. /rewind — штука хороша, але легка: страховка для звичайних задач, не для катастрофи. Поки сесія жива — тягне назад що завгодно. А коли сесію зносить — зносить і страховку. Для справжньої біди потрібен міцніший захист, який живе окремо від проєкту і якого ніякий збій не знищить. Такого у Тьоми поки що нема.
Тьома вперше не може стриматися:
— Та він за ніч з глузду зʼїхав! — Тьома мало не роняє склянку. — Хто взагалі просив змінювати половину проєкту?!
Звинувачити хочеться кого завгодно — агента, ніч, кривий портал. Але результат від цього не зміниться. Може, не все так погано? Може, оновити жорсткіше, кеш почистити? Може, десь лежить учорашня копія, і він зараз її знайде, підсуне — і все буде як було? Він тицяється туди-сюди, шукає запасний вихід. Запасного виходу нема.
І ось тепер він просто втупився в проєкт і мовчить. Найкращий день місяця перетворився на найгірший за 30 хвилин. Раніше будь-яка поломка була локальною: зламав — сам полагоджу, моя пісочниця, ніхто не побачить. А зараз ні. Це реальний комерційний проєкт Антона, який поставив на карту свою репутацію і довірив портал йому. Не очки в Змійці посипалися — посипалася чужа справа, за тиждень до здачі.
Довго журитися Тьома не вміє — не той характер. Але й тут його струшують зовні.
У чат із Артем2036 падає повідомлення. Вранці звідти зазвичай прилітає щось смішне — мем, картинка, жарт без підпису. Сьогодні інакше: голос сухіший, жорсткіший, без пустощів. Наче той, хто пише, сьогодні не розважається.
Під текстом — картинка, і не мем. Ліворуч — схема, як Тьома й думав про життя: пряма стрілка, на одному кінці «успіх», на другому «провал», а між ними — нічого. Або-або. А праворуч — інша дорога: крива, з поворотами, глухими кутами, місцями повертає назад і йде далі вже інакше. І друга підписана так, ніби вона і є справжня, а перша — дитяча.
Тексту небагато. Ця ніч — не кінець. Не та точка, де стрілка вперлася в «провал», і все. Це поворот на кривій дорозі. Кінцем вона стає в одному випадку — якщо сам вирішиш утекти. Ні жалю, ні «бідненький, налагодиться». Холодний поштовх: встав і пішов далі.
І лише тепер Тьома помічає: картинка прийшла чистою. Жодної чорної клякси, жодного зʼїденого слова — вперше за довгий час. Зазвичай той, із майбутнього, кричить крізь перешкоди: половина тексту в порох, вгадуй. А тут — рівно, цілком, ніби це сьогодні важливіше за будь-яку цензуру. Тьома не знає, що страшніше — каша чи ось така ясність.
Він зависає на розвилці довше, ніж на ранковому жарті. Поштовх «поворот, а не кінець» приймає цілком: гаразд. Встав і пішов. Кава, вважай, охолола.
Повз стіл проходить Олег. Тьома внутрішньо стискається — ось зараз прилетить. Старий давно чекає, коли новачок навернеться, а тут червона помилка на весь екран, ідеальний привід добити. Олег пригальмовує, ковзає поглядом по руїнах, по червоних помилках. Дивиться на Тьому й не добиває.
— Спіткнувся — вставай, — кидає коротко, майже по-робочому, і йде далі.
Тьома проводжає його поглядом. Дивно. Ні посмішки, ні шпильки. Наче старий надто добре знає, як виглядає справжнє падіння в роботі, щоб реготати з чужого.
Тьома ще раз обводить очима монітор — і паніка відпускає, а на її місце приходить вперте, робоче. Якщо ніч — поворот, а не фінал, то й сумувати нема про що. Треба зрозуміти, що саме сталося. Не «все зламалося», а — що конкретно, у якому порядку, чиїми руками.
І тут він згадує просту річ. Пару днів тому він сам, ще граючись із автоматикою, повісив на портал логування — щоб важливі кроки агента записувалися в окремий файл. Тоді це була забава «воно саме пише». А зараз — єдина зачіпка. Сесію вночі знесло, відкат мертвий, але журнал же записувався у файл на диск, окремо. Його збій не зачепив. Отже, є хроніка минулої ночі.
Тьома лізе за нічним логом. Відкриває — і це не сухий хвіст помилок, а дещо цікавіше. Журнал того, хто всю ніч господарював у проєкті, поки власник спав.
— Ну-ну, — він підсувається ближче. Із того, кого вночі обікрали, він на очах перетворюється на того, хто цю справу розслідує.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ