docs(opus): раунд 3 отвечен — запись в журнал диалога
Дословно сырой лог и отчёт: 5 находок по ядру — 401 не ретраится (расхождение с ARCHITECTURE.md:105-108), ретрай только для GET, обрыв modify после создания операции, zero-value fallback по подстроке имени, нормализация Read только для jsonEnv/ref_svc. Находки 1-3,5 не подтверждены замером.
This commit is contained in:
@@ -797,13 +797,77 @@ Read , lines 174 to 193
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Ход 13 — Ответ Opus на раунд 3 (дословно, как получен от пользователя)
|
||||||
|
|
||||||
|
### Сырой лог сессии
|
||||||
|
|
||||||
|
```
|
||||||
|
Read
|
||||||
|
|
||||||
|
Ограничусь бюджетом. Посмотрю состав `core/` и выберу ключевые непрочитанные файлы.
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Прочитаю ещё 4 ключевых файла ядра: ожидание операций, поиск (дубликаты), нормализацию параметров, cfs.
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Прочитаю ещё 2: состояние инстанса (проверка ретрая 401) и нормализацию параметров.
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Read
|
||||||
|
|
||||||
|
Бюджет: прочитано 6 файлов. ТОП-5 находок по устойчивости/корректности ядра.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Отчёт (дословно)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
**1. Транзиентный 401 не ретраится нигде; `getInstanceStateWithRetry` — имя-обман (ретрая нет).**
|
||||||
|
`instance_state.go:39` просто зовёт `doRequest` один раз; `http.go:118` `isRetryable` = {429,502,503,504}, **без 401**.
|
||||||
|
Прямо противоречит ARCHITECTURE.md:105-108 («GetInstanceState retry 401», «doRequest treats 401 as retryable»). Кратковременный 401 Gateway роняет любой read → срыв plan/apply/поллинга.
|
||||||
|
|
||||||
|
**2. Ретраится только GET; любой POST падает намертво на транзиентном 502/503/сети.**
|
||||||
|
`http.go:88` — retry только при `method=="GET"`.
|
||||||
|
Сбой на `/instanceOperations`, `/instanceOperationCfsParams` или `run` рвёт операцию; при create остаётся осиротевший инстанс → следующий apply ловит страж дубликатов `instance_find.go:168`.
|
||||||
|
|
||||||
|
**3. Modify обрывается уже ПОСЛЕ создания операции, если чтение live-параметров сбойнуло.**
|
||||||
|
`operation_run.go:150` (и симметрично bycode `operation_run_bycode.go:108`): `instanceLiveParams` err → `return`, но POST `/instanceOperations` уже прошёл.
|
||||||
|
Любой транзиентный сбой чтения live → повисшая pending-операция, блокирующая инстанс до idle.
|
||||||
|
|
||||||
|
**4. Zero-value fallback угадывает тип по ПОДСТРОКЕ имени параметра.**
|
||||||
|
`params.go:47`: при пустом `dataType` тип берётся из `name/code/label`, содержащих `array/list/map/json`.
|
||||||
|
Строковый параметр с кодом вроде `whitelist`/`...json...` получит `"[]"`/`"{}"` вместо `""` → неверно-типизированное значение уходит в API на незаданном поле.
|
||||||
|
|
||||||
|
**5. Эквивалентность значения в `Read` захардкожена под `jsonEnv`/ref_svc — прочие строки пишутся как вернул API.**
|
||||||
|
`state_refresh.go:143` спец-ветка только для `jsonEnv`; остальное — `ParseString(value)` «как есть» `state_refresh.go:168`. Регистровая нормализация есть лишь в ref_svc-пути `refsvc_resolve.go:29`.
|
||||||
|
Для non-ref_svc строкового поля, где API канонизирует формат (регистр UUID и т.п.), plan≠state → вечный diff.
|
||||||
|
|
||||||
|
Проверяемо только замером (не чтением): №1–3 (поведение при флапающем Gateway, орфан-операции) — прогоном `apply`; №5 (вечный diff) — прогоном `plan`.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Статус
|
## Статус
|
||||||
|
|
||||||
- Раунды 1–2: завершены (отчёты получены, замечания отработаны).
|
- Раунды 1–3: все три отчёта получены. Раунд 3 уложился в бюджет (прочитано 6 файлов, 5 находок).
|
||||||
- **Раунд 3 отправлен**: фокус переведён с модификаторов на **сам провайдер** (устойчивость, корректность);
|
- **Итог раунда 3 (ядро, устойчивость/корректность):**
|
||||||
жёсткий бюджет (≤ 10 файлов, ≤ 5 находок ≤ 3 строк). `M6` снят. Ответ ещё НЕ получен.
|
1. 401 не ретраится нигде; `isRetryable` без 401 — противоречие `ARCHITECTURE.md:105-108`.
|
||||||
|
2. Ретрай только для GET; POST обрывается на 502/503/сети → риск осиротевших операций/инстансов.
|
||||||
|
3. Modify может оборваться **после** создания операции (сбой чтения live) → повисшая pending-операция.
|
||||||
|
4. Zero-value fallback определяет тип по подстроке имени → возможна неверная типизация незаданного поля.
|
||||||
|
5. Нормализация значения в `Read` — только `jsonEnv`/ref_svc → вечный diff на прочих канонизируемых строках.
|
||||||
|
- Находки №1–3 и №5 **не подтверждены замером** (по словам самого Opus) — перенесены как гипотезы.
|
||||||
- Артефакты: `752244f` — промпт раунда 1;
|
- Артефакты: `752244f` — промпт раунда 1;
|
||||||
`NOTES/20_prompts/prompt_for_opus_provider_architecture_modifiers_round2.md` — замечания раунда 2;
|
`NOTES/20_prompts/prompt_for_opus_provider_architecture_modifiers_round2.md` — замечания раунда 2;
|
||||||
`NOTES/20_prompts/prompt_for_opus_provider_core_round3.md` — задание раунда 3.
|
`NOTES/20_prompts/prompt_for_opus_provider_core_round3.md` — задание раунда 3.
|
||||||
|
- Следующее действие не задано пользователем.
|
||||||
- Настоящий документ ведётся по прямому указанию пользователя «документируй ВЕСЬ диалог,
|
- Настоящий документ ведётся по прямому указанию пользователя «документируй ВЕСЬ диалог,
|
||||||
без сокращений».
|
без сокращений».
|
||||||
|
|||||||
Reference in New Issue
Block a user