# TODO: разбить `provider/internal/core/client.go` Файл разросся до **1678 строк** — монолит, смешаны зоны ответственности. Разбить на отдельные файлы в пакете `core` (мелкими модулями). ⚠️ НЕ трогать без явной команды. Только рефакторинг-план. ## Предлагаемое разбиение | Файл | Зона ответственности | |---|---| | `client.go` | Core-структура `UniversalClient`, конструктор, `doRequest`, retry, `buildURL`, sanitize auth | | `client_http.go` | `doRequest`, `formatAPIError`, retry-логика, `User-Agent`/DDoS-Guard | | `instance_find.go` | `FindInstanceByDisplayName` (+search/fallback-пути, `isInstanceDeleted`, `isInstanceDeletedError`) | | `instance_state.go` | `GetInstanceStateRaw`, `GetInstanceState`, `GetInstanceStateParams`, `GetInstanceStateDetails`, `validateInstanceStatus` | | `instance_create.go` | `CreateGenericInstanceUniversalV6`, `createInstanceWithContext` | | `instance_operation.go` | `RunInstanceOperationUniversal`, `RunInstanceOperationUniversalWithDefaults`, `RunInstanceOperationUniversalByCode`, `RunRedeployOperation`, `fetchOperationCfsParams` | | `operation_wait.go` | `waitForOperationFinish`, `waitForInstanceIdle`, печать этапов | | `params_ref.go` | `resolveRefSvcParamValues`, `resolveRefSvcParams`, `ResolveRefSvcParamValue`, `ResolveS3UidInAllMapFixed` | | `params_norm.go` | `normalizeUniversalValueV6`, `buildMapFixedDefault`, `normalizeInstanceParamValue` | | `instance_output.go` | (уже вынесено отдельно) `instance_outputs.go` | | `instance_params.go` | (уже отдельно) `instance_params.go` | ## Уже вынесено (не трогать) - `instance_params.go` - `instance_outputs.go` - `refsvc_resolve.go` ## Правила при рефакторинге 1. Только перенос функций — без изменения логики (чистый move). 2. Сохранить `debug(...)`-логи и комментарии `// НЕ МЕНЯТЬ`. 3. `go build ./... && go vet ./internal/core/` после каждого шага. 4. Коммит после каждого вынесенного блока (правило «коммит после каждой правки»).