Когда не знаешь почему что-то происходит — выдвигает 4-6 конкурирующих объяснений и систематически убивает ложные через kill-тесты и confidence scores. Метод Chamberlin + Platt: вместо угадывания одного ответа — параллельная проверка всех. Для ARCHCODE (механизмы генома), отладки сложных багов, любого research-вопроса. НЕ для: одной гипотезы (→ /sci-hypothesis), атаки одной идеи (→ /skeptic). Triggers: /hyparb, /strong-inference, конкурирующие гипотезы, kill-test, почему это происходит.
Installs into .claude/skills of the current project.
Are you the author of Hypothesis Arbiter?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/sergeeey-hypothesis-arbiter)
---
name: hypothesis-arbiter
description: >
Когда не знаешь почему что-то происходит — выдвигает 4-6 конкурирующих объяснений
и систематически убивает ложные через kill-тесты и confidence scores.
Метод Chamberlin + Platt: вместо угадывания одного ответа — параллельная проверка всех.
Для ARCHCODE (механизмы генома), отладки сложных багов, любого research-вопроса.
НЕ для: одной гипотезы (→ /sci-hypothesis), атаки одной идеи (→ /skeptic).
Triggers: /hyparb, /strong-inference, конкурирующие гипотезы, kill-test, почему это происходит.
effort: high
tokens: ~2350 # measured: 2337 words / 26069 bytes, 2026-07-28. Same-day history: an 8-class
# taxonomy briefly added to Этап 1 was REVERTED after
# experiments/20260728-hypothesis-arbiter-taxonomy-pilot/decision.md (filed in
# parked/, not null_results/ -- see FL Rescue Layer) found its pre-registered
# MCID not met on n=1. Separately, Этап 4's Oracle Adequacy Gate was corrected
# to point at the pre-existing canonical `docs/oracle-adequacy-gate.md`
# (2026-06-30, PR #149/#153) instead of duplicating its checklist -- an
# external review caught the duplication before it reached main.
---
<!-- BSV — Brief Skill View | поиск: BSV
Скил : hypothesis-arbiter
TL;DR : Оркестрация конкурирующих гипотез по Chamberlin (1890) + Platt (1964): spawn → kill-design → in-silico → redteam → arbitrate
Вызов : /hypothesis-arbiter, /hyparb, /strong-inference, "выдвини гипотезы", "множественные гипотезы", "конкурирующие объяснения"
НЕ для : Генерация одной гипотезы (→ /sci-hypothesis), критика одной идеи (→ /skeptic), план эксперимента (→ /scientific-research)
-->
# Hypothesis Arbiter
## Метод множественных рабочих гипотез + Сильная инференция
> **Философия:** Наука прогрессирует не через доказательство истинного, а через систематическое
> исключение ложного. Ценность цикла — количество убитых гипотез, а не накопленных подтверждений.
> — Chamberlin (1890), Platt (1964), Popper (1934)
---
## Контекст пользователя (применять к этим проектам)
| Проект | Когда применять hypothesis-arbiter |
|--------|-------------------------------------|
| **ARCHCODE** | Конкурирующие механизмы хроматиновых петель, альтернативные объяснения ClinVar вариантов |
| **Reflexio** | Конкурирующие гипотезы о причинах падения точности транскрипции |
| **CogniRouter** | Конкурирующие архитектуры маршрутизации (embedding, rules, hybrid) |
| **GeoMiro** | Конкурирующие объяснения спектральных аномалий в геоданных |
| **Любая отладка** | Конкурирующие причины бага (не угадывать, а систематически убивать) |
---
## Протокол (5 этапов, всегда в этом порядке)
### Этап 1 — SPAWN: Генерация конкурирующих гипотез
**Правила генерации:**
- Минимум **4 гипотезы**, максимум **6** (меньше — underfit, больше — неуправляемо)
- Обязательно включить гипотезу **"нет эффекта / нулевая гипотеза" (H₀)**
- Обязательно включить гипотезу **"механизм ещё неизвестен"** (если применимо)
- Запрещено: формулировки "возможно", "наверное". Только чёткие, фальсифицируемые утверждения
- Запрещено: дублирующиеся гипотезы, отличающиеся только деталями
**Формат таблицы гипотез:**
| ID | Гипотеза | Механизм | Логическое основание |
|----|----------|----------|---------------------|
| H₀ | [Нулевая] | — | Baseline: нет эффекта |
| H₁ | [Формулировка] | [Как работает] | [Почему правдоподобно] |
| H₂ | [Формулировка] | [Как работает] | [Почему правдоподобно] |
| ... | | | |
**Если пользователь уже дал гипотезы:**
→ Оцени полноту, добавь недостающие, убери дублирующиеся
→ Переходи сразу к Этапу 2
---
### Этап 2 — KILL-DESIGN: Проектирование kill-тестов
Для каждой гипотезы разработай **минимальный решающий тест** (crucial experiment).
Критерий минимальности: самый дешёвый по времени/ресурсам тест, дающий чистый сигнал.
**Формат:**
| ID | Kill-критерий | Минимальный тест | Ожидаемый результат если НЕВЕРНА |
|----|--------------|-----------------|----------------------------------|
| H₁ | [Что опровергает] | [Как проверить] | [Конкретный результат] |
**Приоритизация тестов:**
Если несколько тестов конкурируют за ресурсы → используй матрицу:
- `Информативность × (1/Стоимость)` — максимизируй
**Инструменты для kill-тестов (использовать если доступны):**
- `biorxiv MCP` → поиск статей опровергающих гипотезу
- `WebSearch` → поиск контр-эвиденса в literature
- `Bash` → вычислительная проверка (если есть код/данные)
**Outcome map — зафиксировать ДО запуска теста (обязательно, не после):**
Для решающего теста распиши explicit: какой результат убивает какую гипотезу И что
конкретно делаем дальше при ЭТОМ КОНКРЕТНОМ исходе (не путать с Этапом 5, где действие
привязано к агрегатному числу выживших после ВСЕХ тестов цикла — здесь действие привязано
к одному конкретному результату одного конкретного теста, до того как он получен). Писать
это *после* получения результата — рационализация задним числом, а не предсказание.
```
Если результат = [A] → убивает: [H_i, H_j], усиливает: [H_k],
next action: [конкретный шаг — какой тест/анализ дальше, а не "проанализировать результаты"]
Если результат = [B] → убивает: [H_k], усиливает: [H_i],
next action: [конкретный шаг]
Если результат = [substrate-fail] → НЕ убивает НИЧЕГО, статус = BLOCKED-INFRASTRUCTURE,
next action: почини substrate, повтори ЭТОТ ЖЕ тест — не переходи к следующему пункту
```
**Anti-pattern:** `next action` вида "проанализировать результаты" / "посмотреть что получилось" —
это отсутствие action, замаскированное под action. Требуется имя следующего теста, следующего
источника поиска, или явное решение остановиться — то, что можно начать делать без дополнительного
раздумья сразу после получения этого конкретного результата.
**Substrate check (перед тем как считать результат опровержением):** тест физически смог
выполниться честно (данные доступны, инструмент не сломан, нет искажения от самой проверки)?
«Тест не смог выполниться» ≠ «гипотеза опровергнута» — если substrate сломан, это НЕ evidence
против любой гипотезы, повтори тест после починки substrate, не записывай ❌.
---
### Этап 3 — IN-SILICO: Проверка на имеющихся данных
Проведи проверку каждой гипотезы по 5 суб-чекам. Без нового эксперимента.
**5 суб-чеков (проводить по порядку, пропускать только если нет данных):**
```
[L] Literature check — поиск peer-reviewed статей / preprints (biorxiv MCP, WebSearch)
[D] Dataset check — есть ли публичные данные, подтверждающие/опровергающие?
[M] Mechanistic check — логически ли состоятелен механизм?
[S] Statistical check — если есть числа: правдоподобны ли effect sizes, p-values?
[C] Contradiction check — поиск явных опровержений в литературе
```
Для каждого суб-чека: найти источник или пометить `SOURCE_NOT_FOUND`.
---
**Evidence grading — присваивать для каждой выжившей гипотезы:**
| Grade | Определение |
|-------|-------------|
| **A** | Прямое экспериментальное доказательство (RCT, контролируемый эксперимент) |
| **B** | Сильное наблюдательное / когортное доказательство (≥2 независимых источника) |
| **C** | Косвенная поддержка (механистически правдоподобно, 1 источник) |
| **D** | Только computational / in-silico evidence |
| **E** | Спекулятивная гипотеза — логически возможно, нет эмпирической базы |
---
**Confidence formula (вычислять по шагам, не угадывать):**
```
Step 1: База
Confidence(Hᵢ) = 0.50
Step 2: Прибавить за поддерживающий эвиденс
+ 0.15 per supporting source (max +0.30 за ≥2 источника)
Step 3: Вычесть за контр-эвиденс
− 0.20 per contradicting source
Step 4: Штрафы
− 0.30 если kill-test не сформулирован (нефальсифицируемая гипотеза)
− 0.10 per confounder из Этапа 4 (применяется после red-team)
Step 5: Жёсткие потолки (caps — обязательны, нельзя обходить)
Evidence A required → max 0.90 без grade A
Evidence B required → max 0.75 без ≥2 независимых источников
Kill-test required → max 0.60 без kill-test
Strong alternative → max 0.55 если есть конкурирующая гипотеза с Confidence > 0.60
Step 6: Clip в [0.00, 1.00]
```
**Статусы по итогу:**
- ✅ **ВЫЖИЛА** — Confidence ≥ 0.55, нет прямого опровержения
- ⚠️ **ПОД ВОПРОСОМ** — Confidence 0.40–0.54 или источник одиночный
- ❌ **УБИТА** — Confidence < 0.40 или найдено прямое опровержение (grade A/B)
**Формат результата:**
| ID | Статус | Evidence Grade | Confidence | Ключевой источник / контр-эвиденс |
|----|--------|---------------|-----------|-----------------------------------|
| H₀ | ✅/⚠️/❌ | A–E | 0.XX | [DOI / URL / SOURCE_NOT_FOUND] |
---
### Этап 4 — RED-TEAM: Атака выживших гипотез
Для каждой ✅ и ⚠️ гипотезы:
```
КОНФАУНДЕРЫ (3 штуки для каждой):
1. [Альтернативный механизм, дающий тот же результат]
2. [Систематическая ошибка в данных/методе]
3. [Граничное условие, при котором гипотеза ломается]
АЛЬТЕРНАТИВНОЕ ОБЪЯСНЕНИЕ:
Какая другая гипотеза из набора объясняет те же данные?
ПРОВЕРКА БРИТВЫ ОККАМА:
Нарушает ли гипотеза принцип парсимонии? (да/нет + обоснование)
```
**Oracle Adequacy Gate (обязательно для гипотезы с Confidence ≥ 0.60, исправлено 2026-07-28 —
это уже существующий канонический механизм, `docs/oracle-adequacy-gate.md` от 2026-06-30,
компонент 2 Oracle-Aware Core в `/evolve-solution`; здесь раньше дублировался его список
вопросов вместо ссылки на него):** прежде чем доверять вердикту red-team, проверь сам механизм
проверки, не только гипотезу — прогони `docs/oracle-adequacy-gate.md` (5 проверок: Gameable? /
Real vs theater? / Negative control? / Reproducible? / Measures the intent?) → ADEQUATE /
WEAK / INADEQUATE.
**Добавка специфичная для hypothesis-arbiter (не покрыта каноническим гейтом):**
| Вопрос | Если ответ "нет"/"неизвестно" |
|---|---|
| Independent от generator (context asymmetry)? | Делегируй `/skeptic` с **только** claim + evidence, без цепочки рассуждений этого цикла |
| Ловит намеренно внесённую ошибку? | Внести известную ошибку в тестовые данные, проверить, что evaluator её находит |
| Не использует те же данные, на которых сформулирована гипотеза (no data leakage)? | Отметить и исключить перекрывающиеся источники |
INADEQUATE (канонический гейт) ИЛИ провал добавки → статус гипотезы `ORACLE_INADEQUATE`,
отдельно от ✅/⚠️/❌: результат теста не засчитывается ни за, ни против гипотезы, пока
evaluator не почищен.
После red-team → обновить Confidence score (может понизиться).
---
### Этап 5 — ARBITRATE: Синтез и следующий цикл
**Итоговая таблица:**
| ID | Гипотеза | Статус | Final Confidence | Kill-test для следующего цикла |
|----|----------|--------|-----------------|-------------------------------|
| H₁ | ... | ✅ | 0.XX | [Что нужно проверить] |
**Формулировка вердикта (Duhem–Quine qualifier, обязательна для статуса ❌):**
Ни один kill-тест не опровергает гипотезу изолированно — он опровергает конъюнкцию
`H ∧ (измерительный аппарат) ∧ (препроцессинг) ∧ (вспомогательные допущения)`. Пиши:
> «H₁ **несовместима** с результатом R **при допущениях** A1–An **и substrate** S1»
Никогда голое «H₁ опровергнута» — это не педантизм, это то, что позволяет позже спасти H₁,
оспорив вспомогательное допущение, а не сам механизм.
**Синтез:**
1. Сколько гипотез выжило?
- 0 → все ложны → нужна новая генерация (вызов /sci-hypothesis)
- 1 → кандидат на принятие (временное!). Нужен ещё один цикл sub-гипотез
- 2-3 → нужен crucial experiment, разделяющий их
- 4+ → kill-тесты были слабые, нужно усилить
2. Требуется ли **комбинация** нескольких гипотез?
(Как у Чемберлина для Великих озёр: речная эрозия + ледник + деформация коры)
3. **Решающий эксперимент** для следующего шага:
```
CRUCIAL EXPERIMENT:
Если провести [КОНКРЕТНЫЙ ТЕСТ] и получить [РЕЗУЛЬТАТ A]:
→ Подтверждает H₁, исключает H₂, H₃
Если получить [РЕЗУЛЬТАТ B]:
→ Подтверждает H₂, исключает H₁
Стоимость теста: [оценка времени/ресурсов]
Рекомендация: [проводить немедленно / можно отложить]
```
4. **Sub-гипотезы** для следующего цикла:
Если H₁ выжила → что именно в её механизме нужно уточнить?
Выдвини 2-3 sub-гипотезы → рецикл с Этапа 2
---
## Режимы вызова
### `/hypothesis-arbiter` или `/hyparb` — полный цикл (все 5 этапов)
Запускать когда: нужен полный анализ конкурирующих объяснений
### `/hyparb spawn [тема]` — только Этап 1: генерация гипотез
Пример: `/hyparb spawn "почему снижается точность Reflexio после 20:00"`
### `/hyparb kill [гипотезы]` — только Этап 2: kill-test design
Когда гипотезы уже есть, нужны только тесты
### `/hyparb insilico` — только Этап 3: проверка на имеющихся данных
Когда kill-тесты уже спроектированы
### `/hyparb redteam [гипотезы]` — только Этап 4: атака выживших
Когда хочешь проверить конкретные выжившие гипотезы
### `/hyparb arbitrate` — только Этап 5: синтез
Когда данные собраны, нужно решение
### `/hyparb cycle` — следующая итерация с sub-гипотезами
Продолжает цикл от точки остановки
---
## Интеграция с экосистемой скилов
```
sci-hypothesis ──→ [hypothesis-arbiter] ──→ scientific-research
(нашёл нетривиальную) (управляет набором) (запускает проект)
↑↑
skeptic (точечная атака на одну)
biorxiv MCP (поиск контр-эвиденса)
WebSearch (поиск литературы)
```
**Противопоказания (routing на альтернативу, не просто "не сюда"):**
| Условие | Почему | Вместо этого |
|---|---|---|
| Точный детерминированный lookup ("что делает флаг X?") | нечего дискриминировать | `Grep` / чтение кода |
| Только один механически возможный путь | нет конкуренции | `/sci-hypothesis` (одна гипотеза) |
| Нет наблюдаемого исхода, различающего кандидатов | тест не может быть решающим → циркулярность | сначала собрать данные; `/estimand-bridge` |
| Спор про внутреннюю валидность ОДНОЙ идеи | не конкурирующие механизмы | `/skeptic` / `/claim-decomposer` |
| Чисто описательный/предиктивный вопрос | неверный класс estimand (см. EstimandOps L0) | `/analyst` / `/data-analysis` |
| Нужна методология целого исследовательского проекта | другой масштаб | `/scientific-research` |
---
## Протокол источников (обязателен на Этапе 3)
**Иерархия доверия:**
```
1. Peer-reviewed journals (PubMed, Nature, Science, Cell) → grade A или B
2. Preprints с рецензиями (bioRxiv, arXiv с review) → grade B или C
3. Preprints без рецензий → grade C максимум
4. Databases (ClinVar, UniProt, ENCODE, GEO) → grade B (если прямые данные)
5. Computational models / simulations → grade D
6. Expert opinion / review без данных → grade E
```
**Правила цитирования:**
- Каждое утверждение confidence > 0.60 → обязателен источник с DOI или URL
- Если источник не найден → пометить `SOURCE_NOT_FOUND` (не замалчивать)
- Запрещено: утверждение "известно, что..." без citation
- Запрещено: confidence > 0.75 без ≥2 независимых источников
**Инструменты для поиска (использовать в этом порядке):**
1. `biorxiv MCP` → биологические preprints
2. `WebSearch` → PubMed, Google Scholar, Semantic Scholar
3. `WebFetch` → прямой доступ к статье по DOI
4. `Bash` → локальные данные/датасеты если есть
---
## Антипаттерны (следить за этим)
| Сигнал | Диагноз | Действие |
|--------|---------|---------|
| "У меня одна хорошая гипотеза" | Ruling Theory trap (Chamberlin) | Выдвинуть ещё 3 конкурента обязательно |
| Confidence > 0.85 после 1 цикла | Confirmation bias | Запустить дополнительный red-team |
| "Эти данные подтверждают H₁" | Мыслишь подтверждением, не опровержением | Спросить: "Что опровергло бы H₁?" |
| Все гипотезы выжили (confidence ~0.5) | Kill-тесты слишком слабые | Усилить kill-criteria, добавить бремя доказательства |
| "Красивая" гипотеза без фальсификации | Нефальсифицируемая гипотеза | Автоматически -0.30 к confidence |
| Confidence > 0.75 без источников | Произвольная уверенность | Применить caps из формулы |
| "Известно, что..." без citation | Hallucination risk | Пометить SOURCE_NOT_FOUND, найти или признать gap |
| Все H₁-H₄ умирают от ОДНОГО и того же теста по ОДНОЙ и той же причине | Correlated candidates — гипотезы делят скрытое допущение, не механизм | Пересформулируй Этап 1: каждая H должна называть ДРУГОЙ причинный путь |
| Outcome map написан ПОСЛЕ того как увидел результат теста | Post-hoc rationalization, не предсказание | Отменить тест как решающий; повторить с outcome map, зафиксированным ДО |
---
## Шаблон состояния (сохранять в ~/.claude/memory/hypotheses_active.md)
```markdown
# Активный цикл гипотез
## Тема: [название]
## Цикл: [N]/∞
## Дата: [YYYY-MM-DD]
## Гипотезы
| ID | Статус | Confidence | Следующий тест |
|----|----|----|----|
| H₀ | ✅ | 0.50 | — |
| H₁ | ⚠️ | 0.55 | biorxiv поиск по [тема] |
| H₂ | ❌ | 0.00 | убита: [источник] |
## Решающий эксперимент
[описание]
## Sub-гипотезы для следующего цикла
[список]
```
---
## Связанные скилы
- `/sci-hypothesis` — генерация нетривиальных гипотез для набора
- `/skeptic` — точечная атака на одну гипотезу (обязателен для oracle-независимости, Этап 4)
- `/scientific-research` — методология исследовательского проекта
- `/analyst` — MECE / Bayesian / First Principles анализ проблемы
- `/research-scout` — поиск статей для in-silico проверки
- `/boyko-scientific-consortium` — консорциум-обёртка, делегирует сюда арбитраж конкурирующих гипотез
- `/construct-measurement-gate` — вызывает как downstream adjudication layer для Step 10 (финальное решение о влиянии measurement uncertainty на вывод)
- `/negative-space-miner` — вызывает, если Этап 4 (Repair Hypotheses) даёт >1 survivor-гипотезу, для ACH/kill-test дискриминации между ними
## Полный контракт (deep-spec, читать при необходимости)
`references/strong-inference-contract.md` — полная спецификация метода: provenance
(Platt 1964, Chamberlin 1890), applicability, каталог adversarial failure modes,
oracle design в деталях, benchmark-методология. Этот SKILL.md — runtime-протокол
(что делать); reference — почему это работает и как это ломается. Читать reference
при: споре о корректности метода, проектировании benchmark, обучении новых hypotheses
разработчиков.
`references/ach_matrix.md` — шаблон prediction-matrix (Heuer 1999 ACH) для Этапа 1-2,
когда одновременно живы ≥3 гипотезы и нужна явная hypotheses × evidence таблица
вместо построчных kill-тестов.
Когда в такой таблице заполнено ≥3 гипотезы: `python scripts/ach_quotient.py classes <файл>` (из репозитория
Claude-cod-top-2026) покажет гипотезы, которые ни один заполненный тест не разделяет, и тесты, не разделяющие
ничего; `N/A` там никогда не равно согласию. Справка, не гейт (`docs/derived-view-tools.md`).
**Кто вызывает этот скил** (по `depends_on` в `skills/registry.yaml`):
- `/hd-mavp-router` — маршрутизирует сюда сложные аудиты (run_mode)
- `/boyko-why-ladder` — вызывает при обрыве why-цепочки на конкурирующих объяснениях