# Prompt for Opus — subresource duplicate/exist + state_out ## Файлы для анализа Только эти: - `/home/naeel/tf_provider/provider/internal/resources_core/subresource_guard.go` — ВЕСЬ - `/home/naeel/tf_provider/generated/test/go/90_postgres_database_resource.go` — Create (строки 130-250) - `/home/naeel/tf_provider/artifacts/output_inventory/running_suspended_output_fields_for_docs.json` — PostgreSQL (svc 90), строки 190-575 ## Контекст После повторного apply subresource `pg_user_5` упал: ``` Операция вернула duplicate/exist, но объект не найден в state_out ``` ## Найденная причина - PostgreSQL `state_out` НЕ содержит `databases` и `users` (там только `externalConnect, internalConnect, monitoring`) - `SubresourceListKey("database")` → эвристика `name+"s"` → ищет ключ `"databases"` в state_out → `known=false` - Create-обработка duplicate требует `known && found` для adopt → `known=false` → всегда падает - Adopt subresource'а для PG **физически невозможен** через текущий механизм ## Конкретные вопросы ### Вопрос 1 (ПРИОРИТЕТ) `subresource_guard.go` — `FindSubresourceInStateOut`: - При `known=false` (ключа нет в state_out) — как должен вести себя duplicate/exist? - Сейчас: AddError "Нарушена консистентность" - Предлагаемое: доверять API-ошибке `already exists`, считать adopt успешным, вернуть существующий ID - Верно? Или нужен другой подход? ### Вопрос 2 `SubresourceListKey` / `SubresourceIdentityKey` в `subresource_guard.go`: - Эвристики `name+"s"` и special-map на 2 сервиса - Нужен ли явный маппинг ключей из YAML/метаданных API вместо угадывания? - Где в API взять реальные имена ключей state_out для каждого сервиса? ### Вопрос 3 Есть ли в API эндпоинты для прямого запроса списка subresource'ов (list_databases, list_users) — чтобы не полагаться на state_out? ### Вопрос 4 `IsSubresourceAlreadyExistsError`: - Маркеры: `уже существует`, `already exists`, `duplicate`, `conflict` - Достаточно? Нужно ли добавить `409` (HTTP status), `exist`, `already exist`? ## Формат ответа На каждый вопрос: ДА/НЕТ + код (файл:строка) + конкретное исправление. Не читай другие файлы.