docs: agent analysis request — full project overview for new chat
This commit is contained in:
@@ -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`, имя — редактируемое поле
|
||||
Reference in New Issue
Block a user