server-monitor-manager/agents/hermes/notes/salvage-2026-08-18/hermes-desktop-attachments/desktop-attachments/0.9.2-reproducibility.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.3 KiB
Raw Blame History

Реализация ADR-0004, ADR-0007, ADR-0012. Разделы ТЗ 35 и 39.

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

Зачем

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

Что сделать

Кассеты (ADR-0004, ТЗ 35.2-35.3)

  • запись каждого модельного вызова: run_id, step_id, agent_role, attempt, prompt_hash, полный запрос и ответ, model_id, версия профиля модели, версия промпта, sampling и seed, токены, стоимость, латентность, checksum контекстного пакета;
  • хранение в object storage как неизменяемые объекты, ссылка из Run Timeline и audit log, наследование privacy class проекта;
  • маскирование секретов теми же правилами, что для логов;
  • режимы live / record / replay, переключение конфигурацией;
  • ключ разрешения (run_id, step_id, attempt) для точного реплея и (agent_role, prompt_hash) для фикстур;
  • отсутствие кассеты в replay — жёсткая ошибка, тихий переход к живому вызову запрещён;
  • политика хранения и удаление вместе с проектом.

Реестр промптов (ADR-0007, ТЗ 35.4)

  • промпт как трекаемый файл с манифестом: prompt_id, версия, content_hash, ожидаемые входы, выходной контракт роли, совместимые capabilities, changelog;
  • runtime резолвит промпты только через реестр, инлайн-литералы запрещены проверкой;
  • каждый шаг запуска фиксирует prompt_id и версию;
  • прошлые версии остаются разрешимыми, иначе записанные запуски перестают быть воспроизводимыми.

Жизненный цикл контекста (ADR-0012, ТЗ 39)

  • бюджет контекста в токенах на роль, компактификация вместо молчаливого усечения;
  • якоря, которые не суммаризируются и переутверждаются после каждой компактификации: контракт задачи, allowed/forbidden paths, Definition of Done, действующие approvals, политика безопасности;
  • сохранение состояния до компактификации как checkpoint-артефакт;
  • класс происхождения у каждого элемента контекста; недоверенное содержимое отделяется и помечается как данные; инструкции внутри данных не выполняются, а фиксируются как событие безопасности;
  • детерминированность сборки и компактификации при одинаковых входах.

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

  • прогон пайплайна в режиме record, затем повторный прогон в replay даёт идентичную последовательность шагов и нулевую стоимость;
  • реплей доступен из Run Timeline одним действием;
  • проверка в CI: ни одного инлайн-промпта вне реестра;
  • тест: сборка контекста дважды на одних входах даёт одинаковый checksum.