1. Не пускаємо агента в код без плану
Дійшло до справжньої задачі порталу. Ще місяць тому тут усе було б просто: кинув Сашкові рядок із хотілкою, відвернувся до чаю, а потім чекаєш дива. Диво зазвичай ставалося: Сашко вгадував за причесаною Льохою постановкою — і між «захотів» та «готово» для Тьми не було жодної роботи, лише очікування.
Сьогодні все інакше. Писати постановку нікому, крім нього, і вести задачу теж. Тьома вперше не відвертається до чаю, а сідає вести її сам — від першої літери до перевірки.
На руках у нього вже все, що він зібрав за день. Launch-портал лежить локально в папці проєкту; поруч із вітриною — legacy/old.js зі старим промокодом минулої кампанії, заморожена зона, якої чіпати не можна. І власноруч зібраний TASK_SPEC — із чесним scope, із чесними non-goals, де заморожену та інші protected-зони прямо позначено як «не чіпати».
Крок перший — диктує задачу. Спокійно, як дорослий. Не «зроби красиво», а постановку вголос:
— Сашку, на вітрину порталу треба додати нову промо-зону — банер із акцією й кнопку. Заморожену зону legacy/old.js взагалі не чіпаємо, механіку нарахування балів не змінюємо. Готово, коли промо-зона на місці, старий промокод цілий, бали рахуються як раніше.
Крок другий — вмикає режим планування. Тим самим Shift+Tab, який зранку здавався незрозумілою кнопкою, а тепер — уже робочий жест:
Shift+Tab # натискайте, доки внизу не ввімкнеться планування
Натискає, доки в статус-барі не зʼявляється планування. Отже, агент зараз лише планує, у код не лізе, а інструмент правки в нього вимкнений. І спершу він вимагає план, а не результат. Жодного «погнали» з порога — спочатку покажи маршрут.
Крок третій — читає задум. Агент викладає план:
План:
1. pages/campaign/index.html — додам промо-зону (банер + кнопка)
2. pages/campaign/promo.html — нова сторінка акції (куди веде кнопка)
3. assets/css/portal.css — стилі банера
4. legacy/old.js — заодно причешу старий промокод
Починати? [показати повністю / змінити план / схвалити]
Тьома читає його не як пасажир красиву презентацію, а як водій — свій маршрут перед виїздом. Кожен рядок звіряє зі своїм TASK_SPEC: чи не виїхав задум за паркани.
2. Піймав на стадії задуму
Тьома читає задум рядок за рядком. Перший рядок — вітрина, промо-зона: так і просив. Другий — сторінка акції: потрібна, кнопка має кудись вести. Третій — стилі: нормально. А на четвертому палець на тачпаді завмирає.
Четвертий рядок — legacy/old.js, «заодно причешу старий промокод». Заморожена зона. Та сама, яку він зранку власноруч виніс у non-goals. Агент про заборону не знав: побачив там старий промокод минулої кампанії, вирішив, що його логічно причесати заодно, і чесно вписав це в план.
І тут на мить накочується вчорашнє. Під ребрами смикається старий рефлекс — той, нічний: усе, пізно, прогавив, зараз полетить. Рука тягнеться клацнути «схвалити» й не ганьбитися — авось пронесе, авось не чіпатиме зайвого.
І завмирає на півдорозі.
Стоп. Нічого ж не полетіло. legacy/old.js цілий. Цілий, бо ще нічого не сталося — на екрані лише задум, лише слова. Не код. Агент у режимі планування, правити йому нічим. І замість нічної паніки всередині тихо клацає інше: ось воно. Ось заради чого він увесь день ставив ці паркани.
— Ага, голубчику, — бурмоче Тьома екрану. — У заморожену зібрався? Ні вже.
Він не біжить нічого рятувати. Просто править план — словами, поки той іще літера, а не дія:
План ок, але legacy/old.js не чіпай — це заморожена зона,
вона в non-goals. І додай перевірку, що промо-зона не зачіпає
сусідній блок вітрини.
Агент ураховує правку, прибирає рядок із legacy/old.js, оновлює задум — тепер без замороженої зони, але з перевіркою. І лише тоді Тьома дає добро.
Він сам утримав межу. Спіймав зайве на папері, не дав інструменту рознести проєкт у ширину. Учора розгрібав поломку — сьогодні не дав їй статися. Тихо, буденно, але це зробив він, а не везіння.
3. Рівно стільки, скільки просили
Тьома переводить кермо в робоче положення — із режиму планування в режим, де агент уже править, — і відпускає. Сашко береться до роботи й невдовзі рапортує: готово.
Перевірку дня Тьома робить власноруч — за своїм же планом перевірки. Не «подивлюся очима», а за пунктами, які сам виписав зранку.
Перший пункт — відкрити портал у браузері. Відкриває: на вітрині банер акції, під ним кнопка. Натискає кнопку — веде на сторінку акції. Є, працює.
Другий — старий промокод цілий. Тьома запитує в самого агента, що той узагалі чіпав:
Покажи списком, які файли ти змінив у межах цієї задачі.
Агент повертає список: pages/campaign/index.html, pages/campaign/promo.html, assets/css/portal.css. І все. legacy/ у списку немає. Тьома все одно відкриває заморожену зону сам — старий промокод на місці, ніхто його не чіпав.
Третій — бали. Проходить шлях користувача: заявка, нарахування. Усе рахується як раніше.
Усі три галочки сходяться.
— Як і замовляли, — каже він уголос порожній кімнаті й раптом ловить себе на дивному. Усміхається. — Слухай. Раніше кайф ловив, коли воно мені до біса всього наліпило — є чим хвалитися. А зараз кайф від чого? Від того, що воно нікуди зайвого не полізло. Нічого не вибухнуло. Нудота ж. А преться.
Він крутить це в голові й сам собі киває. Місяць ганявся за «більше й ефектніше» — щоб у галереї спалахнуло ще одне «вау». А сьогодні те саме тепле відчуття — від зворотного: агент зробив що просили, і ні на міліметр убік. І зійшлося це не тому, що пощастило з моделлю. А тому, що кожну ланку — постановку, план, межу, перевірку — тримав він сам.
4. Чого ще бракує для підстраховки
Увечері дзвонить телефон — Артем2036, і знов без туману, без мему:
— Та ну, — видихає Тьома. — Ну хоч один вечір без нової загадки можна?
А питання справедливе, і від цього ще прикріше. Сьогодні він навчився не пускати агента в зайве. А ось повертатися, якщо зайве все-таки станеться — не з його вини, а з чужої, — цього він не вміє. Що там за «по-дорослому» сховано, Артем2036, як водиться, не уточнює. Тьома крутить це в голові, відповіді не знаходить — і розуміє: це вже задачка не на сьогодні.
Він закриває кришку. За вікном темно, портал стоїть цілий, заморожена зона неушкоджена, промо-зона на місці — рівно те, що замовляли, і ні міліметром більше.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