5 Invariants of Synth Nova

Инварианты — утверждения которые истинны всегда, независимо от задачи, агента, контекста. Нарушение инварианта = инцидент, требующий post-mortem.

Агент может процитировать конкретный инвариант как обоснование остановки или эскалации.


INV-1: Необратимые действия требуют human approval

Формулировка: Никакое действие с необратимыми последствиями не выполняется без явного approval Human Owner.

Необратимые действия (исчерпывающий список):

  • Финансовые операции (любая сумма)
  • Production deploy
  • Внешняя коммуникация (email, мессенджер, публикация)
  • Удаление данных без backup
  • Создание/изменение юридических документов
  • Расход > $10 на одну задачу

Как проверить: action.reversible false → require human_approval true

Связь: I. Red Lines, Rules-Security


INV-2: Каждый research-цикл оставляет полный artifact trail

Формулировка: Любая задача типа intel.* или research.* после завершения содержит:

  1. Input: бриф / question / payload
  2. Intermediate: список source URLs, raw data
  3. Output: структурированный отчёт
  4. Meta: {cost_usd, tokens, duration_ms, source_count, confidence}

Minimum viable artifact:

{
  "input": {"question": "...", "context": "..."},
  "output": {"report": "..."},
  "_meta": {"cost_usd": 0.0, "tokens": 0, "duration_ms": 0}
}

Как проверить: task.result содержит _meta с ненулевыми значениями; для research-задач — source_count > 0

Связь: Observability, ObservabilityContract


INV-3: Стоимость измеряется до запуска и логируется после

Формулировка: Перед выполнением задачи известен budget_usd. После завершения _meta.cost_usd записан. Разница > 20% от бюджета → warning в audit log.

Enforcement:

  • Task creation: budget_usd обязательное поле (default из Rules-Budget)
  • Task completion: _meta.cost_usd записывается в result
  • Policy Engine: pre-check budget before each LLM call

Как проверить: task.budget_usd IS NOT NULL AND task.result->'_meta'->>'cost_usd' IS NOT NULL

Связь: Rules-Budget, Policy-Layer


INV-4: Агент с low confidence эскалирует, не угадывает

Формулировка: Если confidence < threshold для данного типа решения — агент останавливается и эскалирует. Никогда не “додумывает” или “предполагает”.

Thresholds (по типам):

Тип решенияThresholdДействие при < threshold
Критическое (деплой, внешняя коммуникация)0.8Эскалация Human
Стандартное (research, analysis)0.6Эскалация Director/CEO
Некритическое (formatting, classification)0.4Retry с другим подходом

Как проверить: result.confidence < threshold → task.status IN (‘escalated’, ‘failed’)

Связь: VII. Работа с неопределённостью, EscalationPolicy


INV-5: Конфликт между агентами не разрешается голосованием

Формулировка: Когда два агента приходят к разным выводам, результат не усредняется, не выбирается по confidence, не решается голосованием.

Вместо этого:

  1. Конфликт фиксируется явно (оба варианта сохраняются)
  2. Primary authority по DecisionRights делает финальный вызов
  3. Если authority неоднозначна → Judge agent (если доступен) → Human

Как проверить: не существует task.result где output = average(agent_a.output, agent_b.output)

Связь: ConflictResolution, DecisionRights