🧱 Что это
Architecture Decision Records (ADRs) — это навык для фиксации архитектурных решений прямо во время сессии разработки. Вместо того чтобы решения оставались в Slack-тредах, комментариях к PR или в памяти одного разработчика, этот навык создаёт структурированные документы ADR, которые живут рядом с кодом. Навык автоматически распознаёт моменты принятия решений, записывает контекст, рассмотренные альтернативы и обоснование, а также ведёт журнал ADR, чтобы будущие разработчики понимали, почему кодовая база устроена именно так.
⚙️ Как работает
🎯 Обнаружение момента решения
Навык реагирует на явные и неявные сигналы в диалоге:
- Явные сигналы — пользователь говорит «давай запишем это решение», «ADR это», «мы решили использовать X вместо Y», «компромисс оправдан, потому что...»
- Неявные сигналы — сравнение двух фреймворков или библиотек с выводом, выбор схемы БД с обоснованием, обсуждение архитектурных паттернов (монолит vs микросервисы, REST vs GraphQL), решение по стратегии аутентификации или инфраструктуре развёртывания. В таких случаях навык предлагает записать ADR, но не создаёт его без подтверждения.
📝 Формат ADR
Используется облегчённый формат Майкла Найгарда, адаптированный для AI-assisted разработки:
- Заголовок:
ADR-NNNN: [Название решения]
- Метаданные: Дата, статус (
proposed | accepted | deprecated | superseded by ADR-NNNN), участники
- Контекст: 2–5 предложений о проблеме, ограничениях и движущих силах
- Решение: 1–3 предложения, чётко формулирующие выбор
- Рассмотренные альтернативы: Для каждой — название, плюсы, минусы, причина отклонения
- Последствия: Положительные эффекты, негативные компромиссы, риски и их mitigation
📂 Структура директории
docs/
└── adr/
├── README.md ← индекс всех ADR
├── 0001-use-nextjs.md
├── 0002-postgres-over-mongo.md
├── 0003-rest-over-graphql.md
└── template.md ← шаблон для ручного использования
🔄 Рабочий процесс
Создание нового ADR:
- Инициализация (только при первом использовании) — если
docs/adr/ не существует, навык запрашивает разрешение на создание директории, README.md с заголовком таблицы индекса и template.md. Файлы не создаются без явного согласия.
- Определение решения — извлечение ключевого архитектурного выбора
- Сбор контекста — какая проблема привела к решению, какие ограничения существуют
- Документирование альтернатив — какие ещё варианты рассматривались и почему отклонены
- Формулировка последствий — какие компромиссы, что становится проще/сложнее
- Назначение номера — сканирование существующих ADR в
docs/adr/ и инкремент
- Подтверждение и запись — навык показывает черновик ADR пользователю. Запись в
docs/adr/NNNN-decision-title.md происходит только после явного одобрения. Если пользователь отказывается, черновик отбрасывается без записи.
- Обновление индекса — добавление строки в
docs/adr/README.md
Чтение существующих ADR:
- Если пользователь спрашивает «почему мы выбрали X?», навык проверяет наличие
docs/adr/
- Если директории нет — отвечает, что ADR не найдены, и предлагает начать запись
- Если есть — сканирует индекс
README.md на предмет подходящих записей
- Читает соответствующие ADR-файлы и показывает разделы Context и Decision
- Если совпадений нет — сообщает об этом и предлагает записать новое решение
🏷️ Жизненный цикл ADR
proposed → accepted → [deprecated | superseded by ADR-NNNN]
- proposed — решение обсуждается, ещё не принято
- accepted — решение в силе, используется
- deprecated — решение больше не актуально (например, функциональность удалена)
- superseded — новое ADR заменяет это (обязательно указывается ссылка на замену)
🎯 Когда использовать
Навык особенно полезен в следующих ситуациях:
- Выбор технологий — фреймворк, язык, база данных, облачный провайдер
- Архитектурные паттерны — монолит vs микросервисы, event-driven, CQRS
- Дизайн API — REST vs GraphQL, стратегия версионирования, механизм аутентификации
- Моделирование данных — дизайн схемы, решения по нормализации, стратегия кэширования
- Инфраструктура — модель развёртывания, CI/CD пайплайн, стек мониторинга
- Безопасность — стратегия аутентификации, подход к шифрованию, управление секретами
- Тестирование — тестовый фреймворк, целевое покрытие, баланс E2E и интеграционных тестов
- Процессы — стратегия ветвления, процесс ревью, ритм релизов
💡 Важно знать
- Не записывайте тривиальные решения — выбор именования переменных или форматирования не требует ADR
- Будьте конкретны — «использовать Prisma ORM», а не «использовать ORM»
- Записывайте «почему» — обоснование важнее, чем само решение
- Включайте отклонённые альтернативы — будущим разработчикам нужно знать, что рассматривалось
- Честно указывайте последствия — у каждого решения есть компромиссы
- Держите кратко — ADR должен читаться за 2 минуты. Если контекст превышает 10 строк — он слишком длинный
- Используйте настоящее время — «мы используем X», а не «мы будем использовать X»
- Не заполняйте задним числом без пометки — если записываете прошлое решение, укажите оригинальную дату
- Не допускайте устаревания — заменённые решения должны ссылаться на замену
🔗 Интеграция с другими навыками
- Planner agent — когда планировщик предлагает архитектурные изменения, навык предлагает создать ADR
- Code reviewer agent — навык может помечать PR, которые вносят архитектурные изменения без соответствующего ADR
Комментарии
Комментариев пока нет. Будьте первым.