docs(history): UUID-регистр — процедура релиза и карта точек нормализации

Перенесено из служебной памяти VS Code в файл репозитория:
- пошаговая процедура релиза dev (VERSION → 03 → curl-проверка → VERSIONS.md →
  dev-materialize), включая, что доки в реестр не публиковались;
- карта: нормализация нужна в двух местах (сравнение и отправка BuildJSON),
  перечень функций и правила (lower() — костыль; план целиком не нормализуем).
This commit is contained in:
Repinoid
2026-09-30 10:32:22 +03:00
parent 89bfb46b1c
commit 46dc548af4
@@ -78,6 +78,47 @@ create / modify / redeploy (19 сгенерированных ресурсов,
`DEV_STAND/FullPipe/shturval.tf1:123` передают `nubes_vc_vdc.vdc.id` / `DEV_STAND/FullPipe/shturval.tf1:123` передают `nubes_vc_vdc.vdc.id` /
`nubes_vc_nsxt.edge.id` напрямую → на create у них тот же риск. `nubes_vc_nsxt.edge.id` напрямую → на create у них тот же риск.
## Процедура релиза (dev) — воспроизводимо (проверено 30.09.2026)
1. Поднять `VERSION` в `TOOLS/config/dev/profile.env` и закоммитить
(иначе доки генерируются со старой версией).
2. Собрать и залить:
```bash
./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev 2.0.24
```
Скрипт сам выполняет шаги `01` + `02`, собирает 3 платформы
(linux/windows/darwin amd64), подписывает GPG и заливает в S3.
3. Проверить публикацию:
```bash
curl -s https://tf-registry.containerk8s.services.ngcloud.ru/v1/providers/nubes-dev/nubes/versions
```
4. Обновить `VERSIONS.md` и закоммитить.
5. Для локального `go build`/`go test`: `02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev`
и `TOOLS/scripts/dev-materialize.sh dev` (эфемерная копия в `provider/`).
⚠️ Доки в реестр (шаг `04_build_and_publish_docs.sh`) в этом релизе **не публиковались**.
## Где нормализация нужна (карта, чтобы не потерять)
Нормализация регистра UUID нужна в **двух независимых местах**:
1. **Сравнение** (план ↔ state, adopt, suspend/resume, modifier-compare, диагностика):
`jsonutil.LowercaseUUIDsInText` → `JSONStringsEquivalent`, `JsonNormalize()`,
`ParamsMatchForResume`, `normalizeCompareValue`.
2. **Отправка в API** — единственная точка `resources_core.BuildJSON`
(`provider/internal/resources_core/helpers.go`), вызывается сгенерированным кодом
через `NestedJSONExpr` (`TOOLS/resource-generator/internal/templates/instance.go`:
Create ~302, Modify ~488, Redeploy ~505).
Правила:
- ⛔ `lower(...)` в HCL — костыль, а не решение (был нужен только из-за ненормализованной отправки).
- ⛔ Не нормализовать план целиком (скаляры→строки, сортировка ключей) — вечный diff;
менять только регистр UUID-подстрок.
- `resolveRefSvcParamValues` (`core/refsvc.go`) покрывает только top-level `refSvcId`
и `s3.*uid` внутри map-fixed; `vdcUid`/`nsxtUid` — нет.
- Спеки map-fixed без строковых секретов (только `*Uid`) → regex `uuidAnywhereRegex` безопасен.
## Открытые вопросы (не закрыты) ## Открытые вопросы (не закрыты)
1. Проверить на живом стенде: create кластера Штурвала **без** `lower(...)` на сборке 1. Проверить на живом стенде: create кластера Штурвала **без** `lower(...)` на сборке