docs: 14 questions to Sol — discuss before implementing

This commit is contained in:
2026-07-30 13:20:19 +04:00
parent 3f653a7205
commit b26332fbe7
+59
View File
@@ -0,0 +1,59 @@
# Вопросы к Sol — обсуждение MVP
## executor
**Q1: Зачем выносить executor из api_test.py прямо сейчас?**
Сейчас 9-шаговая логика работает в api_test. Вынос — рефакторинг с риском. Почему не обернуть api_test в вызов из runner, а вынос сделать фазой 2?
**Q2: executor внутри того же gunicorn-воркера или отдельный процесс?**
Сценарий может идти 10-30 минут. Блокирует ли он воркера на всё это время?
## YAML
**Q3: Параметры — code или numeric ID?**
`code: cpu, value: "500"` читаемо но требует резолва через API. `svcOperationCfsParamId: 104, value: "500"` — работает сразу, но нечитаемо. Что предлагаешь?
**Q4: lifecycle persistent — как найти «тот самый» instance?**
По `displayName == "autotest-postgres-permanent"`? А если кто-то переименовал? А если два сценария создали с одинаковым именем?
**Q5: cleanup `always` — что чистить если create упал?**
Если create вернул ошибку, instanceUid пустой. Что удалять?
## CMDB DELETE
**Q6: Почему удалить CMDB DELETE?**
Nubes API не умеет удалять not-created инстансы. Без CMDB у пользователя нет способа удалить битые инстансы кроме ручного UI облака. Может оставить с логом, а не удалять?
## БД
**Q7: Зачем три таблицы?**
Предлагаешь `scenario_runs` + `scenario_steps` + доп колонки в `runs`. Почему не две (`scenario_runs` + `scenario_steps`) и не менять `runs`? Каждый шаг уже пишет в `runs` через `save_run`.
**Q8: heartbeat — через БД? UPDATE каждые N секунд?**
Не убьёт ли это PostgreSQL при частых сценариях?
## UI
**Q9: Вкладки — зачем?**
Сейчас всё на одном экране. Добавление вкладок раздувает UI. Почему не добавить секцию «Сценарии» под списком инстансов?
**Q10: Запрет innerHTML для error/log — почему?**
Сейчас весь вывод идёт через `_esc()`. Что конкретно не экранируется?
## Prod policy
**Q11: Почему такая сложная политика для MVP?**
Проверка org UID, ClientID, allowlist delete, quarantine, purge_not_before — это не MVP. Почему не просто `if stand == "prod": return "заблокировано"` на первом этапе?
## Legacy
**Q12: config.yaml — что в нём ценного?**
Ты предлагаешь удалить. Но там могут быть настройки которые пригодятся. Что именно предлагаешь перенести в app.py?
## Общие вопросы
**Q13: Порядок шагов — почему именно такой?**
Почему удаление legacy (шаг 1) до создания executor (шаг 2)? Если executor зависит от кода в api_test, удаление api.py/runner.py безопасно делать первым?
**Q14: Риски совместимости — ручной UI не сломается?**
После всех изменений ручные операции в UI должны работать как раньше. Где самое узкое место?