Conflict Resolution
Алгоритм разрешения разногласий между агентами. Конфликт = сигнал, не помеха.
Главное правило: результат конфликта никогда не усредняется, не выбирается по confidence, не решается голосованием. См. INV-5.
Когда возникает конфликт
| Ситуация | Пример |
|---|---|
| Scout и Researcher расходятся в числах | Scout: “TAM = 1.2B” |
| Два Researcher на одной задаче дали разные выводы | R1: “рынок растёт”, R2: “рынок стагнирует” |
| Director и CEO не согласны по scope | Director: “нужно расширить”, CEO: “scope fix” |
| Новые данные противоречат ранее записанным | Week 2 report: “15 конкурентов”, Week 3 run: “26 конкурентов” |
Алгоритм (4 шага)
Шаг 1: Зафиксировать разногласие
Агент, обнаруживший конфликт:
{
"conflict_detected": true,
"claim_a": {"source": "competitor_scout", "value": "TAM = $5B", "evidence": ["url1", "url2"]},
"claim_b": {"source": "market_researcher", "value": "TAM = $1.2B", "evidence": ["url3"]},
"conflict_type": "numeric_divergence",
"divergence": "4.2x"
}Обязательно: оба варианта сохранены полностью. Ничего не удаляется.
Лог: audit.conflict_detected {type, agents, divergence}
Шаг 2: Определить Primary Authority
По матрице DecisionRights и роли агентов:
| Тип конфликта | Primary Authority | Почему |
|---|---|---|
| Market data (TAM/SAM/pricing) | MarketResearcher | Его специализация — market analysis |
| Competitor list / features | CompetitorScout | Его специализация — competitor search |
| Strategic interpretation | IntelDirector | Он агрегирует и интерпретирует |
| Budget / resource allocation | CEO | Его зона ответственности |
| Factual data (dates, names, URLs) | Тот у кого primary source (URL) | Проверяемые факты |
Primary Authority делает финальный вызов: выбирает одну из версий с обоснованием. Вторая версия сохраняется как "alternative_view" в result.
Шаг 3: Если authority неоднозначна → Judge
Когда конфликт не попадает в таблицу выше, или оба агента имеют equal authority:
-
Judge agent (когда 3.2 готов) оценивает оба варианта по:
- Quality of evidence (количество и надёжность источников)
- Internal consistency (нет ли противоречий внутри каждой версии)
- Recency (более свежие данные предпочтительнее)
-
Judge выбирает версию с обоснованием или возвращает
"unresolvable".
Judge agent conflict resolution: реализация в Week 3.2, код в synth-brain/src/synth_brain/agents/judge/. См. Agent-Judge для спецификации роли.
Note: Until Judge enforcement layer ships, enforcement steps executed manually by Founder + Strategy Claude. Judge-the-agent is operational (running in Navigator/Chamber), Judge-as-governance-enforcer is planned.
Шаг 4: Если Judge не разводит → Human
Escalate Human Owner с полным контекстом:
🔀 Conflict: [тип]
Agent A (Scout): [версия A, 2-3 предложения]
Agent B (Researcher): [версия B, 2-3 предложения]
Judge assessment: unresolvable / [причина]
Sources A: [urls]
Sources B: [urls]
Please choose version or provide resolution.
Timeout: 24 часа. Нет ответа → task killed, конфликт записан в Decision-Log для будущего reference.
Запрещённые способы разрешения
| Способ | Почему запрещён |
|---|---|
| Усреднение | ”TAM = 5B и $1.2B) — бессмысленно, нет в реальности |
| Голосование | 2 vs 1 не означает правоту большинства |
| Выбор по confidence | Confidence субъективен, высокий confidence ≠ правильность |
| Игнорирование | Конфликт замалчивается — данные для решений будут противоречивы |
Метрики
| Метрика | Target |
|---|---|
| Conflicts per 100 tasks | Track (нет target — конфликты нормальны) |
| % resolved by Primary Authority | > 70% (иначе authority плохо определена) |
| % escalated to Human | < 10% (иначе Judge/Authority не работают) |
| Mean time to resolution | < 2ч (agent) / < 24ч (human) |
Связанные документы
- INV-5 — конфликт не разрешается голосованием
- DecisionRights — кто имеет authority
- Триггер 3 — conflicting evidence
- Agent-Judge — автоматическая оценка
- Process-Escalation — механика передачи наверх