From f31bedfe056882725e6f1d3c8eb474071fd13537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 16 Jul 2026 14:48:10 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=B0=D1=83=D0=B4=D0=B8=D1=82=20lifecy?= =?UTF-8?q?cle=20=D0=BE=D1=82=20=D0=A1=D0=BE=D0=BD=D0=BD=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=20=E2=80=94=202=20=D0=BA=D1=80=D0=B8=D1=82.=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B3=D0=B0=20(HasError=20guard,=20not=5Fcreated)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/TODO/resource_generator_refactor_plan.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/TODO/resource_generator_refactor_plan.md b/docs/TODO/resource_generator_refactor_plan.md index 400bcad..4f4f18c 100644 --- a/docs/TODO/resource_generator_refactor_plan.md +++ b/docs/TODO/resource_generator_refactor_plan.md @@ -279,3 +279,43 @@ type PostgresClusterConfigurationModel struct { Подполя имеют `value_list` (например `replicas: [1,3,5,7]`, `version: ["17","16"]`). Генерация enum-валидаторов — на этом этапе не делать. Оставить на будущее. + +--- + +## Блок 5. Аудит lifecycle-логики (Соннет, 2026-07-16) + +**Вывод: база корректна, но есть 2 критичных бага.** + +### 5.1 — ПРОБЛЕМА A: нет HasError()-guard в Create (КРИТИЧНО) + +**Где:** `instance.go`, функция Create, строка ~260. + +После вызова `resp.Diagnostics.Append(resources_core.CreateExistingResourceDiagnosticsWithDomainAndServices(...))` +код сразу идёт к `CreateResourceWithTimeout` **без проверки `HasError()`**. + +При hard-error (running без adopt, suspend без adopt, not created) побочный API-вызов +всё равно выполнится — сайд-эффект уже случился. + +**Как должно быть:** после append диагностик — `if resp.Diagnostics.HasError() { return }`. + +### 5.2 — ПРОБЛЕМА B: not created → auto-delete+create (КРИТИЧНО) + +**Где:** `resources_core/crud.go`, `adoptExistingInstanceOnCreate`. + +Философия (раздел 8): `not created → hard error «проверьте ресурс в ЛК», без auto-create`. + +Но `adoptExistingInstanceOnCreate` при статусе `StateNotCreated` **авто-удаляет orphan и создаёт заново**. +В сочетании с Проблемой A этот destructive сайд-эффект может выполниться несмотря на ошибку в диагностиках. + +**Как должно быть:** либо убрать ветку (следовать философии), либо развести `not created` и `orphaned`. + +### 5.3 — Комментарий «returns warnings» (минор) + +`CreateExistingResourceDiagnostics` комментирует «returns warnings», но делает `AddError`. +Это корень путаницы с отсутствующим guard. Исправить комментарий. + +### Рекомендация Соннета: + +**Сначала закрыть A и B, потом продолжать SubParams.** +Строить вложенные параметры поверх Create, который выполняет сайд-эффекты +вопреки собственным диагностикам — рискованно.