# 2026-07-24 — Полная хронология провалов (v1.0.6 — v1.0.25) ## v1.0.6 — Трёхколоночный UI, auto-selectService - **Что:** три колонки, сервисы грузятся, auto-select на dummy - **Результат:** «Сервисы: Загрузка...» висит - **Причина:** заменён ВЕСЬ шаблон вместо добавления. auto-selectService вызывал API до готовности страницы. ## v1.0.7 — HttpClient.post не существовал - **Ошибка:** `'HttpClient' object has no attribute 'post'` - **Причина:** в http_client.py только get(), а api_test.py использовал post() - **Исправление:** добавлен post() ## v1.0.8 — r.json() на пустом ответе - **Ошибка:** `'str' object has no attribute 'get'` - **Причина:** POST /instances → 201 с пустым телом. r.json() падает. - **Исправление:** try/except, возвращаем {} ## v1.0.9 — instanceUid из Location - **Ошибка:** не находился UUID инстанса - **Причина:** POST /instances возвращает UID в заголовке Location, не в теле - **Исправление:** парсинг Location → UUID ## v1.0.10 — cfsParams в POST /instances - **Ошибка:** 400 Bad Request - **Причина:** cfsParams нельзя в POST /instances - **Исправление:** убраны cfsParams из create ## v1.0.11 — descr обязателен - **Ошибка:** 400 Bad Request - **Причина:** поле descr нужно в POST /instances - **Исправление:** добавлен descr: "autotest" ## v1.0.12 — тело ошибки в ответе - **Добавлено:** показ тела ответа API при ошибке ## v1.0.13 — displayName не уникален - **Ошибка:** 400 "Instance Display Name not unique" - **Причина:** имя autotest-1 уже занято - **Исправление:** timestamp в имени ## v1.0.14 — displayName редактируемый - **Добавлено:** поле ввода displayName в параметрах ## v1.0.15-1.0.16 — авто-selectService + сломанный шаблон - **Ошибка:** «Сервисы: Загрузка...» - **Причина:** заменён рабочий шаблон новым с багами - **Исправление:** откат к v1.0.12 ## v1.0.17-1.0.19 — восстановление + displayName - Восстановлен рабочий шаблон, добавлен только displayName ## v1.0.20 — traceback в ошибках - **Добавлено:** traceback для отладки ## v1.0.21 — r.json() возвращает строку "201" - **Ошибка:** `'str' object does not support item assignment` - **Причина:** POST /instances → тело "201" → r.json() = "201" → result = "201" (строка) - **Исправление:** isinstance(parsed, dict) ## v1.0.22 — двухшаговый create (без cfsParams) - **Ошибка:** инстанс создан, но статус "not created" - **Причина:** только POST /instances, операция create не запущена - **Исправление:** добавлен POST /instanceOperations ## v1.0.23 — cfsParams в POST /instanceOperations - **Ошибка:** 422 "required CFS parameter failInProgress (200) is missing" - **Причина:** cfsParams нельзя в POST /instanceOperations — они отдельно - **Исправление:** убраны cfsParams из вызова, добавлены через /params ## v1.0.24 — /params без instanceOperationUid - **Ошибка:** /params ожидает {instanceOperationUid, svcOperationCfsParamId, paramValue} - **Причина:** поле instanceOperationUid пропущено - **Исправление:** добавлено ## v1.0.25 — пропущен /validate - **Ошибка:** операция не запускается - **Причина:** в Go-клиенте есть шаг validate перед run - **Исправление:** добавлен POST /validate ## Итого: 13 итераций, 9 багов Каждый раз — новый баг, потому что не сверял с Go-клиентом посимвольно.