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

3.4 KiB
Raw Blame History

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