From 2c35ed5307e9006291fa2e0f57c87753b3aaf132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 30 Jul 2026 07:32:13 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20Sonnet=20question=20=E2=80=94=20paramet?= =?UTF-8?q?erized=20operations=20+=20full=20audit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DOCS/sonnet-params-and-audit.md | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 DOCS/sonnet-params-and-audit.md diff --git a/DOCS/sonnet-params-and-audit.md b/DOCS/sonnet-params-and-audit.md new file mode 100644 index 0000000..c18c8c7 --- /dev/null +++ b/DOCS/sonnet-params-and-audit.md @@ -0,0 +1,85 @@ +# Sonnet 4.6 — Полный анализ: параметризованные операции инстанса + поиск багов + +Дата: 2026-07-30 +Версия: v1.1.36 + +## Контекст + +Flask 3.0 + gunicorn + vanilla JS. Тестирует Nubes REST API. + +PostgreSQL создался успешно. Но при попытке `create_user` — ошибка: параметры не были запрошены у пользователя, отправлен пустой `{}`. + +## 🔴 Проблема 1: runOp() не показывает форму параметров для не-modify операций + +**Файл:** `/home/naeel/nubes/autotest/app-autotest/site/static/app.js`, функция `runOp()`, строка 127: + +```javascript +function runOp(opName,opId){ + if(busy) return; + stopPoll(); + selectedOp={opId,opName,svcId:currentSvcId}; + if(opName==='modify'){ + showParams(opId,opName); // ← только modify показывает форму + }else{ + // confirm and execute immediately + if(!confirm(`Запустить ${opName} для ${findInstName()}?`)) return; + executeOp({}); // ← пустые params → API ругается "Missing required parameter" + } +} +``` + +**Проблема:** PostgreSQL имеет много операций с параметрами: +- `create_user` — нужен username +- `delete_user` — нужен username +- `create_database` — нужны параметры БД +- `delete_database` — нужны параметры +- `restart` — может иметь параметры +- `recovery` — параметры восстановления +- `create_backup` — параметры бэкапа + +Все они сейчас идут с `executeOp({})` — пустые params. + +**Операции БЕЗ параметров** (можно confirm → execute): +- `delete` +- `suspend` +- `resume` +- `redeploy` +- `reconcile` + +**Вопрос:** Как универсально определить, нужны ли параметры для операции? +- Вариант А: проверять `cfsParams` в `/api/operations/{svcId}` — если есть params → показать форму +- Вариант Б: список известных "безпараметровых" операций (delete/suspend/resume/redeploy/reconcile) — для них confirm, для остальных — showParams +- Вариант В: всегда показывать форму (showParams сам разберётся если params пустые) + +## 🔴 Проблема 2: refreshInstances() ДОЛЖЕН обновлять список инстансов после create_user и подобных + +После `create_user` инстанс не меняется, но список инстансов всё равно надо обновить (в UI могут быть связанные изменения). Сейчас `refreshInstances()` вызывается только при `sd.status === 'OK'`. + +**Файл:** `/home/naeel/nubes/autotest/app-autotest/site/static/app.js`, executeOp polling (строка ~357): +```javascript +if(sd.status==='OK'){ + await refreshInstances(); // только при OK +} +``` + +**Вопрос:** Нужно ли вызывать refreshInstances при любом завершении (OK или FAIL)? + +## Полный аудит всех оставшихся проблем + +Пожалуйста, прочитай ВСЕ файлы и найди ЛЮБЫЕ оставшиеся баги или неустойчивости: + +**Файлы для проверки:** +- `/home/naeel/nubes/autotest/app-autotest/site/static/app.js` — весь фронтенд +- `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py` — бэкенд +- `/home/naeel/nubes/autotest/app-autotest/site/routes/main.py` — главная + /api/operations +- `/home/naeel/nubes/autotest/app-autotest/site/api/http_client.py` — HTTP-клиент +- `/home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py` — параметры +- `/home/naeel/nubes/autotest/app-autotest/site/templates/index.html` — HTML шаблон + +**Что искать:** +1. Все места где параметры операций не запрашиваются у пользователя +2. Все места где busy lock может застрять +3. Необработанные ошибки (пустые catch, пропущенные исключения) +4. Несоответствия между JS и бэкендом (разные имена полей, форматы) +5. Проблемы с `currentSvcShort` — где объявлена, где используется +6. Любые другие баги которые мы пропустили за 35+ версий