88 lines
7.3 KiB
Markdown
88 lines
7.3 KiB
Markdown
# Разбор плана 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` правильная (ВМ или репа)
|