docs(opus): раунд 2 — замечания к отчёту Opus + запись в журнал диалога
Замечания M1–M5 (сверка номеров строк, нарушение «без догадок» в R2, натянутые S2/S4, приоритет R5, пробел по устойчивости Read/вечный diff) и U1–U3 (modifiers.yaml не существует, рассинхрон suspend_on_destroy/keep_on_destroy, корневая причина ручных модификаторов). Разрешён дополнительный список файлов; право копать глубже передано Opus.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# Промпт для Opus 4.8 — РАУНД 2: замечания к отчёту (2026-09-30)
|
||||
|
||||
> Продолжение диалога. Раунд 1 — `prompt_for_opus_provider_architecture_modifiers.md`.
|
||||
> Формат ответа тот же: сжато, тезисы, `файл:строка`, без догадок. Границы доступа — как в раунде 1
|
||||
> (плюс список из §4 ниже). `HISTORY/**`, `NOTES/**`, `docs/**`, `HAR/**`, `TMP/**`, git-история — по-прежнему ЗАПРЕЩЕНЫ.
|
||||
|
||||
---
|
||||
|
||||
## 1. Зачтено (переделывать НЕ надо)
|
||||
|
||||
`S1`, `S5`, `R1`, `R4` — приняты. Не повторяй их в ответе.
|
||||
|
||||
## 2. Замечания — обязательны к отработке
|
||||
|
||||
**M1. Номера строк не сходятся.**
|
||||
Ты дал `provider.go:199-204` для регистрации модификаторов. По моему чтению файла (начиная со
|
||||
строки 180) функция `Resources()` находится примерно на строке 182, и регистрация идёт сразу за ней —
|
||||
твои 199–204 не сходятся. Требование задания — «каждое утверждение проверяемо».
|
||||
Действие: перепроверь **каждую** ссылку `файл:строка` в отчёте и дай точные номера; где не сверял —
|
||||
пометь «не сверено». Без этого отчёт не принимается.
|
||||
|
||||
**M2. `R2` — нарушено правило «без догадок».**
|
||||
Ты утверждаешь, что `check_hardcoded_service_ids.sh` «это не ловит», но этот скрипт **не читал**
|
||||
(его не было в разрешённом списке). Это догадка, а не факт.
|
||||
Действие: скрипт теперь разрешён (см. §4). Либо приведи факт из его кода, либо переформулируй в вопрос.
|
||||
|
||||
**M3. `S2`/`S4` — проверь основание, иначе они натянуты.**
|
||||
Правила спеки («No manual edits to **generated** Go code», «Service-specific Go code is fully
|
||||
**generated** from YAML») писаны про генерируемый код. Ресурсы в `resources_core` — ручные, не
|
||||
генерируемые. Плюс `S4` («modify всегда через WithDefaults») относится к `Update` инстанс-ресурсов,
|
||||
а не к отдельному ресурсу-модификатору.
|
||||
Действие: для каждого из S2/S4 дай **текстуальную опору из спеки** (`TOOLS/ARCHITECTURE.md:строка`)
|
||||
и переформулируй: это **пробел спеки** (нет категории для ручных оверлеев) или **нарушение**? Если
|
||||
опоры нет — пункт снять.
|
||||
|
||||
**M4. `R5` — обоснуй приоритет или понизь.**
|
||||
Ты сам пишешь «корректности не нарушает», но ставишь R5 выше R6.
|
||||
Действие: назови шкалу ранжирования (например: вероятность × последствие × обнаружимость) и
|
||||
пересчитай порядок; либо понизь R5.
|
||||
|
||||
**M5. Главный пробел: устойчивость `Read` и вечный diff.**
|
||||
Для Terraform это опаснее всего, а разобрано тоньше всего (только R6/импорт).
|
||||
Действие: разбери построчно, как `Read` модификатора формирует `vip_configure` / `ip_space_name`
|
||||
из live-состояния и совпадёт ли это с тем, что вернёт `jsonencode` из конфига:
|
||||
- порядок ключей JSON;
|
||||
- тип `count` (строка vs число);
|
||||
- снятие `null` и пустых значений;
|
||||
- что видит `plan` после `Read` для `keep_on_destroy`.
|
||||
Отдельно: может ли `Update` инстанс-ресурса (`nubes_vc_org` / `nubes_vc_nsxt`) вклиниться между
|
||||
apply-ами модификатора и вернуть поле назад (пересечение — это R1, но нужен сценарий во времени).
|
||||
Если считаешь, что глубокий разбор здесь не нужен — обоснуй одной строкой, почему.
|
||||
|
||||
## 3. Что упущено — доработать
|
||||
|
||||
**U1. Файла `modifiers.yaml` в репозитории НЕТ.**
|
||||
Есть только упоминания-комментарии (в `TOOLS/yaml-generator/main.go` и док-заметках). Это не
|
||||
«параллельный слой», а **задокументированное, но не созданное** наложение.
|
||||
Действие: переформулируй свой открытый вопрос №1 с учётом этого факта.
|
||||
|
||||
**U2. Рассинхронизация словаря жизненного цикла.**
|
||||
У генерируемых ресурсов — `suspend_on_destroy`, у модификаторов — `keep_on_destroy`. Два имени
|
||||
для одного смысла, живут в разных ветках кода.
|
||||
Действие: оцени как архитектурный дефект (единый словарь/контракт жизненного цикла), с `файл:строка`.
|
||||
|
||||
**U3. Корневая причина «ручных» модификаторов.**
|
||||
Генератор умеет `kind: modifier`, но доменное знание (какая операция, имя, inverse) некуда положить —
|
||||
оверлей не создан.
|
||||
Действие: сформулируй вывод по вариантам (оверлей-данные vs ручной код vs иное) — одной строкой на вариант.
|
||||
|
||||
## 4. Дополнительно РАЗРЕШЕНО читать (только это, сверх раунда 1)
|
||||
|
||||
- `TOOLS/scripts/check_hardcoded_service_ids.sh`
|
||||
- `TOOLS/resource-generator/main.go`
|
||||
- `TOOLS/resource-generator/internal/templates/instance.go`
|
||||
- `TOOLS/resource-generator/internal/templates/modifier.go`
|
||||
- `provider/internal/resources_core/state_refresh.go`
|
||||
- `provider/internal/resources_core/helpers.go`
|
||||
- `provider/internal/resources_core/params_compare.go`
|
||||
|
||||
Всё остальное — по-прежнему нельзя. Нужен файл вне списка → вопрос мне, не чтение.
|
||||
|
||||
## 5. Формат ответа
|
||||
|
||||
- **Только дельта**: что исправляешь, что снимаешь, чем обосновываешь; новые находки по M5/U2.
|
||||
- Полный отчёт заново не переписывать.
|
||||
- Как в раунде 1: тезисы, `файл:строка`, без «лирики» и без «а ещё могу».
|
||||
|
||||
## 6. Разрешение копать глубже
|
||||
|
||||
Если для честного ответа нужно копнуть глубже (в т.ч. по файлам вне §4) — **скажи прямо**, каких
|
||||
файлов не хватает, и задай вопрос. Если глубина не нужна — так и напиши по конкретному пункту.
|
||||
Reference in New Issue
Block a user