Files
contracts/History/session-summary-v1.0.177.md
T

58 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Резюме сессии — 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 (подмодуль)