# Резюме для нового чата — contracts (contractor/Lucee) Дата: 2026-06-23 | Версия в git: v1.0.152 | Версия на Lucee: v1.0.152 (после редеплоя) --- ## Архитектура ``` Браузер (contractor.luceek8s.dev.nubes.ru) │ ├── загрузка файлов → VM (contracts.kube5s.ru/upload) │ Python convert_server.py, чанки 10KB → chunk.cfm → Lucee DB │ ├── парсинг: PDF→VM (PyPDF2), DOCX/DOC→Lucee (Apache POI через parser.cfm) │ ├── сравнение → VM SSE /process-v2 → LLM (gpt-oss-120b) │ └── промпты → Lucee prompt.cfm (версионные, extract/diff) ``` **Компоненты:** - Lucee 6.0 (CFML) на k8s — `contractor.luceek8s.dev.nubes.ru` - VM Python 3 — `contracts.kube5s.ru` (5.172.178.213) - PostgreSQL 15 — внутренний, БД `baza` - LLM: gpt-oss-120b через api.aillm.ru (бесплатно, 8000 токенов) - Nginx: `/upload`, `/process-v2`, `/unzip-upload`, `/convert-doc` → VM:8766 ## Что сделано (v1.0.109 → v1.0.152) ### Успешно работает - Upload через VM чанками (10KB) — обходит лимит Lucee k8s (~30KB) - ZIP через /unzip-upload (VM) - PDF парсинг через PyPDF2 на VM - Prompts в БД с версионированием, редактор в UI - Opus-улучшенные промпты (few-shot, глоссарий ЦОД) - Provenance: prompt_version, source_document_id, raw_llm_response в spec_events - ↕ стрелки для порядка файлов - О сервисе — модальное окно ### Критические баги исправлены - JS: UPPERCASE ключи Lucee (OK, BODY, VERSIONS, IS_ACTIVE...) - JS: лишний `});` ломавший весь JS - CORS: дубликаты заголовков на /upload и /unzip-upload - chunk.cfm: `decode(base64)` для правильного хранения файлов - parser.cfm: откачен к рабочей версии (PDF→VM, DOCX→Lucee POI) ## Текущее состояние (v1.0.152) - VM: Python, чанки base64, PDF парсинг ✅ - Lucee: v1.0.152, parser.cfm рабочий, chunk.cfm с base64 ✅ - PDF: загрузка + парсинг работают ✅ - DOCX/DOC: должно работать после v1.0.152 (base64 fix) ✅ - Prompts: работают ✅ ## Проблемы решённые сегодня 1. PDF upload: "Network Error" → chunked upload через VM (10KB чанки) 2. PDF parsing: PDFBox сломан → PyPDF2 на VM 3. DOCX storage: hex вместо base64 → base64 в chunk.cfm 4. CORS дубликаты → nginx только OPTIONS, VM — POST 5. JS uppercase keys → исправлено ## Правила (важно!) - ⛔ НИКОГДА ничего не делать без «делай» - После каждой правки: проверка синтаксиса (node --check для JS, py_compile для Python) - После каждого изменения: bump версии в index.cfm - Перед push: git diff, проверить всё - Lucee требует ручного редеплоя через Nubes UI - VM: scp + pkill + nohup для перезапуска - curl к *.ngcloud.ru всегда с --http2 и --max-time - Lucee serializeJSON → UPPERCASE ключи - Lucee k8s лимит тела запроса ~30KB - Документация в History/*.md ## Если что-то сломалось 1. Проверить git status в /home/naeel/nubes/contracts/contractor 2. Проверить версию на Lucee: curl --http2 --max-time 5 -s 'https://contractor.luceek8s.dev.nubes.ru/' | grep 'v1.0.' 3. Проверить VM: ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213 'ps aux | grep convert' 4. Логи nginx: ssh ... 'sudo tail -20 /var/log/nginx/error.log' 5. Тест загрузки: curl --http2 -X POST 'https://contracts.kube5s.ru/upload' -F 'files=@file.pdf'