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

ADR 0084: Правки агента в редакторе как единственный текстовый источник правды; чат — намерение и статус; слой присутствия (GDocs-like, без обязательного CRDT)

Статус: Proposed
Дата: 2026-04-20

Связанные ADR

ADR Роль
0031 чат агента, поверхность, потоки
0038 фасад агента, инструменты
0048 ACP, MCP, паритет тулов
0042 preview / review before apply — ортогонально, может совпасть по политике «ghost»
0080 Intercom как канал; масштаб «командный продукт» — вне baseline
0082 один процесс IDE ↔ MCP — хорошая база для одного буфера правды
0021 образ «как collaborative editing» для баннера активности — см. таблицу file-level feedback
0079 оверлеи IDE — возможная поверхность для присутствия
0063 Presence/Activity как продуктовый язык
## Резюме
  • Редактор — единственный source of truth текста; чат — намерение/статус.
  • Слой присутствия (курсор, «пишет»); дифф в чате не основной.


Контекст

В типичном UX «чат + агент» правки кода показывают в боковой панели как диффы, патчи или длинные цитаты. В полноценной IDE пользователь уже смотрит в редактор и на файловую систему: дублирование того же текста в чате съедает контекст LLM и ломает поток «я смотрю в код», а не в переписку.

Продуктовый образ совместного редактирования (курсоры, «печатает», выделение) здесь полезен как метафора UI: не обязательно полноценный multi-user CRDT как в Google Docs; достаточно одностороннего стриминга состояния агента и локального применения правок к буферу.

Персоны и частота конфликтов: роль в основном читать и направлять (обсуждение, тимлид «агент-команды», без ежедневного набора в том же буфере) снижает частоту столкновений «я печатаю там же, где агент». Это не отменяет норматив ниже: тот же человек может снова печатать, в игру входят другие люди, merge с ветки, второй агент или разовая правка в файле. IDE всё равно должна предсказуемо вести себя при одновременном изменении буфера — канон не ослабляется под одну персону.


Проблема

  1. Два «экрана правды»: текст правки и в чате, и в файле — конфликт внимания и риск рассинхрона с тем, что пользователь редактирует локально.
  2. Контекст ассистента: повтор диффа в чате тратит окно контекста на то, что уже есть на диске/в буфере.
  3. Скорость и доверие: основной способ «увидеть правку» должен быть там, где пользователь уже принялся работать — в редакторе, с ясной подсветкой активной зоны и политикой применения (см. ниже).

Решение (принципы, без привязки к стеку)

1. Единый источник правды — документ в редакторе

  • Итоговый видимый текст кода (и применённые правки) живёт в буфере редактора и при сохранении — в файле.
  • Изменения от агента моделируются как операции над буфером или поток правок с позициями, а не как «картинка патча», которой пользователь обязан верить, не открыв файл.
  • Инструменты редактирования (ide_*, MCP-контур) привязываются к открытым документам и к визуализации в редакторе, а не к обязательному дублю в чате.

2. Чат — канал намерения и статуса

  • В чат уходят короткие сообщения, команды, уточнения, статус («сделал X», «нужен выбор»), ссылки на файлы/диапазоны — но не основной способ читать большой дифф.
  • Дифф в чате допускается как опциональный свёрнутый лог (аудит, копипаст, внешний хост без доступа к IDE) — не как продуктовый default «где смотреть правки».

3. Слой присутствия (отдельный канал данных)

Поток, ортогональный тексту файла:

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

Это не требует «настоящего» Google Docs CRDT для двух людей: достаточно стриминга от агента + локальной проекции в оверлей/декорации редактора.

4. Политика применения: preview vs live

Продуктовый выбор (может комбинироваться по режиму доверия / пути):

  • Ghost / предпросмотр → явное «принять»; или
  • Live с сильным undo и историей буфера.

Связь с существующими идеями pre-flight / review — 0042; этот ADR не подменяет его, а согласуется по оси «где пользователь видит намерение».

5. Безопасность и контроль

  • Видимость правок в том же окне, что и рабочий код, снижает «сюрпризы» по сравнению с потоком только в чате.
  • По-прежнему нужны: стоп, откат, read-only для чувствительных путей, политика доверия — ортогонально настоящему размещению UI (см. 0071).

Риски и нюансы

Риск Направление смягчения
Конфликт с одновременным редактированием человеком Блокировка участка, явное pause agent, merge policy, или «agent lost» с повторным выравниванием
Частый review-only (мало собственного ввода в буфер) Не снимает строку выше: политика нужна для активного набора, других участников и любых сценариев с двумя авторами правок
Большие файлы Стримить дельты и/или видимый регион; не перерисовывать весь файл на каждый токен без необходимости
Мультивкладки Явная привязка целевого буфера / файла к сессии агента; визуальный акцент «агент в этой вкладке»
Внешний хост (ACP без локального редактора) Fallback: компактный дифф в чате или в отдельном viewer — не отменяет канон для полноценной IDE

Отклонённые и границы

  • Весь дифф только в чате как основной UX для IDE — отклонено для сценария «я смотрю в код» (допускается как опция/аудит).
  • Обязательный полноценный CRDT для двух людей в v1 — не требуется; при появлении реального multi-user редактирования — отдельное решение поверх этого ADR.
  • Дублировать норматив чата из 0031 — не цель; этот ADR фиксирует разделение ролей экранов (чат vs редактор).

Состояние реализации и следующий шаг

Реализации как единого продукта «присутствие + только редактор» в коде может ещё не быть; это ориентир архитектуры UX. Следующий шаг — сценарии (live vs preview), события (cursor, edit, save, typing), таблица «что уходит в чат vs только в редактор/оверлей», и привязка к конкретным командам MCP / слоям IDS при принятии.