- Архитектор (Claude Opus 4.7 в отдельной сессии): принимает архитектурные решения, пишет промпты для спринтов, контролирует декомпозицию.
- Исполнитель (Claude Code): получает промпт от архитектора через владельца, реализует, отчитывается.
- Владелец (Сергей): контролирует процесс, тестирует результаты, передаёт информацию между архитектором и исполнителем.
- Архитектор пишет промпт → передаёт владельцу
- Владелец передаёт промпт исполнителю
- Исполнитель работает в течение спринта (несколько часов/дней), фиксирует решения в DECISIONS.md, открытые вопросы в QUESTIONS.md
- По завершении спринта исполнитель создаёт
docs/SPRINT_N_REPORT.mdс фиксированным форматом (см. ниже) - Владелец передаёт отчёт + git tree + ключевые файлы архитектору
- Архитектор анализирует, отвечает на QUESTIONS, пишет следующий спринт
- Что сделано — список deliverables с пометками ✓ done / ⚠ partial / ✕ skipped (с причиной)
- Принятые архитектурные решения — ссылки на ADR в DECISIONS.md
- Открытые вопросы — со ссылками на QUESTIONS.md
- Тестовое покрытие — вывод pytest и vitest
- Структура проекта —
tree -L 3(или эквивалент) - Метрики — кол-во файлов, кол-во строк по слоям (frontend / backend / Rust)
- Что не работает или работает плохо — честный список, без приукрашивания
- Что нужно от архитектора — конкретные вопросы для следующего спринта
- Тривиальная техническая мелочь (имя переменной, выбор stdlib функции, формат логов) — решаешь сам, добавляешь короткую запись в DECISIONS.md если это устанавливает паттерн на будущее
- Архитектурная неясность (выбор паттерна, решение про границы модулей, новая зависимость) — добавляешь запись в QUESTIONS.md, продолжаешь с заглушкой/best-guess решением, помечаешь
# TODO: see QUESTIONS.md#NN - Запрос на изменение требований (что-то в промпте кажется неправильным) — добавляешь в QUESTIONS.md, продолжаешь как написано в промпте, не отклоняешься
- Внешний blocker (нужна информация от владельца, недоступный ресурс) — добавляешь в QUESTIONS.md, реализуешь заглушку, продолжаешь следующие пункты
Никогда не блокируйся на одном пункте. Всегда переходи к следующему deliverable с заглушкой, если текущий упёрся.
- Каждый Python-модуль с логикой → pytest-тест в
backend/tests/ - Каждый React-компонент со state/логикой (не презентационный) → Vitest-тест
- Минимум: happy path + 1 edge case + 1 error case на функцию
- Static parse tests (просто проверка что файл существует и парсится) не считаются покрытием
Формат записи в DECISIONS.md:
ADR-NNN: Краткое название
Дата: YYYY-MM-DD
Статус: accepted | superseded by ADR-XXX
Контекст: что за проблема, какие варианты рассматривались
Решение: что выбрали
Последствия: что это значит для архитектуры