doc: промпт code review #2 — polygon v0.2.2 после decouple
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# Code Review #2: polygon v0.2.2 (после decouple)
|
||||
|
||||
> Адресат: Claude Sonnet 4.6 (новый чат)
|
||||
> Дата: 2026-07-31
|
||||
> Предыдущее ревью: v0.2.0 (12 находок, 2 крит. исправлены)
|
||||
> ⛔ ОТВЕТ — ТОЛЬКО В ЧАТ. Не редактировать файлы.
|
||||
|
||||
---
|
||||
|
||||
## Контекст
|
||||
|
||||
После первого ревью (v0.2.0) были исправлены 2 критических бага и проведён
|
||||
decouple-рефакторинг: монолитный `app.py` (418 строк) разнесён на blueprint'ы
|
||||
по шаблону app-autotest. CSS и HTML вынесены из Python-строк в отдельные файлы.
|
||||
|
||||
Актуальная версия: **v0.2.2**, задеплоена на `polygon.pythonk8s.dev.nubes.ru`.
|
||||
23/23 curl-тестов PASS, 19/19 pytest PASS.
|
||||
|
||||
## Новая структура
|
||||
|
||||
```
|
||||
polygon/site/
|
||||
├── app.py # 57 строк: Flask(), 6 blueprint'ов, app.run()
|
||||
├── routes/
|
||||
│ ├── root.py # /health, / (Jinja2 render_template)
|
||||
│ ├── services_routes.py # GET /api/v1/svc/services, /services/<id>
|
||||
│ ├── instances_routes.py # GET/POST /api/v1/svc/instances, GET /instances/<uid>
|
||||
│ ├── operations_routes.py # /instanceOperations/* (5 эндпоинтов: default, create, status, params, validate)
|
||||
│ ├── run.py # POST /instanceOperations/<uid>/run
|
||||
│ └── mock_routes.py # /_mock/* (reset, state, services, delay)
|
||||
├── state/
|
||||
│ ├── mock_state.py # MockState (in-memory, UUID v4, пагинация)
|
||||
│ └── state_machine.py # apply_effect() + _merge_params()
|
||||
├── config/
|
||||
│ └── loader.py # load_services() + модульные переменные SERVICES/OPS_INDEX/DELAY
|
||||
├── utils/
|
||||
│ ├── now.py # now() — UTC ISO с 'Z'
|
||||
│ └── pluralize.py # pluralize() — одна функция
|
||||
├── converter/
|
||||
│ └── from_stands.py # конвертер STANDS YAML → polygon config
|
||||
├── static/
|
||||
│ └── style.css # тёмная тема (из f-строки)
|
||||
├── templates/
|
||||
│ └── index.html # Jinja2-шаблон (из f-строки)
|
||||
└── services/
|
||||
└── 37 YAML-конфигов
|
||||
```
|
||||
|
||||
## Что изменилось с прошлого ревью
|
||||
|
||||
| v0.2.0 | v0.2.2 |
|
||||
|--------|--------|
|
||||
| `app.py` 418 строк, всё в одном | `app.py` 57 строк, только скелет |
|
||||
| 17 `@app.route(...)` в одном файле | 7 blueprint-файлов в `routes/` |
|
||||
| CSS в f-строке `index()` | `static/style.css` |
|
||||
| HTML в f-строке `index()` | `templates/index.html` (Jinja2) |
|
||||
| `_now()` в app.py + mock_state.py | `utils/now.py` |
|
||||
| `_pluralize()` в state_machine + from_stands | `utils/pluralize.py` |
|
||||
| `config_loader.py` | `config/loader.py` (модульные переменные) |
|
||||
| `--workers 2` в docstring | `--workers 1` + `WEB_CONCURRENCY=1` |
|
||||
| `cfs_params[pid]` → KeyError | `cfs_params.get(pid)` → безопасно |
|
||||
|
||||
## Что проверять
|
||||
|
||||
### 1. Корректность blueprint-регистрации
|
||||
- Все 17+ маршрутов на месте?
|
||||
- Порядок `default/<int>` перед `<uid>` сохранён в operations_routes.py?
|
||||
- Нет коллизий имён blueprint'ов?
|
||||
- `url_prefix` не дублируется с путями в `@bp.route()`?
|
||||
|
||||
### 2. Импорты и зависимости
|
||||
- Нет циклических импортов между модулями?
|
||||
- `config/loader.py` — модульные переменные инициализируются ровно один раз?
|
||||
- `routes/run.py` и `routes/mock_routes.py` правильно работают с `config.loader.DELAY` через `_cfg.DELAY = seconds`?
|
||||
- Старый `config_loader.py` удалён — нигде не осталось импортов?
|
||||
|
||||
### 3. Порядок вызова функций
|
||||
- При дроблении не нарушен ли порядок: validate → set_param → run → apply_effect?
|
||||
- `apply_effect` вызывается с правильными аргументами (mock_state.state, SERVICES)?
|
||||
- `_merge_params` не сломан после переноса в отдельный модуль?
|
||||
|
||||
### 4. CSS/HTML разделение
|
||||
- `render_template("index.html", ...)` передаёт все нужные переменные?
|
||||
- CSS не потерян при переносе?
|
||||
- `url_for('static', filename='style.css')` корректный?
|
||||
|
||||
### 5. Качество кода новых файлов
|
||||
- Комментарии к каждой функции на месте?
|
||||
- Имена переменных понятные?
|
||||
- Нет дублирования логики между blueprint'ами?
|
||||
|
||||
## Формат ответа
|
||||
|
||||
Сгруппируй находки:
|
||||
- 🔴 Критические (сломает работу)
|
||||
- 🟡 Средние (потенциальная проблема)
|
||||
- 🔵 Минорные (стиль, имена)
|
||||
|
||||
Для каждой: файл, проблема, предлагаемое исправление.
|
||||
|
||||
Если по какой-то категории всё ок — напиши «проблем не найдено».
|
||||
Reference in New Issue
Block a user