Задания, отчёты и патчи, лежавшие в 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>
4.3 KiB
4.3 KiB
Реализация 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.