67 lines
3.5 KiB
Markdown
67 lines
3.5 KiB
Markdown
# 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-<svcShort>-<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)
|