JavaRush /Курси /Claude Code SELF /TASK_SPEC: пишемо постановку самі

TASK_SPEC: пишемо постановку самі

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

1. «Сам зрозуміє» — це не постановка

Рука сама тягнеться до старого. Місяць не підводив — кинути Сашкові загальне побажання й сподіватися, що той «сам розбереться». Тьома так і строчить, коротко, на настрої:

— Сашку, виправ на порталі промо-штучку, ну ти зрозумів.

Тисне Enter — і відразу отримує наочну відповідь, навіщо взагалі писати задачі.

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

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

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

— Опа, — бурмоче він. — То це ж не Сашко отупів. Це я йому криву постановку згодував.

І Тьома розуміє, що за місяць так і не збагнув, чому його вчив Льоха: «сам зрозуміє» — це не постановка задачі. Це надія. Сильна модель виконає те, що написано, — а якщо написано криво, то й виконає криво. На надії клієнтський портал не зробити.

2. TASK_SPEC: постановка вперед, а не розбір назад

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

TASK_SPEC, — кидає він. — Повноцінна постановка задачі. Написана до того, як ШІ-агент торкнеться коду. Не ремонт після вибуху, як учора, а план роботи ще до того, як у неї зайшли.

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

— Стоп. А чим це від учорашньої штуки відрізняється? Учора ж я теж картку писав.

— Учора ти писав INCIDENT_NOTE, — відповідає Льоха спокійно. — Аварійну картку на вже наявну біду. Вона дивиться назад: ось що зламалося, ось як лагоджу. А TASK_SPEC дивиться вперед — на роботу, якої ще не було. Учора ти розгрібав поломку. Сьогодні ти її не допускаєш.

Тьома прокручує це й сам підбиває підсумок, хай і кривувато:

— Тобто вчора була довідка про ДТП. А сьогодні — маршрут, яким їдемо, поки не вʼїхали.

— От приблизно так. Тільки маршрут із парканами по краях, щоб не зʼїхати в кювет.

3. Шість частин, які збираєш сам

Тьома відкриває порожній файл — і вперше сам, своїми руками, збирає повноцінну постановку. Готовий шаблон під наглядом профі йому не дають.

— З чого взагалі почати? — Тьома чесно завис над порожнечею.

— Із каркаса, — Льоха кидає шість рядків. — Повна постановка стоїть на шести опорах. Пробіжись згори вниз, я по кожній скажу, навіщо вона.

# TASK_SPEC
КОНТЕКСТ:           що це за задача і звідки вона взялася
БАЖАНА ПОВЕДІНКА:   що в підсумку має працювати
SCOPE:              межі — що входить до задачі
NON-GOALS:          що агент чіпати НЕ повинен
ПЛАН ПЕРЕВІРКИ:     чим потім доведемо, що зроблено
БЕЗПЕЧНИЙ СТАРТ:    як зайти, щоб у разі чого відкотитися

Далі вони йдуть по каркасу не списком, а по одній опорі — Тьома пише, Льоха править.

Контекст — звідки в задачі ноги.

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

— А навіщо? Задача ж і так зрозуміла — додати промо-зону.

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

Тьома вписує: клієнтський портал, до акції потрібна нова промо-зона на вітрині.

Бажана поведінка — що в кінці працює.

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

— «Зʼявилася промо-зона»?

— Уже краще, але додай, як її побачити. «На вітрині зʼявився банер акції з кнопкою; кнопка веде на сторінку акції». От тепер це результат, а не побажання. Пропустиш — не зможеш перевірити, готово чи ні: незрозуміло, що вважати готовим.

Scope — де проходить паркан зсередини.

— Далі — межі. Що входить до задачі, доки ми їдемо.

— «Промо-зона на вітрині». І все?

— І все. Scope — це «ось це робимо». Він говорить агенту, де твоя задача закінчується. Без нього агент не знає, де зупинитися, — і їде далі, ніж ти хотів.

План перевірки — чим доведемо, що зроблено.

