# Архитектура app-autotest — план рефакторинга (2026-07-31) > Полный план: `DOCS/opus-plan-2026-07-31.md` > Ветка: `opus-architecture-2026-07-31` ## Проблемы 1. **Дублирование CREATE-флоу:** `routes/api_test.py` и `operations/scenario.py` содержат идентичную логику POST /instances → POST /instanceOperations → send_params_terraform → /run. 2. **Ограничение instance_map:** сценарий привязан к `service_id`, нельзя два инстанса одного сервиса. 3. **Нет общей функции** — правки Terraform-флоу надо делать в двух местах. ## Решение ### Новые файлы - `operations/executor.py` — `execute_operation()` (единый флоу до /run) - `operations/poll.py` — `poll_until_done()` (общий цикл поллинга) - `api/utils.py` — `find_uid()`, `uid_from_location()` (вместо дублей) - `static/js/params-render.js` — общий рендер параметров ### Новый формат шагов ```json {"service_id": 1, "operation": "create", "params": {}, "output": "d1"} {"service_id": 1, "operation": "modify", "params": {}, "instance_ref": "d1"} {"service_id": 1, "operation": "delete", "params": {}, "instance_uid": "UUID"} ``` ### Исправляемые файлы - `routes/api_test.py` — через executor (+ CMDB delete отдельно) - `operations/scenario.py` — через executor + poll_until_done + output/ref резолвинг - `routes/api_scenario_defs.py` — _validate_steps с новыми ключами - `db/init_db.py` — startup cleanup зависших scenario_runs - `static/js/scenario-form.js` — модальный редактор с параметрами - `static/js/operations.js` — использовать params-render.js - `templates/index.html` — модал + params-render.js - `app.py` — bump VERSION ### Порядок Фаза 1 (общие модули) → Фаза 2 (формат шагов) → Фаза 3 (миграция вызывающих) → Фаза 4 (UI)