# Проблемы проекта Contracts App (15.06.2026) _Дата: 15.06.2026_ _Статус: Анализ и выученные уроки_ --- ## 1. Технические ошибки и инструменты ### ⛔ replace_string_in_file портит файлы Инструмент заменяет подстроку, а не файл целиком. При повторных правках возникали дубликаты кода (например, два блока `if __name__ == "__main__"`) или обрезка функций. **Решение:** При больших правках использовать `create_file` для перезаписи файла целиком, либо очень внимательно выбирать контекст в `oldString`. ### ⛔ Опечатка в API-ключе (c772c3e5 vs 5fad79ba) Два часа отладки HTTP/2 и `httpx` из-за опечатки в `LLM_API_KEY` (перепутаны символы `9K` -> `K9`). **Урок:** Проверять валидность ключей и выводить первые/последние символы хеша в логи при ошибках 401. ### ⛔ Истёкший SSL-сертификат api.aillm.ru Сертификат протух 14 июня 2026. `httpx` блокировал запросы. **Временное решение:** `verify=False` в клиенте LLM. --- ## 2. Архитектура и Сеть ### ⛔ ERR_HTTP2_PROTOCOL_ERROR (Таймауты Ingress) LLM обрабатывает документ 30-40 секунд. Ingress в K8s обрывает соединение на 30-й секунде. **Решение:** Разделение процессов. Загрузка — мгновенно. Обработка LLM — по отдельному запросу с фронтенда с визуальным таймером, чтобы пользователь понимал, что процесс идет. ### ⛔ AJAX fetch() -> Failed to fetch Сложная логика на фронте (очереди, JSZip) ломалась. **Решение:** Упрощение до стандартных форм. Паттерн **PRG (Post-Redirect-Get)** для устранения проблемы «Подтвердите повторную отправку формы» при нажатии F5. --- ## 3. Фронтенд и Контент ### ⛔ Битый логотип `nubes-logo.svg` содержал текст "Forbidden" (ошибка копирования через `curl`). **Урок:** Проверять содержимое статических файлов после скачивания. --- ## Текущее состояние (v1.0) 1. **Упрощение:** Форма `` + стандартный `submit`. 2. **Надежность:** POST на `/` загружает и парсит файлы, затем делает `redirect` на страницу договора. 3. **LLM:** Отдельная кнопка «Обработать (LLM)» внутри договора, чтобы избежать таймаутов при массовой загрузке. 4. **Интерфейс:** Добавлен таймер обработки и версия **v1.0** в шапке.