Перейти к содержанию

ADR 0078: Git preflight и шум-контроль изменений в CIDE

Статус: Accepted · Implemented
Дата: 2026-04-20

Связанные ADR

ADR Роль
0019 общий Git Core
0042 pre-flight как обязательный шаг
0077 TECH-центр принципов

Контекст

В ежедневной работе есть повторяющийся операционный шум перед коммитом:

  • «фантомные» изменения по окончаниям строк и BOM;
  • смешение смысловых правок и технической гигиены в одном коммите;
  • лишние ручные проверки перед пушем (что именно уходит, что осталось локально, куда именно пушится).

Это повышает когнитивную нагрузку и делает историю менее читаемой, особенно в цикле «человек + ассистент».


Решение

Ввести в CIDE минимальный встроенный контур Git Preflight, который срабатывает перед коммитом и даёт:

  1. Проверку и маркировку шума диффа
    Отдельно показывать изменения «только EOL/BOM/whitespace», не смешивая их с продуктовым смыслом.
  2. Гигиенические авто-фиксы по кнопке
    Нормализация line endings по .gitattributes, снятие BOM в текстовых файлах, безопасная renormalize-процедура.
  3. Подсказку логического разбиения коммитов
    Черновики 1..N коммитов по смыслу (например: docs, tools, refactor) с редактируемыми сообщениями.
  4. Post-push health report
    Короткий отчёт: что запушено, в какие remote, что осталось в рабочем дереве.

MVP (итерация 1)

  • Добавить команду Git: Run Preflight.
  • Реализовать детекторы:
  • eol-only (line ending normalization only),
  • bom-only (удаление/добавление BOM без смыслового diff),
  • whitespace-only (пробелы/табуляция без изменения токенов).
  • В preflight-окне:
  • группировка файлов semantic vs noise,
  • action Apply Safe Fixes для noise-группы,
  • action Create Logical Commits (черновики).
  • После push показывать компактный отчёт (remote/branch/кол-во коммитов/остаток локальных изменений).

Метрики успеха

  • Снижение доли «noise-only» коммитов в истории.
  • Снижение доли смешанных коммитов (шум + смысл в одном).
  • Снижение времени от git status до git push в типовых задачах.
  • Меньше ручных откатов из-за случайно попавших технических изменений.

Последствия

  • История становится более предсказуемой и пригодной для review/cherry-pick.
  • Снижается трение в парной работе «человек + ассистент».
  • Нужно аккуратно ограничить авто-фиксы, чтобы не менять файлы без явного согласия пользователя.

Отклонённые альтернативы

  • Оставить всё как есть (ручные команды Git): гибко, но слишком много рутины и нестабильный результат.
  • Только внешние hooks/скрипты: полезно, но не даёт цельного UX и ситуационной осведомлённости внутри CIDE.