# Полный единый цикл переговоров (наставник + судья + арбитраж) — дизайн для claude-brain

**Дата:** 16.06.2026. **Статус:** дизайн согласован владельцем (brainstorming). **Назначение:**
эталон для проекта claude-brain — реализовать у себя так же или лучше. Заменяет/расширяет частичные
Фикс 2a/2b (они — подмножество этого цикла). Связано с findings-спекой
[2026-06-15-arbitration-machinery-findings-for-claude-brain.md](../specs/2026-06-15-arbitration-machinery-findings-for-claude-brain.md)
и журналом [2026-06-16-arbitration-fixes-worklog-for-brain.md](2026-06-16-arbitration-fixes-worklog-for-brain.md).

---

## 0. Главный принцип

**Спека и план — это ОДНА И ТА ЖЕ машинерия, прогоняемая дважды:** сначала весь цикл проходит
СПЕКА (до печати артефакта), затем весь цикл проходит ПЛАН (до печати плана). Поведение,
структура кругов, память, потолки, арбитраж — **побайтово одинаковы** для обоих. Любая правка
машинерии применяется к обоим симметрично.

## 1. Роли (решение владельца)

- **Контроллер ↔ наставник/судья — это переговоры.** Владелец в круги НЕ участвует.
- **Наставник — открытый соавтор:** ведёт с контроллером диалог, видит доводы, помогает довести
  артефакт.
- **Судья — холодный контроль:** не участвует в диалоге; видит только свои замечания, доводы
  контроллера лично ему, и историю версий. Его нельзя «уболтать».
- **Владелец — только арбитр:** появляется ТОЛЬКО при выходе в арбитраж (на любом круге или при
  исчерпании потолка). Видит дословные позиции и занимает одну.

## 2. Контекст, подаваемый каждый круг (обе стадии)

| Что | Форма |
|---|---|
| текущая версия артефакта | **полностью** |
| прошлые версии | **diff** (что менялось), НЕ полные тела — чтобы не перегружать на большой спеке/плане |
| замечания стороны | **дословные ЦИТАТЫ** (verbatim, без пересказа) — у ОБОИХ: и судьи, и наставника |
| доводы контроллера | **дословные ЦИТАТЫ**, раздельно по адресату (см. §3) |
| постоянный довесок | verified-context (проверенный контекст), карта районов (graph-section), скилы (объявленные + рекомендация роутера) — остаётся как сейчас |

**Почему diff, а не полные версии:** накопительная ПАМЯТЬ — это замечания и доводы (короткие);
тела артефактов дублировать дорого и топит модель. Текущая версия = результат, diff + довод
показывают изменение.

## 3. Две дорожки доводов (адресность)

Доводы контроллера хранятся РАЗДЕЛЬНО:

- **M-дорожка** — доводы наставнику.
- **J-дорожка** — доводы судье.

Наставник видит: свои замечания + M-доводы (+ при возврате после судьи — замечание судьи).
Судья видит: свои замечания + J-доводы. **Судья НЕ видит** замечаний наставника и диалога
контроллер↔наставник. Асимметрия намеренная (судья холодный).

## 4. СТАДИЯ M — контроллер ↔ наставник (≤3 круга)

- **Круг 1:** наставник видит [текущую версию] + довесок (истории ещё нет). → замечание м1 (дословно) ИЛИ GO.
- **Круг 2:** контроллер пишет v2 + довод д1 (M-дорожка). Наставник видит [v2 + diff v1] + [м1 цитата] + [д1 цитата] + довесок. Обязан проверить, снято ли м1; снятое не повторять. → м2 ИЛИ GO.
- **Круг 3:** контроллер пишет v3 + д2. Наставник видит [v3 + diff v1,v2] + [м1,м2] + [д1,д2] + довесок. → м3 ИЛИ GO.
- **Выход в арбитраж — на ЛЮБОМ круге.** После 3 кругов без GO → принудительный арбитраж.
- Наставник GO → СТАДИЯ J.

## 5. СТАДИЯ J — контроллер ↔ судья (≤3 круга), симметрично, но круг 1 слеп

