Реализация ADR-0005 и ADR-0009. Раздел ТЗ 36. Репозиторий: https://github.com/ochenstarik-ui/kagent Зависит от задачи 0.9.0 (зелёный trunk). ## Зачем Definition of Done требует test_failures: 0. Это условие выполняется двумя способами: сделать код корректным или согласовать тесты с текущим поведением кода. Автономный агент оптимизирует измеримую цель, поэтому второй путь ожидаем, а не гипотетичен. Сейчас удаление падающего теста удовлетворяет DoD. Параллельно: параллельные workstream создают ветки, а порядок их интеграции нигде не определён, поэтому ветка может пройти верификацию на устаревшей базе и сломать trunk, при том что отчёт задачи заявит успех. ## Что сделать ### Целостность оракула (ADR-0005, ТЗ 36.2-36.6) - тесты формируются на этапах спецификации и планирования, а не по реализации; - роли Test Agent и Code Reviewer не обслуживаются той же конфигурацией модели, что Developer Agent в рамках одной задачи; - утверждённый набор тестов read-only для Developer Agent на всё время реализации и repair, тестовые пути в forbidden_paths контракта задачи; - изменение существующих тестов — действие класса approval_required; - разделение change set на code diff и test diff, раздельное представление reviewer; - проверка запрещённых конструкций в test diff: маркеры skip и ожидаемого падения, пустые обработчики исключений, отключённые и ослабленные ассерты, снижение порогов покрытия, флаги обхода проверок и hooks; совпадение блокирует завершение и не снимается реализующим агентом; - мутационная проверка: ограниченный набор синтетических дефектов в изменённый код, новые тесты обязаны их обнаружить, mutation_score в DoD; - учёт escape defects с атрибуцией запуску и конфигурации reviewer. ### Ветвление и merge queue (ADR-0009, ТЗ 36.7) - сериализация интеграции: rebase на текущий trunk, повторный прогон обязательных проверок на интегрированном результате, затем merge; - одна задача — одна ветка — один change set; - запрет прямого push в базовую ветку, force push и переписывания истории для всех агентских идентичностей, включая административные; - конфликт внутри allowed_paths разрешает агент с полной повторной верификацией; конфликт вне allowed_paths или затрагивающий замороженные тесты эскалируется как человеческое решение и не расходует repair-циклы; - коммиты атомарны, в trailers идентификаторы задачи, запуска и версий промптов. ## Критерий приёмки - негативный тест: агент, пытающийся пометить падающий тест как skipped, получает блокировку завершения; - негативный тест: тест, не обнаруживающий ни одного синтетического дефекта, не засчитывается, задача не закрывается; - две ветки с конфликтом проходят через очередь без поломки trunk; - попытка force push от агентской идентичности отклоняется.