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