Files
app-autotest/DOCS/sonnet-params-and-audit.md

4.7 KiB
Raw Permalink Blame History

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:

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):

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+ версий