3.5 KiB
3.5 KiB
Ревью плана реализации: редизайн модификаторов
Прошу отревьюить план PLAN_modifier_redesign.md (10 шагов). Это проект к реализации,
не код. Вызовись: найди дыры, пропущенные кейсы, ошибки в порядке шагов, нестыковки.
Контекст решения (уже согласовано, НЕ пересматривать)
- Модификатор = декларативная проекция полей родителя, единый
reconcile()(Create≡Update). - Полный payload (не дельта), досылка: задан→значение, иначе live→default→skip.
delete_strategy: noop_warn | inverse | error (дефолт noop_warn),idempotency: none | check_before_run.- Pre-check
desired==currentвcore(не в resources_core, не в шаблоне), по живомуstate_params. is_modifiable— единственный сигнал изменяемости (фикс CreateOnly уже есть).
Ключевые файлы-факты (сверены с кодом)
TOOLS/lib/types.go—OperationSpec/ParamSpec(алиасы в обоих генераторах).TOOLS/yaml-generator/main.go—serviceSpecificModifiers(реестр исключений, источник канона).TOOLS/resource-generator/internal/loader/loader.go— веткаkind==modifier,ValidateSpec.TOOLS/resource-generator/internal/templates/modifier.go— шаблон.provider/internal/resources_core/crud.go—RunOperationByCodeWithTimeout.provider/internal/resources_core/json_normalize.go—JSONStringsEquivalent(импорт в core = цикл).provider/internal/core/operation_run_bycode.go— клиентский запуск.
Вопросы к ревью (ответить кратко, по пунктам)
- Порядок шагов 1–10 корректен? Где есть скрытая зависимость, которую я пропустил?
- Шаг 5 (вынос JSON-эквивалентности в
core/jsonutil) — правильный путь снять цикл импорта, или есть чище (напр. оставитьJSONStringsEquivalentв resources_core и передавать нормализованные строки в core уже готовыми)? - Шаг 6 — сигнатура
modifierDesiredEqualsCurrent(desired map[string]string, cfsParams []universalCfsParam) boolкорректна? Хватает ли данных для сравнения всех типов (bool/int/string/map-fixed/array-map-fixed)? - Шаг 4.4 Delete=inverse — как именно слать modify:
delete_params+ досылка live остальных (полный payload) — это правильно, или есть подводный камень? - Шаг 8 — расширение реестра
serviceSpecificModifiersдо структуры: верный источник? Илиdelete_strategy/idempotencyправильнее держать отдельным реестром (не трогая тип map)? - Пропущен ли какой-то кейс из 16 (13 + taint/replace/partial/unknown)?
- Есть ли риск сломать instance-ресурсы (не модификаторы) любым из шагов 1–8?
Ответ — тезисно, с указанием конкретного шага и что в нём поправить.