From 4ee0433e281d64145549b3cbbf145df01a171d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sun, 2 Aug 2026 07:30:00 +0400 Subject: [PATCH] =?UTF-8?q?doc:=20=D0=BF=D1=80=D0=BE=D0=BC=D0=BF=D1=82=20?= =?UTF-8?q?=D0=A1=D0=BE=D0=BD=D0=BD=D0=B5=D1=82=D1=83=20=E2=80=94=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D1=8F=20=D1=81=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BD=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20Polygon=20=E2=86=94=20Nubes=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- polygon-docs/sonnet-compare-testing-prompt.md | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 polygon-docs/sonnet-compare-testing-prompt.md diff --git a/polygon-docs/sonnet-compare-testing-prompt.md b/polygon-docs/sonnet-compare-testing-prompt.md new file mode 100644 index 0000000..7e51f30 --- /dev/null +++ b/polygon-docs/sonnet-compare-testing-prompt.md @@ -0,0 +1,92 @@ +# Соннет: анализ сравнительного тестирования Polygon ↔ реальный Nubes API + +> Адресат: Claude Sonnet 4.6 (новый чат) +> ⛔ Режим: **диалог**. Задавай встречные вопросы если нужно уточнение. +> ⛔ НЕ редактировать файлы. Только анализ и советы в чат. + +--- + +## Контекст + +**Polygon** (v0.5.4) — эмулятор REST API облачной платформы Nubes. +3 стенда: dev (37 сервисов), test (37), prod (35). YAML-конфиги генерируются +из терраформ-репы (`~/tf_provider/generated/{dev,test,prod}/resources_yaml/`). + +**Реальное API**: +- `https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc` +- `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc` +- `https://lk-api-gateway.ngcloud.ru/api/v1/svc` + +Токены в `secrets/{dev,test,prod}.token`. + +## Что сделано + +Написан скрипт `compare_test.py` который сравнивает read-only эндпоинты +полигона и реального API: +- `GET /services` — список сервисов +- `GET /services/{id}` — операции (svcOperationId, operation, kind, action) +- `GET /instanceOperations/default/{id}` — cfsParams (id, код, dataType, isRequired) + +Первый прогон показал: +- **dev**: операции совпадают, но у 2 параметров `dataType: None` вместо `"string"` +- **test**: аналогично +- **prod**: чисто, расхождений нет + +Также обнаружено что реальный API возвращает HTML-entities в dataType +(`integer >= 0`), а полигон — чистый текст (`integer >= 0`). +Полигон здесь правильнее реального API. + +## Ключевой нюанс: идеология стендов + +Стенды НЕ идентичны. **Dev опережает test, test опережает prod**. +Новые сервисы и параметры появляются сначала в dev, потом через какое-то +время попадают в test, и только затем в prod. Поэтому: + +- Если в dev-полигоне и dev-реальном API есть расхождения — это может быть + нормально (реальный API уже обновился, а YAML в полигоне — ещё нет) +- Если в prod есть расхождения — скорее всего баг в генерации YAML +- Нужно различать «допустимое отставание» и «реальный баг» + +## Что нужно от тебя + +### 1. Стратегия сравнительного тестирования + +Как правильно сравнивать полигон с реальным API учитывая что: +- Стенды могут и должны отличаться +- YAML генерируется не в реальном времени, а батчами из терраформа +- Некоторые сервисы есть в реальном API но НЕ в терраформе (их не тестируем) + +Что должно считаться PASS, а что FAIL? Какие допуски? + +### 2. Какие ещё эндпоинты сравнивать? + +Сейчас сравниваются 3 read-only эндпоинта. Какие ещё можно безопасно +сравнять? Что ещё есть в реальном API такого что полигон должен +повторять один-в-один? + +### 3. Периодичность и автоматизация + +Как часто запускать сравнение? При каких событиях (изменение терраформа, +деплой полигона)? Должно ли это быть частью CI? + +### 4. dataType: None + +В `from_stands.py` для некоторых параметров dataType падает в None +(хотя дефолт "string"). Где конкретно искать причину? + +### 5. Общие советы + +Что ещё мы упускаем в тестировании полигона? Какие сценарии, краевые +случаи, проверки контрактов? + +--- + +## Формат диалога + +Ты можешь: +- Сразу дать развёрнутый ответ по всем пунктам +- Или задать уточняющие вопросы — и тогда я отвечу, а ты продолжишь + +Я хочу чтобы в итоге получился **конкретный план действий**: +что тестировать, как часто, что считать ошибкой, что — допустимым +расхождением.