server-monitor-manager/agents/hermes/notes/salvage-2026-08-18/hermes-desktop-attachments/desktop-attachments/0.9.4-economics.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в
домашней папке, перенесены в agents/. Разложено по агентам там, где имя
файла позволяло определить автора; остальное — в _salvage-2026-08-18/
и разбирается вручную.

Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных
рабочих копий: она существовала только на диске.

Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не
попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:19:54 +07:00

4.6 KiB
Raw Permalink Blame History

Реализация ADR-0006, ADR-0010, ADR-0013. Раздел ТЗ 37.

Репозиторий: https://github.com/ochenstarik-ui/kagent Зависит от задачи 0.9.0 (зелёный trunk).

Зачем

Лимит max_model_cost на задачу не ограничивает суммарные расходы: сорок параллельных задач укладываются каждая в свой лимит и вместе выносят месячный бюджет. Счётчик, увеличиваемый после вызова, некорректен при параллелизме — воркеры читают устаревшую сумму и все проходят проверку.

Идемпотентность заявлена как требование в трёх разделах ТЗ, но без механизма: при истечении lease повтор создаст второй pull request и второй деплой, и агент об этом не узнает.

Что сделать

Бюджетный ledger (ADR-0006, ТЗ 37.1-37.2)

  • двухфазный учёт в PostgreSQL: атомарный резерв оценки перед шагом, списание факта после вызова, возврат остатка;
  • резерв связан с lease шага, осиротевший резерв освобождается supervisor;
  • иерархия бюджетов: организация -> проект -> задача -> шаг, резерв обязан пройти на всех уровнях;
  • append-only, атрибуция запуску, шагу и конфигурации модели;
  • автостоп по burn rate: превышение порога переводит платформу в режим ограниченного приёма, текущие задачи доводятся до checkpoint и паркуются, порождается инцидент, снятие — явным действием оператора;
  • глобальная пауза как отдельный переключатель, независимый от аварийной остановки задачи и от security read-only.

Ledger внешних эффектов (ADR-0010, ТЗ 37.4)

  • ключ идемпотентности из run_id, step_id, типа эффекта и канонического дайджеста payload, вычисляется до попытки выполнения;
  • состояния intended / in_flight / succeeded / failed / unknown, внешний идентификатор от целевой системы;
  • при повторе succeeded возвращает сохранённый результат без повторного выполнения; unknown блокирует шаг и порождает инцидент сверки;
  • outbox: эффекты, порождённые изменением состояния, публикуются в одной транзакции с ним;
  • connector с операциями записи обязан принимать ключ идемпотентности или предоставлять естественный ключ для сверки, иначе допускается только к чтению;
  • процедура сверки для каждого write-connector.

Кэш модельных вызовов (ADR-0013, ТЗ 37.3)

  • prefix-stable сборка контекста: неизменяемые элементы первыми;
  • кэш точных ответов по ключу (model_id, model_version, prompt_registry_version, request_digest, sampling);
  • схлопывание одновременных идентичных запросов;
  • отключение там, где разнообразие является целью: consensus, shadow mode;
  • изоляция по проектам и privacy zones;
  • попадание в кэш видно в Run Timeline, запуск не выглядит дешевле, чем есть.

Критерий приёмки

  • нагрузочный тест: N параллельных задач не пробивают общий бюджет ни разу;
  • тест: убитый воркер и повтор шага не создают второй pull request;
  • тест: истёкший резерв освобождается и не блокирует бюджет навсегда;
  • отчёт стоимости успешной задачи считается из ledger, а не из логов.