6.7 KiB
6.7 KiB
Протокол 04: Настройка окружения (SETUP)
Цель
Обеспечить рабочее окружение, в котором исполнительный агент может сразу выполнять задачи.
Вход
.agent/analysis-report.md.agent/design-report.md(опционально, для greenfield).agent/task-manifest.json.agent/checkpoints.json(фаза environment: pending)
Поведение в зависимости от типа проекта
Фаза SETUP работает по-разному для existing и greenfield/scaffold проектов.
Ветка A: existing/scaffold проект
4A.1. Зависимости
- Установить все зависимости согласно документации проекта
- Если есть
requirements.txt,pyproject.toml,package.json,Cargo.tomlи т.д. — выполнить установку - Если в проекте используется виртуальное окружение (venv, .venv, conda) — активировать или создать
- Если в проекте используется Docker — проверить, что образ собирается
Правило: если установка зависимостей требует нестандартных шагов, описанных в README — строго следовать им. Если шаги не описаны — запросить у пользователя.
4A.2. Конфигурация
- Проверить наличие конфигурационных файлов (
.env.example,.env,config.yaml) - Если есть
.env.example, скопировать в.envс настройками по умолчанию - Если проекту требуется БД — проверить строку подключения, при необходимости создать БД или использовать SQLite для разработки
- Настроить pre-commit хуки, если они есть в проекте
4A.3. Линтеры и форматтеры
- Запустить линтер на всём проекте: записать результат
- Если линтер выдаёт ошибки — не исправлять, только зафиксировать в отчёте
- Убедиться, что исполнительный агент может запускать линтер (записать команду)
4A.4. Baseline-тесты
- Запустить все тесты проекта
- Записать в
.agent/baseline-test-report.log:- Команда запуска
- Общее количество тестов
- Пройдено / упало / пропущено
- Время выполнения
- Список упавших тестов (если есть)
- Если тесты не проходят — указать это в отчёте, но не исправлять
4A.5. Сборка проекта
- Выполнить полную сборку/компиляцию проекта
- Записать результат (успех/ошибка с логом)
- Сборка должна проходить без ошибок. Если не собирается — остановиться, сообщить пользователю.
Ветка B: greenfield проект
4B.1. Инициализация проекта
- Создать базовую структуру директорий согласно design-report.md
- Инициализировать пакетный менеджер:
- Python:
pyproject.toml(poetry, pdm, hatch) илиrequirements.txt - Node:
package.jsonиnpm init/yarn init - Go:
go mod init - Rust:
cargo init
- Python:
- Настроить базовый конфиг:
.env.example,config/и т.д. - Настроить линтер/форматтер:
ruff,eslint,gofmtи т.д.
4B.2. Scaffold-код
Создать пустые заглушки для модулей, описанных в design-report:
# app/services/cashflow.py — заглушка
class CashflowService:
"""TBD — реализация в задаче T3"""
pass
Назначение: фиксировать структуру, чтобы исполнительный агент не думал о ней, а сразу писал реализацию.
4B.3. Установка зависимостей
- Установить базовые зависимости согласно стеку из design-report
- Если проект использует БД — установить драйвер/ORM
- Если проект использует API — установить фреймворк (FastAPI, Express и т.д.)
- Установить dev-зависимости: линтер, тестовый раннер, type stubs
4B.4. Базовые тесты (scaffold)
- Создать пустой тестовый файл для каждого модуля
- Настроить тестовый раннер (pytest, jest и т.д.)
- Записать в
.agent/baseline-test-report.log: "0 tests — greenfield, scaffold готов"
4B.5. Проверка сборки
- Убедиться, что проект импортируется без ошибок
- Убедиться, что линтер проходит (без кода он должен проходить)
- Убедиться, что тестовый раннер запускается (0 tests, exit code 0)
Выход
- Работоспособное окружение / инициализированный проект
.agent/baseline-test-report.log— результат прогона тестов.agent/setup-report.log— лог установки зависимостей и сборки
Обновить checkpoints.json: phases.environment = "completed".
Критерии завершения фазы
- Зависимости установлены / проект инициализирован
- Проект собирается / импортируется без ошибок
- Baseline-тесты запущены, результат записан
.agent/baseline-test-report.logи.agent/setup-report.logсозданы- checkpoints.json обновлён
Если проект не собирается — фаза считается проваленной, checkpoints.json отмечает phases.environment = "failed", управление возвращается пользователю.