Files
contracts/History/opus-plan-review-2026-06-27.md
T

7.3 KiB
Raw Blame History

Разбор плана Opus от 2026-06-27

Что произошло

Opus'у дали задачу: «изучи код и напиши подробный план для DeepSeek V4 Pro по созданию параллельного Flask-стека 1:1 с Lucee↔ВМ, домен check.kube5s.ru».

Opus изучил репозиторий (без доступа к ВМ), считая contractor/deploy/ зеркалом продакшена, и выдал план из 6 фаз.


Что Opus выяснил правильно

Архитектура продакшена

  • Lucee — почти пустая морда. Только index.cfm (HTML+CSS-скелет), chat.cfm (Q&A), Application.cfc. Вся логика — на ВМ.
  • JS-файлы (app.js, files.js, groups.js, state.js, compare.js, app_utils.js) — клиентские, загружаются через <script src> из /static/ на ВМ.
  • Бэкенд на ВМconvert_server.py на порту 8766, импортирует services/*.py и db/*.py.
  • Nginx маршрутизирует: / → Flask :5001 (UI), /upload, /convert-doc, /process-v2 и т.д. → Python :8766 (API), /lucee/ → managed Lucee.

Проблемы, которые Opus обнаружил

  • chat.cfm сломан — ссылается на таблицу spec_rows, которой нет (правильная — spec_current).
  • llm_prompt.py зависит от Lucee_fetch_prompt() ходит в contractor.luceek8s.../prompt.cfm. Для изолированного стека надо переключить на db.prompts.get_active().
  • Нет schema.sql — прод-БД baza создавалась руками. Для новой БД нужен pg_dump --schema-only.
  • Рестарт через nohup, а не systemd (хотя память говорит про contracts.service).

План Opus (6 фаз)

Фаза Что
Ф0 Предпосылки: DNS, дамп схемы БД, managed-домен морды, LLM_KEY
Ф1 Бэкенд на ВМ: ~/contracts-flask/, порт 8777, БД contracts_flask, systemd, разрыв связи с Lucee
Ф2 Nginx + SSL: новый server-блок check.kube5s.ru → :8777, certbot
Ф3 JS-фронтенд: копии 6 JS-файлов, VM_API='https://check.kube5s.ru', раздача через /static/
Ф4 Морда на managed Flask: очистить contracts-app, портировать index.cfm в Jinja2, Dockerfile
Ф5 Чат: перенести на ВМ как POST /chat (Python), контекст из spec_current
Ф6 Проверка изоляции и сквозной тест

Что Opus НЕ знал (выяснили позже)

1. contractor/deploy/ — ПОБАЙТОВОЕ зеркало ВМ

Opus предполагал это, но не знал точно. Мы проверили md5 всех файлов — ВСЕ файлы в db/ и services/ совпадают с ВМ (кроме services/llm.py, который отличается). Корневые classify.py, grouping.py, prompts.py, unzip.py на ВМ — мусор, не используются.

2. contracts-app — отдельный git-репозиторий

Opus предлагал «очистить contracts-app». Мы его случайно удалили вместе с .git. Репо: https://gitea.services.ngcloud.ru/Nail/contracts-app. Потом Наиль сказал «в ПИЗДУ его» и дал новый пустой репо: https://gitea.services.ngcloud.ru/Nail/contracts-flask.git.

3. check.kube5s.ru — DNS есть, nginx нет

DNS указывает на 5.172.178.213, но nginx не знает про этот домен → проваливается в default-сервер (obdai.ru), показывает чужой LLM-UI.

4. Рестарт — и nohup, и systemd

На ВМ реально перезапуск идёт через pkill -f convert_server.py; nohup python3 ... & (из sync.sh). Systemd-сервис contracts.service упоминается в памяти, но неясно, активен ли он.

5. JS-файлы уже на ВМ

6 JS-файлов лежат в ~/contracts/ (корень) и раздаются бэкендом через /static/. Для нового стека их надо скопировать в ~/contracts-flask/ и поменять VM_API.


Моё мнение о плане Opus

Что хорошо

  • Полная изоляция — новая папка, новый порт, новая БД, новый systemd-юнит. Прод не заденешь.
  • Разрыв связи с Lucee — правильно замечено, критично.
  • schema.sql через pg_dump — правильно, ручное воссоздание схемы гарантирует ошибки.
  • 6 фаз с зависимостями — логичный порядок.

Что плохо / упущено

  1. Ф4 (Flask-морда) завязана на CI/CD managed-платформы, которую Opus не знает. План деплоя Flask-морды — «Dockerfile + gitea CI/CD» — слишком общий. Нужны конкретные шаги под Nubes managed Python.
  2. Не учтён services/llm.py — единственный файл, который реально расходится между ВМ и репой. При копировании бэкенда надо брать версию из репы (она новее?) или с ВМ — надо выяснить.
  3. JS-файлы — Opus предлагает копировать, но не уточняет что VM_API зашит в app.js (строка 3). Это единственное место, которое надо менять.
  4. Чат (Ф5) — предлагает перенести на ВМ, но chat.cfm в Lucee всё равно сломан. Имеет смысл сделать чат сразу правильно, а не портировать сломанное.
  5. Нет упоминания tests.js — на ВМ этого файла нет, но в репе есть. Надо включить в новый стек.

Вердикт

План рабочий, но требует уточнений по пунктам выше. Главная ценность — Opus правильно понял архитектуру и предложил изоляцию. Детали (managed-деплой, llm.py, чат) надо доработать.


Текущее состояние (на 2026-06-27)

  • DNS check.kube5s.ru → 5.172.178.213
  • Пустой репо contracts-flask (.gitignore создан)
  • contractor/deploy/ подтверждён как зеркало ВМ
  • Мусорные файлы на ВМ помечены
  • Документация vm-layout.md создана
  • Nginx для check.kube5s.ru не настроен
  • Нет дампа схемы БД
  • Не выбран managed-домен для Flask-морды
  • Не выяснено, какая версия services/llm.py правильная (ВМ или репа)