From b26332fbe7a0349abfc8c849b24c245129683c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 30 Jul 2026 13:20:19 +0400 Subject: [PATCH] =?UTF-8?q?docs:=2014=20questions=20to=20Sol=20=E2=80=94?= =?UTF-8?q?=20discuss=20before=20implementing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DOCS/questions-to-sol.md | 59 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 DOCS/questions-to-sol.md diff --git a/DOCS/questions-to-sol.md b/DOCS/questions-to-sol.md new file mode 100644 index 0000000..38131d3 --- /dev/null +++ b/DOCS/questions-to-sol.md @@ -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 должны работать как раньше. Где самое узкое место?