Перейти к содержимому
FRGEPLAN

forgeplan drift

forgeplan drift сравнивает список Affected Files каждого артефакта с историей Git. Если ссылочные исходные файлы были изменены после временной метки decided_at (или activated_at) решения, то решение «дрифтануло»: код отошёл от задокументированного обоснования. Решение технически всё ещё active, но на практике оно просрочено.

Дрифт отличается от устаревания доказательств. Устаревание связано со временем (истекает valid_until); дрифт - с изменением кода (перемещением файлов). И то, и другое может сделать решение ненадёжным, и дрифт часто является тем, о чём забывают.

  • Ежемесячный архитектурный обзор - какие ADR активно нарушаются кодом?
  • После крупного рефакторинга - посмотрите, какие решения необходимо повторно валидировать с учётом новой формы кода.
  • Перед ссылкой на ADR в ревью PR - соответствует ли оно всё ещё реальности?
  • Подготовка к релизу - обновите дрифтанувшие решения перед выпуском релиза.
  • На артефактах без раздела Affected Files - сначала используйте coverage --backfill.
  • На свежем рабочем пространстве - дрифту нужна история Git для вычислений.
forgeplan drift [OPTIONS]
--json Вывод в формате JSON для машинной обработки
-h, --help Вывести справку
-V, --version Вывести версию
Окно терминала
forgeplan drift

Вывод:

Drifted decisions
─────────────────
ADR-002 LanceDB schema v2
decided: 2026-03-15
affected: crates/forgeplan-core/src/db/schema.rs (изменено 5 раз с тех пор)
crates/forgeplan-core/src/db/migrations.rs (изменено 3 раза с тех пор)
verdict: DRIFTED - переоценить
ADR-005 Lifecycle state machine
decided: 2026-02-20
affected: crates/forgeplan-core/src/lifecycle/mod.rs (изменено 2 раза с тех пор)
verdict: POSSIBLY DRIFTED - просмотреть изменения
2 решения показывают дрифт
Окно терминала
forgeplan drift --json | jq '.[] | select(.verdict == "DRIFTED") | .id'

Передайте этот список в напоминание Slack или генератор задач бэклога.

Для каждого дрифтанувшего ADR у вас есть три действия:

  1. Повторная проверка: прочитайте диффы, подтвердите, что решение всё ещё актуально, запустите renew.
  2. Замещение: напишите новый ADR, документирующий новую реальность, supersede --by ADR-NEW.
  3. Отмена: решение больше не применимо, пометьте его как окончательное.
ВердиктЗначение
DRIFTEDзатронутые файлы сильно изменены с момента принятия решения
POSSIBLY DRIFTEDнезначительные изменения, рекомендуется просмотр
CLEANнет изменений в затронутых файлах (по умолчанию не отображается)

Сильный дрифт в Deep или Critical ADR является красным флагом - кодовая база переросла свою собственную задокументированную архитектуру.

scan → coverage → drift → remediate (renew | supersede | deprecate)

drift - это одна из опор моста между кодовой базой и артефактами. coverage спрашивает: “есть ли у модулей ADR?”, а drift спрашивает: “соответствуют ли эти ADR всё ещё коду?”

  • forgeplan coverage - покрытие решений на уровне модулей
  • forgeplan scan - заполнение списка модулей, используемого coverage
  • forgeplan supersede - отмена дрифтанувшего решения в пользу нового
  • forgeplan renew - поддержание актуальности всё ещё действительного решения
  • Обзор CLI