Реализация 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.