До промпта сформулируйте контракт задачи
Фраза "исправь авторизацию" не определяет ни наблюдаемый дефект, ни разрешённый scope, ни совместимость, ни условие готовности. Контракт задачи превращает намерение в данные, которые можно проверить до запуска агента и механически сверить после него.
В companion-проекте контракт - это несколько полей типа.
export interface TaskContract {
readonly goal: string;
readonly contextPaths: readonly string[];
readonly allowedWritePaths: readonly string[];
readonly constraints: readonly string[];
readonly acceptanceChecks: readonly string[];
}Каждое поле отвечает на конкретный вопрос, и пустое поле - это пропущенное решение.
Поле · Что записать · Пример
- Goal - Наблюдаемое изменение поведения; 20 означает скидку 20%, а не множитель 20
- Context - Файлы, символы, тест, ошибка, канонический пример;
src/discount.jsи regression test - Write scope - Разрешенные пути и явно запрещенные зоны; Только
src/discount.js - Constraints - API, версии, зависимости, безопасность; Не менять сигнатуру и не добавлять package
- Done when - Команды и наблюдаемые результаты; Focused test завершился с code 0
- Stop conditions - Когда нельзя продолжать самостоятельно; Нужны credentials, destructive action или новый scope
Обратите внимание на два поля, о которые чаще всего спотыкаются. Done when описывает не намерение, а наблюдаемый результат: focused test завершился с кодом 0, а не "стало работать". А Stop conditions заранее называет, когда продолжать нельзя самому - нужны credentials, destructive action или новый scope. Без них агент либо остановится не там, либо не остановится вовсе.
И правило, которое бережёт от ложной уверенности.
Не выдавайте гипотезу за диагноз. "Проблема в refresh token" - это направление проверки, а не факт. Лучше: "после истечения сессии login возвращает 401; проверь refresh flow и сначала воспроизведи дефект тестом". Контракт задаёт форму, а не заранее решённый ответ.
Контракт сформулирован. Теперь превратим его в промпт - но не в уговоры, а в исполняемую спецификацию.
Зачем формулировать контракт задачи до промпта?