diff --git a/DOCS/sonnet-review-round2.md b/DOCS/sonnet-review-round2.md new file mode 100644 index 0000000..078bfa5 --- /dev/null +++ b/DOCS/sonnet-review-round2.md @@ -0,0 +1,66 @@ +# Sonnet 4.6 — Round 2: оставшиеся баги и план исправлений + +Дата: 2026-07-29 +Контекст: v1.1.12 уже починил NameError и JS error handling. Сейчас v1.1.13 (мелкие UI-фиксы). + +## Баги к исправлению + +### 🔴 Баг 1: Инстансы всех сервисов показываются под любым выбранным + +**Файл:** `site/routes/main.py`, строка 193-194, функция `api_operations(svc_id)` + +```python +for i in instances: + display_name = str(i.get("displayName", "") or "") + if not display_name.startswith(AUTOTEST_PREFIX): + continue # не наш инстанс + # ← НЕТ проверки i.get("serviceId") != svc_id +``` + +Фильтр только по префиксу `autotest-`, без проверки что `instance.serviceId == svc_id`. +Результат: под сервисом «Container Registry» показываются S3 бакеты, под «Redis» — Flask инстансы. + +**Предлагаемый фикс:** добавить `if i.get("serviceId") != svc_id: continue` + +### 🟡 Задача 2: displayName → autotest--<3rand> + +Сейчас: `autotest-ms4gzydq` (timestamp base36) +Нужно: `autotest-redis-x7k` + +**Данные:** API `/services/{id}` возвращает `svcShort=redis` + +**План:** +1. `main.py` `/api/operations/{svc_id}` — добавить `svcShort` в JSON-ответ (из `get_service_detail`) +2. `app.js` `selectService()` — сохранить `currentSvcShort = d.svcShort` +3. `app.js` `makeCreateDisplayName()` — `autotest-${currentSvcShort}-${3rand}` +4. Коллизии обрабатываются в `_unique_display_name()` на бэкенде + +### 🟡 Задача 3: description (descr) при создании + +HAR-файл (`development/dummycreate.har`) показывает что Nubes API принимает `descr`: +```json +POST /instances +{"serviceId":1, "displayName":"dummy-11255555", "descr":""} +``` + +В autotest `api_test.py` строка 212 уже шлёт `"descr": ""` — пустое. Нужно заполнить: +``` +"descr": "created by autotest v1.1.13" +``` + +**План:** +1. `app.js` `executeOp()` — передать `descr` в тело запроса +2. `api_test.py` `/api/test` — принять `descr` из JSON, подставить в payload + +## Вопросы к Sonnet + +1. Верен ли план для бага 1? Не сломает ли фильтр по serviceId tracker-fallback логику? +2. Для задачи 2: как лучше генерировать 3 случайных символа? `Math.random().toString(36).slice(2,5)`? Не будет ли коллизий? +3. Для задачи 3: `descr` уже есть в payload. Достаточно ли просто подставить строку, или нужно что-то ещё? +4. Есть ли ещё какие-то баги, которые мы упустили? +5. `api_test.py` содержит ДУБЛИКАТ эндпоинта `/api/operations/{svc_id}` (строка 108-148), который никогда не вызывается из-за порядка регистрации blueprint'ов. Удалить ли его, или он нужен для чего-то? + +**Файлы для проверки (только эти):** +- `site/routes/main.py` (строки 155-230) +- `site/routes/api_test.py` (строки 108-148, 195-280) +- `site/static/app.js` (строки 85-130, 240-270)