Files
autotest/HISTORY/2026-08-03-session.md
T

96 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-08-03-session — Полигон: интеграция, баг с сервисами
## Контекст
Сессия началась с чтения двух файлов AI-агентом:
- `AGENT_BRIEFING.md` — контекст app-autotest (v1.2.28)
- `polygon-docs/POLYGON-FULL.md` — полное описание полигона (v0.5.9)
jsonEnv автотеста на проде:
```json
{
"POLYGON_ENDPOINT": "https://polygon.pythonk8s.dev.nubes.ru/api/v1/svc",
"NUBES_API_ENDPOINT": "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
}
```
## Архитектурное решение: разделение сервисы/инстансы
**Зафиксировано (2026-08-03):**
| Режим | Сервисы (метаданные) | Инстансы |
|--------|---------------------|-----------|
| Без полигона | Реальный API | Реальное облако |
| С полигоном | Реальный API | Виртуальные (полигон) |
`POLYGON_ENDPOINT` подменяет ТОЛЬКО инстансы/операции. Сервисы — это «справочник», всегда из реального API.
### Где это в коде
`auth.py:_make_client(use_polygon)`:
- `use_polygon=True``get_client()`: если `POLYGON_ENDPOINT` задан → полигон, иначе → `NUBES_API_ENDPOINT`
- `use_polygon=False``get_real_client()`: **всегда** `NUBES_API_ENDPOINT`
## Баг: «нет сервисов» при POLYGON_ENDPOINT
### Причина
Цепочка:
1. `get_stand()``"polygon"` (auth.py:141, POLYGON_ENDPOINT задан)
2. `load_service_ids("polygon")``services_polygon.txt` не существует → пустой `set`
3. `sorted(пустой_set)``[]`
4. Шаблон `index.html:81`: `{% if svc.svcId in config.service_ids %}``svc.svcId in []`**всегда False** → ни один сервис не показывается
Хотя `get_real_client()` корректно получает сервисы из реального API, фильтр в шаблоне убивает весь список.
### Исправление (v1.2.29)
Шаблон `index.html:81`: добавить `or not config.service_ids`:
```jinja2
{# Было #}
{% if svc.svcId in config.service_ids %}
{# Стало #}
{% if not config.service_ids or svc.svcId in config.service_ids %}
```
Это соответствует изначальному замыслу `load_service_ids`: «пустой set → показываем все».
---
## Фаза 2: селектор режима и стенда (v1.2.30)
### Требования
1. **Селектор режима** над версией: 🎭 Эмуляция / ☁️ Облако (только если POLYGON_ENDPOINT задан)
2. **Селектор стенда** (DEV/TEST/PROD) — только в режиме эмуляции
3. **По умолчанию:** эмуляция + TEST
4. **В эмуляции:** токен дезактивирован
5. **В облаке:** стенд автоопределяется по токену (как раньше)
6. При смене режима/стенда → сервисы обновляются
### Новая архитектура
| Режим | Сервисы | Инстансы | Стенд |
|--------|---------|----------|-------|
| Эмуляция | Полигон (/{stand}/api/v1/svc) | Полигон | Выбор (dev/test/prod) |
| Облако | Реальный API | Реальный API | Авто (токен→dev/test) |
В эмуляции **всё** идёт в полигон — и сервисы, и инстансы. Полигон имеет полный набор эндпоинтов (/services, /instances, /instanceOperations).
`get_real_client()` упраздняется — становится алиасом `get_client()`.
### Cookie
- `mode``"polygon"` (по умолчанию) или `"cloud"`
- `polygon_stand``"test"` (по умолчанию), `"dev"`, `"prod"`
### Изменённые файлы
1. **`auth.py`** — новые функции `get_mode()`, `get_polygon_stand()`; `get_token()` в режиме полигона только env-токен; `get_client()` строит URL с префиксом стенда; `get_real_client()` → алиас
2. **`main.py`** — `action=set_mode` (cookie), single `get_client()` вместо real_client/inst_client, переменные `mode`/`polygon_stand`/`polygon_enabled`
3. **`index.html`** — селекторы над версией, disable токена в эмуляции
4. **`service_list.py`** — обрезать `polygon_` префикс
5. **`api_test.py`** — `get_real_client()``get_client()`