Files
autotest/polygon-docs/sonnet-code-review-2-prompt.md
T

5.3 KiB
Raw Blame History

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'ами?

Формат ответа

Сгруппируй находки:

  • 🔴 Критические (сломает работу)
  • 🟡 Средние (потенциальная проблема)
  • 🔵 Минорные (стиль, имена)

Для каждой: файл, проблема, предлагаемое исправление.

Если по какой-то категории всё ок — напиши «проблем не найдено».