docs: agent analysis request — full project overview for new chat

This commit is contained in:
2026-07-30 14:32:31 +04:00
parent de560cb066
commit 6e2418b157
3 changed files with 445 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
# Sol — ответы по редактору сценариев
Дата: 2026-07-30
## 1. Структура `steps`
- JSONB массив, отдельная таблица не нужна
- Обязательно поле `resource` — идентификатор инстанса внутри сценария (для связи create→modify→delete)
- `scenario_definitions`: + `version INTEGER`, `updated_by`, `is_active`/`deleted_at`, уникальность имени case-insensitive
- `scenario_runs`: + `definition_id`, `definition_version`, `steps_snapshot`
- Runner работает со snapshot, не перечитывает определение
## 2. Параметры в редакторе
- Из Nubes API: сервис→операции→`/instanceOperations/default/{opId}`→коды
- Выпадающий список с типом, обязательностью, default
- Map/array — JSON-строка с валидацией
- Кеш: браузерный на время сессии редактора ИЛИ серверный (stand+opId, TTL 5 мин)
- Свободный ввод кода не нужен
## 3. Seed из config.yaml
- Не импортировать при каждом пустом старте
- Схема: marker импорта → `INSERT ON CONFLICT DO NOTHING` → marker `scenario_seed_v1=completed`
- YAML вынести в `scenario_seed.yaml`, после rollout удалить
- Остальной config.yaml не трогать
## 4. UI редактор
- Модальное окно или боковая панель (не inline)
- Имя, список шагов, сервис, операция, параметры
- Кнопки добавить/удалить/вверх/вниз
- Drag-and-drop не нужен
- Мягкое удаление: `is_active=false`
## 5. Валидация
- При сохранении: структура, существование сервиса, доступность операции, коды параметров, типы, уникальность resource, порядок (create→modify→delete, после delete ничего)
- При запуске: повторить по актуальному API
- Невалидный сценарий не запускать частично
## 6. Критически упущенное
1. `POST /api/scenario/run` не возвращает run ID — гонка при двух запусках. Создавать запись ДО thread, вернуть HTTP 202 + run_id
2. Нужен `GET /api/scenario/runs/<id>` — поллинг конкретного запуска
3. `save_run()` не пишет `scenario_run_id` и `step_number` — шаги не связаны со сценарием
4. TIMEOUT: `op_data` может быть неинициализирована
5. Шаг нужно создавать в `runs` со статусом RUNNING ДО обращения к API, потом обновлять
6. Блокировка параллельных запусков: HTTP 409 для одного client_id+stand
7. CRUD: проверять `client_id+stand` при всех операциях
8. `version` в definitions: PUT с текущей version, 409 при конфликте
9. Runner использует персональный токен — нужен сервисный токен/клиент по stand
10. Имя не идентификатор: API запуска принимает `definition_id`, имя — редактируемое поле