— Передостання. Як зрозумієш, що задачу закрито?

— Ну… гляну, — знизує плечима Тьома. — Відкрию портал, подивлюся очима.

«Гляну очима» — це не перевірка, — ріже Льоха. — Це надія. Учора тобі це вже вийшло боком. Чим саме доведеш? По пунктах.

Тьома морщиться — але згадує вчорашнє «готово = доведено» і пише по-дорослому: відкрити портал у браузері → банер акції видно на вітрині → кнопка веде куди треба → старі зони порталу працюють як раніше. Не «подивлюся», а список, по якому пройдешся й поставиш галочки.

Безпечний старт — як зайти, щоб можна було відкотити назад.

— І остання. Заходь у задачу так, щоб, якщо щось піде не туди, відкотитися було легко, а не розгрібати пів ночі.

— А це як? — Тьома чесно не знає.

— Способи будуть далі по курсу, цілий арсенал, — Льоха не заглиблюється. — Поки запамʼятай сам принцип: не кидайся міняти все разом і навмання. Заходь маленьким кроком, від якого просто відступити. Дорослі сідають за кермо так, щоб задня передача була під рукою ще до того, як поїхали.

4. NON-GOALS: перший барʼєр безпеки

Пʼять опор зібрано. Залишилася одна — та, яку вчорашній Тьома пропустив би, не замислюючись, а сьогоднішній упирається в неї, як у стіну. NON-GOALS. Чого агенту робити не можна — навіть якщо за постановкою здасться, що це «теж можна було б заодно зачепити».

І тут Тьома буксує по-справжньому.

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

Льоха не видає одкровення — він просто тицяє в те, що в Тьми вже перед очима.

— Відкрий учорашній журнал. Рядок про видалені файли. Прочитай уголос, навіщо агент їх видалив.

Тьома відкриває нічний лог — той самий, logs/agent-night.log, — і читає: «видалив, не використовується за моєю оцінкою».

— «За його оцінкою», — повторює Льоха. — Зауваж: він не шкодив. Він був по-своєму логічний. Побачив поруч шматок, вирішив, що той зайвий, — і прибрав, бо ніде не було сказано, що не можна. Я це бачив сто разів, на різних проєктах, із різними агентами. Завжди одне й те саме: не поставив паркан — рано чи пізно хтось заїде за край. Не зі злості. За логікою.

І до Тьми доходить — не з чужих слів, а з власного логу. «Видалив без дозволу» — це не бунт машини. Це діра в постановці: ніхто не написав «сюди не ходи». Нічна катастрофа була не там, де агент злий, — там, де задача мовчала.

Він вписує в NON-GOALS сусідні protected-зони порталу — ті клієнтські шматки, яких торкатися не можна, — і раптом сам формулює:

— То це ж не милиця для дурного агента. Це паркан. Написав його до старту — і потім нічого розгрібати. Розумний він чи ні — він просто не полізе туди, куди я прямо сказав не лізти.

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

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

5. Як виглядає зібраний TASK_SPEC

Щоб не лишилося абстракцією, ось що вийшло в Тьми наприкінці — той самий перший власний spec цілком, із парканом по краях:

# TASK_SPEC — промо-зона на вітрині порталу

КОНТЕКСТ:           клієнтський launch-портал; до акції потрібна нова
                    промо-зона на вітрині.
БАЖАНА ПОВЕДІНКА:   на вітрині зʼявився банер акції з кнопкою;
                    кнопка веде на сторінку акції.
SCOPE:              лише промо-зона на вітрині.
NON-GOALS:          не чіпати сусідні protected-зони порталу;
                    не змінювати reward-flow і лідерборд; нічого не видаляти.
ПЛАН ПЕРЕВІРКИ:     відкрити портал у браузері → банер видно на вітрині
                    → кнопка веде куди треба → старі зони працюють як раніше.
БЕЗПЕЧНИЙ СТАРТ:    заходити маленьким кроком, від якого легко відступити;
                    спочатку показати задум, потім змінювати.

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

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