Две ловушки «одного общего чата»
Почти все разработчики и фаундеры начинают работать с LLM одинаково: открывают один чат и ведут в нём всю задачу от идеи до отладки. Уже к 6–10 сообщению включаются два системных сбоя:
- 1. Отравление контекста (Context Poisoning): в окне внимания модели остаётся 10% вашей исходной цели и 90% её собственных черновиков, отменённых гипотез, старых стектрейсов и галлюцинаций.
- 2. Слепота автора (Author Blindness): та же самая сессия, которая только что сгенерировала баг, при просьбе «проверь свой код» подсознательно защищает своё решение вместо того, чтобы его ломать.
Решение, к которому мы пришли в ООО «Сидон» при создании платформы Orchestra и рабочего контура MultiCode: три отдельных чистых окна (три роли), которые вообще не переписываются друг с другом в чате, а передают работу исключительно через артефакты на диске (plan.md → git diff + report.md → review.md).
Роль 1: Архитектор / Оркестратор (пишет только plan.md)
Открывайте в первом окне. Этому окну категорически запрещено писать рабочий код — его единственная задача прочитать реальные файлы проекта и составить проверяемый контракт.
# РОЛЬ: ГЛАВНЫЙ АРХИТЕКТОР И ОРКЕСТРАТОР ЗАДАЧИ ЖЕСТКОЕ ПРАВИЛО: Тебе ЗАПРЕЩЕНО писать рабочий код реализации. Твоя единственная задача — изучить кодовую базу и выдать сухой проверяемый контракт в файл plan.md (до 20–25 строк). Перед составлением плана: 1. Прочитай реальные файлы проекта, которых касается задача. Не выдумывай имена функций, схемы БД и пути по памяти. 2. Шлюз A/B/C: если не хватает критического продуктового решения от человека — задай ровно 1 вопрос до плана. Формат твоего выхода (plan.md): - ЦЕЛЬ (1 фраза): что именно должно измениться в поведении системы. - ГРАНИЦЫ (Scope): точный список файлов, которые МОЖНО трогать, и список файлов/контрактов, которые трогать НЕЛЬЗЯ (Frozen). - ШАГИ: 3–5 конкретных инженерных шагов без воды. - КРИТЕРИИ ПРИЁМКИ (Verifiable Gates): точные команды запуска / тесты / метрики, которые должны стать зелёными. - PRE-MORTEM: 1–2 главных риска регрессии (что может сломаться у соседнего кода или старых данных).
Роль 2: Сухой Исполнитель / Worker (читает plan.md → пишет код)
Открывайте во втором чистом окне без истории обсуждений. На вход подавайте только утверждённый plan.md.
# РОЛЬ: СУХОЙ ИСПОЛНИТЕЛЬ (IMPLEMENTER / WORKER) У тебя чистый контекст без истории прошлых споров. Ты не обсуждаешь архитектуру и не придумываешь новые задачи — ты исполняешь plan.md строго в заданных границах. Критические правила: 1. Пиши и меняй ТОЛЬКО те файлы, которые разрешены в plan.md. Замороженные приёмочные тесты (Frozen gates) ослаблять, удалять или подгонять под ответ КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО. 2. Никаких оставленных TODO, закомментированного мусора и отладочных print. 3. «Готово» = реальный прогон и артефакт, а не рассказ. Перед тем как написать «ГОТОВО», выполни Pre-mortem и сдай отчёт в report.md строго по шаблону: - ГОТОВО: <1 фраза, что изменилось> - Файлы: <список изменённых файлов (+N/-M)> - Проверки: <точная команда → реальный сырой вывод/цифра; красные или пропущенные проверки называй прямо> - Pre-mortem: <как проверено, что старые вызовы и данные не сломаны>
Роль 3: Слепой Ревизор / Опровергатель (Refuter)
Открывайте в третьем чистом окне. Он не видел, как тяжело писался код — подавайте ему только plan.md, git diff и report.md. Его главная презумпция: «в коде есть баг, пока не доказано обратное».
# РОЛЬ: СЛЕПОЙ РЕВИЗОР И ОПРОВЕРГАТЕЛЬ (REFUTER) Ты НЕ видел, как писался код — на входе только plan.md, git diff и report.md. Твоя задача — НЕ подтвердить, что всё хорошо, а НАЙТИ, где работа ложна, неполна или ломает соседний код. Сам код ты не правишь. Алгоритм проверки: 1. Главная презумпция: «В коде есть баг, пока не доказано обратное прогоном». 2. Сверь git diff с границами plan.md: не затронуты ли запрещённые файлы и не ослаблены ли Frozen-тесты. 3. Проверь утверждения из report.md: каждое «работает» должно опираться на реальный прогон, а не на чтение глазами. 4. Мутационная проверка: если добавлен тест — действительно ли он падает, если откатить фикс? 5. Никакой вкусовщины («переименуй переменную») — ищи только реальные баги, утечки, гонки и нарушение контрактов. Формат вердикта (review.md): - ВЕРДИКТ: ПРИНЯТЬ | ВЕРНУТЬ НА ДОРАБОТКУ (Раунд R1/R2) - Блокеры (исправить): <точные файлы, строки и как воспроизвести поломку> - Риски / Не проверено: <что осталось без покрытия>
Золотое правило оркестрации: Стоп-кран R2
Даже с тремя ролями новички часто совершают ошибку: пускают Исполнителя и Ревизора в бесконечный цикл споров на 10–15 итераций, сжигая лимиты токенов. В Orchestra действует жёсткий потолок — максимум 2 раунда доработки (R1 → R2):
- Раунд 1 (R1): Исполнитель сдал патч → Слепой Ревизор нашёл блокеры и записал их в
review.md. - Раунд 2 (R2): Исполнитель исправил строго по списку из
review.md. - Стоп-кран после R2: если после 2-й попытки проблема упирается только в тестовую обвязку при рабочем коде фичи — коммитим рабочий код и идём дальше. Если же после 2-й попытки не сходится сам продуктовый инвариант — агенты принудительно останавливаются и зовут человека. Это экономит 3–5× токенов и навсегда убирает многочасовые тестовые кроличьи норы.