# 2026-07-31 — Сессия (v1.1.57 → ...) ## Контекст Обсуждение архитектуры: унификация ручного и сценарного режимов, гибкие ссылки на инстансы, новый UI редактора сценариев. ## Agent consultations ### Промпт для Opus Составлен `DOCS/opus-architecture-prompt.md` — полное описание проекта, дублирование CREATE-флоу, ограничение instance_map, вопросы по архитектуре. ### Ответ Opus — 19 уточняющих вопросов **A. Единый executor (operations/executor.py)** 1. Граница ответственности: executor делает всё до /run, поллинг — снаружи? 2. Обработка ошибок: исключения с типом или dict {ok, error, failed_step}? 3. Трекер: вызывать tracker_add внутри executor для create? Нужны ли сценарные инстансы в трекере? 4. _finish_op: остаётся в api_test.py или выносим в общий модуль поллинга? **B. Гибкие ссылки на инстансы** 5. Приоритет резолвинга: instance_uid > instance_ref > (для create — новый) 6. Где хранить output→uid: в памяти (instance_map) или в scenario_runs.instance_bindings? 7. Валидация _validate_steps: проверять ссылки на output, уникальность, обязательность 8. Обратная совместимость: поддерживать старый формат (service_id) или мигрировать? **C. Схема БД** 9. Формат в steps JSONB без изменений схемы? (подтверждено) 10. Использовать существующую колонку scenario_runs.instance_bindings? **D. UI редактора** 11. Модал vs inline — рекомендация: модал на весь экран 12. Переиспользовать renderParamRow из operations.js в общем модуле? 13. Pre-fill параметров: авто или по кнопке? 14. Формат параметров: символические имена в БД (как сейчас) или иное? **E. Оптимизация** 15. Вынести _find_uid/_uid_from_location в общий utils 16. Механизм восстановления зависших scenario_runs? 17. Ограничение lock_check: только один RUNNING сценарий — осознанное? 18. _op_results в памяти → мигрировать в БД/Redis? 19. Приоритет: бэкенд или UI редактора в первую очередь? ## Ключевые решения (отвечено DeepSeek) **A. Executor:** - A1. Граница: до /run включительно, без поллинга. Возвращает {instance_uid, op_uid, display_name} - A2. Ошибки: dict {ok, error, failed_step}, не исключения - A3. Трекер: да, tracker_add внутри executor для всех create - A4. _finish_op: оставить в api_test.py, цикл поллинга → operations/poll.py **B. Ссылки:** - B5. Приоритет: instance_uid > instance_ref > новый create - B6. Хранение: память + scenario_runs.instance_bindings - B7. Валидация: проверять ссылки, уникальность, обязательность - B8. Совместимость: оба формата, без миграции, fallback на service_id **C. БД:** - C9. Без изменений схемы - C10. Использовать instance_bindings **D. UI:** - D11. Модал на весь экран - D12. Общий модуль params-render.js - D13. Авто pre-fill, все параметры с defaults - D14. Символические имена в БД **E. Оптимизация:** - E15. _find_uid → api/utils.py - E16. Startup check: TIMEOUT для зависших >1ч - E17. lock_check оставить - E18. _op_results не в scope - E19. Порядок: executor → формат → api_test/scenario → UI