9. Отчёт, diff и возможность отката
Суть этапа
Завершаем задачу понятным результатом и сохраняем возможность отменить наше изменение рабочей копии. Исходный сайт пользователя остаётся неизменным.
Что получает пользователь
- Что было проверено и какие ограничения остались.
- Какие находки подтверждены, отклонены или требуют дальнейшего анализа.
- Что изменено в копии и почему: diff с привязкой к плану.
- Какие проверки выполнены после изменения и с каким результатом.
- Что не удалось завершить и какой следующий шаг нужен.
Отчёт и diff сохраняются в S3, статусы и ссылки — в БД. Они связаны с projectId, snapshotId, taskId, workspaceId и версией изменения. Диалог агента не является единственным хранилищем результата.
Как работает откат
В 0.1.0 восстановление заменяет всю рабочую копию выбранным снимком. Проверяем права, отсутствие другой активной операции и ожидаемую версию копии. Извлекаем снимок в новую временную папку, сверяем манифест и хеши и только после успеха переключаем рабочую область. При ошибке сохраняем предыдущую копию и явный статус сбоя. Историю попыток не удаляем.
Исходный снимок удерживаем от удаления в пределах срока восстановления; дополнительный архив оригиналов для каждого исправления не создаём. Созданные и удалённые файлы учитываются составом восстанавливаемого снимка.
Откат возвращает прежнее состояние копии, которое могло содержать уязвимость. Это не «возврат к гарантированно чистому сайту». Сроки хранения оригиналов и квоты нужно определить до запуска; контейнер не может быть единственным местом хранения данных восстановления.
Когда первый путь считается готовым
Синтетический сайт проходит всю цепочку через MCP, включая повторную проверку и восстановление. Отдельно проверены чужие идентификаторы, неполное скачивание, опасный архив, остановка исполнителя, повтор задачи, конфликт хешей и сбой записи.
Публикация на действующий сайт — следующий этап с отдельным разрешением, актуальным бекапом и проверкой работоспособности. В первый путь она не входит.