diff --git a/History/session-summary-v1.0.177.md b/History/session-summary-v1.0.177.md new file mode 100644 index 0000000..bc55e8e --- /dev/null +++ b/History/session-summary-v1.0.177.md @@ -0,0 +1,57 @@ +# Резюме сессии — v1.0.177 + +## Текущее состояние + +Проект: **contracts** — сверка договоров через LLM. Домен: colocation, ЦОД, аренда стоек. + +- **Фронт:** index.cfm (Lucee, ручной деплой) + app.js (~50KB) + app_utils.js (~4KB) с ВМ (contracts.kube5s.ru) +- **Бэкенд:** Python http.server на ВМ (5.172.178.213:8766), systemd-сервис `contracts` +- **БД:** PostgreSQL, прямой доступ psycopg2 +- **LLM:** gpt-oss-120b через api.aillm.ru + +## Что сделано за сессию + +### Аудит безопасности (Sonnet) — все CRITICAL/HIGH исправлены +- XSS ×5: escHtml на все данные от LLM +- Path traversal: os.path.basename(), лимит 100MB +- UUID валидация: contract_id, batch_id, doc_id +- FK cascade: spec_current точечно, не весь контракт +- Race conditions: seq (FOR UPDATE + транзакция), prompts (seed per-role) +- MITM: verify=False убран + +### Функционал +- **Виртуальные группы:** группировка без базового договора (по parent_number/own_number) +- **Промежуточные результаты:** клик на имя файла → 📤 текст в LLM, 📥 ответ, 📄 распарсенный JSON +- **Сравнение в карточке:** раскрывается внутри группы, не в конце страницы +- **Два состояния групп:** необработанная (кнопка) vs обработанная (✓ Готово, только сворачивание) +- **Одно сравнение одновременно:** все кнопки блокируются, предыдущий ES закрывается +- **Stepper:** ○ Загрузка → ○ Классификация → ○ Группировка → ○ Сравнение в топбаре +- **«О сервисе»:** полная инструкция + +### Организация +- `history/` + `History/` → `History/{sessions,llm-analysis,architecture,features,topics}` +- Ветка `v1.0.177-stable` сохранена + +## Ключевые файлы для контекста + +- `contractor/deploy/app.js` — фронтенд (~1040 строк) +- `contractor/deploy/app_utils.js` — утилиты +- `contractor/index.cfm` — HTML (v1.0.177, ?v=1.0.177 для cache bust) +- `contractor/deploy/convert_server.py` — бэкенд-роутер +- `contractor/deploy/db/*.py` — CRUD +- `contractor/deploy/services/*.py` — логика + +## План на следующий чат + +**Рефакторинг: store + render.** Файл: `History/llm-analysis/decoupling-final-plan.md` + +Фаза 0 (ближайшая): ввести `state`, `render(state)`, соглашение «мутировал → render()». Без смены поведения. + +## Правила (из памяти) + +- ⛔ Без «делай» — ничего не делать +- ⛔ После каждого изменения — проверка (node -c / py_compile) +- ⛔ После каждой правки — коммит +- ⛔ Lucee — ручной деплой (не автоматический) +- ⛔ JS + Python — деплой через scp на ВМ +- ⛔ Оба репо коммитить: contracts (родительский) + contractor (подмодуль)