58 lines
3.4 KiB
Markdown
58 lines
3.4 KiB
Markdown
# Резюме сессии — 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 (подмодуль)
|