diff --git a/DOCS/sonnet-final-audit.md b/DOCS/sonnet-final-audit.md new file mode 100644 index 0000000..0a4c4c0 --- /dev/null +++ b/DOCS/sonnet-final-audit.md @@ -0,0 +1,68 @@ +# Sonnet 4.6 — Финальный аудит: баги и действия пользователя + +Дата: 2026-07-30 +Версия: v1.1.43 + +## Контекст + +За 2 дня: 43 версии. Множество правок. Только что нашли баг — в `toggleInstance` удалили `const opsEl = ...` при рефакторинге, упало с ReferenceError. Нужно найти ВСЕ подобные баги. + +## Файлы для проверки (ВСЕ) + +- `/home/naeel/nubes/autotest/app-autotest/site/static/app.js` — 460 строк, весь фронтенд +- `/home/naeel/nubes/autotest/app-autotest/site/routes/api_test.py` — бэкенд +- `/home/naeel/nubes/autotest/app-autotest/site/templates/index.html` — HTML/CSS +- `/home/naeel/nubes/autotest/app-autotest/site/api/http_client.py` — HTTP-клиент +- `/home/naeel/nubes/autotest/app-autotest/site/operations/get_params.py` — параметры + +## Что искать + +### 1. ReferenceError / undefined variables +- Все ли переменные объявлены перед использованием? +- `opsEl`, `svcEl`, `btnSpan`, `inst`, `afterEl` — все ли определены в своей области видимости? + +### 2. Все действия пользователя при busy=true +Проверь КАЖДУЮ функцию — не вызывает ли она `stopPoll()` до проверки `busy`? Не меняет ли DOM (stages-box, params-area) до проверки? + +Функции для проверки: +- `toggleInstance(iuid)` — строка 76 +- `selectService(svcId)` — строка 39 +- `startCreate()` — строка 106 +- `runOp(opName,opId)` — строка 128 +- `showParams(opId,opName)` — строка 146 (вызывается из runOp, startCreate) +- `executeOp(params)` — строка 307 +- `setFinishedState(...)` — строка 286 +- `refreshInstances()` — строка 389 +- `toggleHistory()` — строка 410 +- `toggleLog()` — строка 456 + +### 3. Пустые catch / потерянные ошибки +- `showParams` — есть `.catch()` ✅ +- `executeOp` — есть `catch(e)` + busy ✅ +- `loadHistory` — есть `catch(e)` ✅ +- `startCreate` — есть `catch(e)` с fallback ✅ +- Поллинг в executeOp — `catch(e)` со счётчиком ✅ +- Есть ли другие `try/catch` или `fetch().then()` без обработки ошибок? + +### 4. busy не сбрасывается +Все ли пути выхода из `executeOp` сбрасывают `busy=false`? +- FAIL: `busy=false` + return ✅ +- CMDB OK: `busy=false` + setFinishedState ✅ +- Поллинг завершился: `setFinishedState` → `busy=false` ✅ +- catch: `busy=false` ✅ +- Сетевая ошибка в поллинге: счётчик → `setFinishedState` ✅ + +### 5. DOM-элементы +- Все ли `getElementById` ссылаются на существующие ID в index.html? +- `ops-${iuid}` — генерируется динамически в `selectService` и `refreshInstances` +- `param-displayname` — генерируется в `showParams` +- Все ли статические ID присутствуют? + +### 6. Параметры операций +- `runOp` → `showParams` — правильно ли для ВСЕХ типов операций? +- `showParams` → `opHeader` для не-create — показывается всегда ✅ +- `showParams` → `createHeader` для create — показывается ✅ +- Пустые params → `opHeader` + кнопка «Запустить» ✅ + +### 7. Любые другие баги +Что ещё могло сломаться за 43 версии?