MCP-стек рефакторинга: хвосты после PR #3209 (DuckDB, покрытие codanna, копипаста в forecasting) #3219

Open
opened 2026-08-29 11:15:53 +00:00 by bot-backend · 0 comments
Collaborator

Хвосты после внедрения MCP-стека для рефакторинга (PR #3209, сессия 29.08). Ничего из перечисленного не блокирует работу — стек поднят и все 16 MCP-серверов подключены. Это то, что осталось недоделанным или что важно знать про ограничения.

1. DuckDB не настроен → 4 из 17 инструментов GlitchTip не отработают

Встроенный MCP GlitchTip 6.1.6 включён (PR #3209) и отдаёт 17 инструментов. Четыре из них требуют DuckDB и без него не работают:

  • detect_n_plus_one
  • get_transaction_trend
  • list_transaction_spans
  • list_span_groups

Остальные 13 работают. detect_n_plus_one особенно жаль: связь «ORM-код → запрос» для FastAPI/SQLAlchemy сейчас ничем не закрыта, postgres-mcp видит БД, но не знает, какая строка Python породила запрос.

2. Индекс codanna покрывает только backend и frontend

Проиндексировано: backend, frontend — 34 095 символов, 18 822 связи, 890 файлов (97.6% исходников этих двух).

Не проиндексировано:

  • scripts
  • site-finder
  • tradein-mvp
  • auth
  • ops
  • другие репозитории (balance_platform и т.д.) — вообще не тронуты

Добавляется через codanna add-dir <path> из корня репо.

3. Индекс протухает — автоматики нет

Переиндексация сейчас только вручную. У codanna serve есть флаг --watch (hot-reload при изменении индекса) и codanna index --watch, но ни то, ни другое не настроено.

  • Решить: --watch, хук на post-checkout/post-merge, или ручной прогон по необходимости

4. Ограничение codanna: слепа к Depends() и декораторам

Не задача, а то, что надо знать. Граф строится по прямым вызовам. Проверено на проде-коде: analyze_impact get_db вернул «no impact», хотя get_db — FastAPI-зависимость, используемая по всему бэкенду. Причина: Depends(get_db) — передача ссылки, а не вызов. При линковке 48 722 связи из 67 544 помечены skipped.

Что делать вместо: для DI, декораторов и прочей фреймворковой косвенности брать serena find_referencing_symbols — он идёт от language server, а не от call-graph.

5. Найденная копипаста — не тронута

Всплыло при проверке codanna, руками ничего не правил. Это находка, а не выполненная работа:

  • _round_or_none19 копий в разных файлах backend/app/services/forecasting/ (special_indices, macro_coefficient, macro_series, demand_normalization, affordability, product_scoring, what_to_build, sales_series, scenarios и др.)
  • _build_scenarios5 копий в экспортёрах: report_md, report_pptx, report_docx, report_pdf, report_assembler

find_callers _round_or_none показывает их как 19 разных символов — grep слил бы в одну кучу. Хороший кандидат на дедупликацию, но объём и риск надо оценивать отдельно (analyze_impact на _build_scenarios в report_assembler.py:688 дал 50 затронутых символов на глубине 3, из них 46 тестов).


Полный разбор сессии — в vault: research/MCP_Recon_Dev_Refactor_0828.md.

Хвосты после внедрения MCP-стека для рефакторинга (PR #3209, сессия 29.08). Ничего из перечисленного не блокирует работу — стек поднят и все 16 MCP-серверов подключены. Это то, что осталось недоделанным или что важно знать про ограничения. ## 1. DuckDB не настроен → 4 из 17 инструментов GlitchTip не отработают Встроенный MCP GlitchTip 6.1.6 включён (PR #3209) и отдаёт 17 инструментов. Четыре из них требуют DuckDB и без него не работают: - [ ] `detect_n_plus_one` - [ ] `get_transaction_trend` - [ ] `list_transaction_spans` - [ ] `list_span_groups` Остальные 13 работают. `detect_n_plus_one` особенно жаль: связь «ORM-код → запрос» для FastAPI/SQLAlchemy сейчас ничем не закрыта, `postgres-mcp` видит БД, но не знает, какая строка Python породила запрос. ## 2. Индекс codanna покрывает только backend и frontend Проиндексировано: `backend`, `frontend` — 34 095 символов, 18 822 связи, 890 файлов (97.6% исходников этих двух). Не проиндексировано: - [ ] `scripts` - [ ] `site-finder` - [ ] `tradein-mvp` - [ ] `auth` - [ ] `ops` - [ ] другие репозитории (balance_platform и т.д.) — вообще не тронуты Добавляется через `codanna add-dir <path>` из корня репо. ## 3. Индекс протухает — автоматики нет Переиндексация сейчас только вручную. У `codanna serve` есть флаг `--watch` (hot-reload при изменении индекса) и `codanna index --watch`, но ни то, ни другое не настроено. - [ ] Решить: `--watch`, хук на post-checkout/post-merge, или ручной прогон по необходимости ## 4. Ограничение codanna: слепа к `Depends()` и декораторам **Не задача, а то, что надо знать.** Граф строится по прямым вызовам. Проверено на проде-коде: `analyze_impact get_db` вернул «no impact», хотя `get_db` — FastAPI-зависимость, используемая по всему бэкенду. Причина: `Depends(get_db)` — передача ссылки, а не вызов. При линковке 48 722 связи из 67 544 помечены skipped. **Что делать вместо:** для DI, декораторов и прочей фреймворковой косвенности брать `serena find_referencing_symbols` — он идёт от language server, а не от call-graph. ## 5. Найденная копипаста — не тронута Всплыло при проверке codanna, руками ничего не правил. Это находка, а не выполненная работа: - [ ] `_round_or_none` — **19 копий** в разных файлах `backend/app/services/forecasting/` (special_indices, macro_coefficient, macro_series, demand_normalization, affordability, product_scoring, what_to_build, sales_series, scenarios и др.) - [ ] `_build_scenarios` — **5 копий** в экспортёрах: `report_md`, `report_pptx`, `report_docx`, `report_pdf`, `report_assembler` `find_callers _round_or_none` показывает их как 19 разных символов — grep слил бы в одну кучу. Хороший кандидат на дедупликацию, но объём и риск надо оценивать отдельно (`analyze_impact` на `_build_scenarios` в `report_assembler.py:688` дал 50 затронутых символов на глубине 3, из них 46 тестов). --- Полный разбор сессии — в vault: `research/MCP_Recon_Dev_Refactor_0828.md`.
bot-backend added the
priority/p2
tech-debt
observability
labels 2026-08-29 11:15:53 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3219
No description provided.