- **Круг 1 — СУДЬЯ СЛЕП:** видит ТОЛЬКО текущий артефакт + довесок. Ничьих диалогов, никакой истории. Чистый суд продукт-против-цели. → замечание с1 (дословно) ИЛИ GO.
- **Если с1:** контроллер правит (vс2 + довод дс1 в J-дорожку) → **ВОЗВРАТ В СТАДИЮ M**: наставник заново гонит свои ≤3 круга, его контекст теперь включает и замечание судьи с1. Наставник GO → назад к судье.
- **Круг 2:** судья видит [vс2 + diff vс1] + [с1 цитата] + [дс1 цитата] + довесок. Проверяет снятие с1; новое — только с обоснованием «почему не видел в круге 1». → с2 ИЛИ GO.
- **Если с2:** правишь → возврат в M (контекст включает с1,с2) → GO → судья круг 3.
- **Круг 3:** судья видит [vс3 + diff vс1,vс2] + [с1,с2] + [дс1,дс2] + довесок. → с3 ИЛИ GO.
- **Выход в арбитраж — на ЛЮБОМ круге.** 3-е замечание судьи (с3) → принудительный арбитраж.
- Судья GO → **ПЕЧАТЬ** артефакта (seal).

## 6. Потолки и завершаемость

- ≤3 круга на каждую стадию (наставник, судья).
- Каждое замечание судьи перезапускает цикл наставника (≤3 круга).
- 3-е замечание судьи → принудительный арбитраж.
- Выход в арбитраж доступен на ЛЮБОМ круге обеих стадий (контроллер/владелец может оборвать раньше).
- **Худший случай на 1 артефакт:** старт-наставник 3 + (судья1 + наставник3) + (судья2 + наставник3) + судья3 = **12 вызовов LLM** → арбитраж. **×2 (спека+план) = 24.** Лучший случай: наставник GO с 1-го + судья GO с 1-го = **2 вызова**.

## 7. Арбитраж (выход на любом круге)

Карточка владельцу: дословные замечания стороны + дословная позиция контроллера + 3 кнопки:

- **Держусь контроллера** → план/спека опечатывается как есть (owner-seal-override — это **Фикс 3**, ещё не сделан).
- **Согласен с замечанием** → контроллер переделывает, счётчик сброшен.
- **Своё решение** → владелец вписывает указание → контроллер правит → печать.

(Механика owner-seal-override — отдельный Фикс 3, см. findings F-D.)

## 8. Соответствие схемы текущему коду (точки врезки для brain)

- `judge-engine.mjs` `buildJudgePrompt` — добавить блок памяти (версии+diff, свои замечания verbatim, J-доводы verbatim); круг 1 слеп (priors пусты). **Фикс 2a уже сделал зачаток** (priorObjections + controllerResponses), но без diff-версий и без полной J-дорожки.
- `mentor-verdict.mjs` `buildMentorVerdictPrompt`/`buildMentorSpecVerdictPrompt` — блок памяти (версии+diff, свои замечания verbatim, M-доводы verbatim, замечание судьи при возврате) + инструкция переоценки. **Фикс 2b уже сделал зачаток** (инструкция + доводы контроллера в журнал), без diff-версий и без J-замечания при возврате.
- `round-memory-store.mjs` (Фикс 2a) — расширить: хранить версии (для diff), замечания verbatim по (task_id, side), доводы по дорожкам (M/J).
- `enforce-mentor-on-plan-write.mjs` / `enforce-judge-gate.mjs` — оркестрация стадий, возврат M-после-J, потолки, спека-путь СИММЕТРИЧНО плану (сейчас 2b покрыл только план-путь).
- `arbitration-card.mjs` — выход на любом круге (сейчас только на 3-м); owner-seal (Фикс 3).
- `negotiation-section.mjs` — разделить доводы по дорожкам (M/J), сейчас один раздел «Переговоры».
- diff прошлых версий — новый помощник (хранить прошлые версии артефакта, отдавать diff).

## 9. Что уже сделано здесь (замороженная копия) vs осталось

- ✅ **Фикс 1 (видимость вердикта)** — отдельный, готов, проверен живым.
- 🟡 **Фикс 2a/2b** — ЧАСТИЧНЫЙ случай этого цикла: память на 1 круг назад, без diff-версий, без
  двух дорожек, без вложенного M-после-J, без спека-пути наставника, арбитраж только на 3-м круге.
- ⬜ **Полный цикл (этот документ)** — не реализован; требует расширения 2a/2b + версионирование/diff
  - две дорожки + оркестрация возврата + потолки + симметрия спека/план + Фикс 3 (owner-seal).

**Рекомендация:** brain реализует полный цикл целиком у себя (это его архитектура). В замороженной
копии — оставить рабочие Фикс 1 + 2a/2b как частичное улучшение, ЛИБО по решению владельца
дореализовать полный цикл здесь поэтапно.
