Глава 2

До промпта сформулируйте контракт задачи

Фраза "исправь авторизацию" не определяет ни наблюдаемый дефект, ни разрешённый scope, ни совместимость, ни условие готовности. Контракт задачи превращает намерение в данные, которые можно проверить до запуска агента и механически сверить после него.

В companion-проекте контракт - это несколько полей типа.

TypeScript
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 и сначала воспроизведи дефект тестом". Контракт задаёт форму, а не заранее решённый ответ.

Контракт сформулирован. Теперь превратим его в промпт - но не в уговоры, а в исполняемую спецификацию.

Проверка знаний

Зачем формулировать контракт задачи до промпта?

Ссылки