From 4f7edc1200ac9dacd183984ccbdd63deddd38984 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Tue, 22 Sep 2026 18:51:00 +0300 Subject: [PATCH] =?UTF-8?q?docs(opus):=20prompt=20=D0=BF=D0=BE=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=D1=83=20=E2=80=94=20modify-=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE=D1=80=20=D1=81=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20create-?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=B2=20=D0=B4=D0=B5=D1=84=D0=BE?= =?UTF-8?q?=D0=BB=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt_for_opus_modifier_null_bug.md | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 prompt_for_opus_modifier_null_bug.md diff --git a/prompt_for_opus_modifier_null_bug.md b/prompt_for_opus_modifier_null_bug.md new file mode 100644 index 0000000..9fc6ed1 --- /dev/null +++ b/prompt_for_opus_modifier_null_bug.md @@ -0,0 +1,41 @@ +# Баг: modify-модификатор сбрасывает create-поля в дефолт (needEnableAVI true→false) + +## Симптом + +`nubes_vc_nsxt_network` (modifier vc_nsxt.network, modify 111) после create Edge с `needEnableAVI=true`, `virtualServicesCount=3` сбрасывает `needEnableAVI` на платформе обратно в `false`. + +## Подтверждено по API (cfsParams операций) + +Create Edge (op `0c169353`): +- 340 needEnableAVI = **true** +- 341 virtualServicesCount = **3** + +Modify (SNAT-модификатор, op `d14a149e`): +- 368 needEnableAVI = **null** +- 369 virtualServicesCount = **null** +- 856 qosProfile = **null** +- 372 ipSpaceName = internet-ipv4-v1 +- 1112 routedNetConfiguration = {...} + +Итоговый state.params Edge: `needEnableAVI = false`. + +## Гипотеза + +Модификатор строится через `resources_core.CompactParams`, который выбрасывает пустые `Optional`-поля. Бэкенд для `modify` трактует **пропущенный/null** параметр как «сбросить в дефолт» (false/0), а не «оставить как есть». Итог: modify с частичным payload затирает create-поля. + +## Файлы + +- `provider/internal/core/client.go` — `RunInstanceOperationUniversalByCode` (отправка params), `normalizeUniversalValueV6` +- `provider/internal/resources_core/crud.go` — `RunOperationByCodeWithTimeout`, `CompactParams` +- генератор: `TOOLS/resource-generator/internal/templates/modifier.go`, `internal/writers/writers.go` (WriteModifierResource) +- сгенерированное: `generated/dev/go/22_vc_nsxt_network_modifier.go` +- YAML: `generated/dev/resources_yaml/22_vc_nsxt.yaml` (modify 111, поля is_modifiable) + +## Задание + +Определить каноническое поведение: +1. Должен ли modify слать **все** параметры операции (полный payload, включая необязательные с их текущими значениями), или допустимо слать только переданные? +2. Где правильнее чинить: в генераторе (шаблоне modifier), в `CompactParams`, или в `RunInstanceOperationUniversalByCode` (досылать дефолты/текущие значения незаданных полей)? +3. Есть ли риск, что «досылать дефолты» сломает другие модификаторы (напр. vc_org.ip_space)? + +Ответ кратко, тезисно, с указанием конкретной строки/места фикса.