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 решения показывают дрифтМашиночитаемый формат для CI
Заголовок раздела «Машиночитаемый формат для CI»forgeplan drift --json | jq '.[] | select(.verdict == "DRIFTED") | .id'Передайте этот список в напоминание Slack или генератор задач бэклога.
Устранить дрифт
Заголовок раздела «Устранить дрифт»Для каждого дрифтанувшего ADR у вас есть три действия:
- Повторная проверка: прочитайте диффы, подтвердите, что решение всё ещё актуально, запустите
renew. - Замещение: напишите новый ADR, документирующий новую реальность,
supersede --by ADR-NEW. - Отмена: решение больше не применимо, пометьте его как окончательное.
Интерпретация вывода
Заголовок раздела «Интерпретация вывода»| Вердикт | Значение |
|---|---|
| DRIFTED | затронутые файлы сильно изменены с момента принятия решения |
| POSSIBLY DRIFTED | незначительные изменения, рекомендуется просмотр |
| CLEAN | нет изменений в затронутых файлах (по умолчанию не отображается) |
Сильный дрифт в Deep или Critical ADR является красным флагом - кодовая база переросла свою собственную задокументированную архитектуру.
Как это вписывается в рабочий процесс
Заголовок раздела «Как это вписывается в рабочий процесс»scan → coverage → drift → remediate (renew | supersede | deprecate)drift - это одна из опор моста между кодовой базой и артефактами. coverage спрашивает: “есть ли у модулей ADR?”, а drift спрашивает: “соответствуют ли эти ADR всё ещё коду?”
Смотрите также
Заголовок раздела «Смотрите также»forgeplan coverage- покрытие решений на уровне модулейforgeplan scan- заполнение списка модулей, используемогоcoverageforgeplan supersede- отмена дрифтанувшего решения в пользу новогоforgeplan renew- поддержание актуальности всё ещё действительного решения- Обзор CLI