metaagent session-005: METASTATE + HANDOFF
- All 7 tasks archived (T1-T7 in .agent/archive/tasks/) - All 7 requests approved and moved to .agent/archive/requests/ - .agent/archive/index.json created - .agent/context/project-state.md updated (post-refactor snapshot) - .agent/handoff-summary.md (full summary for next agent) - .agent/session-summary.md (phase-level summary) - .agent/roadmap/sources.md (updated priorities) - .agent/checkpoints.json: handoff=completed All 8 phases completed: INIT, ANALYSE, ROADMAP, DECOMPOSITION, EXECUTION, METASTATE, HANDOFF (DESIGN skipped for existing project).
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# Roadmap Sources
|
||||
|
||||
**Дата:** 2026-10-08
|
||||
**Goal:** Обсуждение архитектуры и серьёзный refactor
|
||||
**Project type:** `existing`
|
||||
|
||||
---
|
||||
|
||||
## FUTURE Plans
|
||||
|
||||
❌ Директория `FUTURE/` отсутствует.
|
||||
|
||||
Долгосрочные планы в `README.arch.md` (раздел "Будущие возможности"). После сессии 2026-10-08 (обсуждение архитектуры) пользователь **исключил** из roadmap:
|
||||
|
||||
- ❌ **AI Financial Assistant** (полная реализация) — нет смысла сейчас (`user:direct`)
|
||||
- ❌ **AI-интеграция** (R-001) — отложено
|
||||
|
||||
Остальные долгосрочные планы (тоже не в этой сессии):
|
||||
|
||||
- Monte-Carlo Simulation
|
||||
- FIRE Planning
|
||||
- Инвестиционный прогноз
|
||||
- Импорт банковских выписок / брокерских отчётов
|
||||
- REST API
|
||||
- Web UI
|
||||
- Mobile App
|
||||
|
||||
Эти направления — **не основной фокус текущей сессии** (цель — refactor, не новые фичи).
|
||||
|
||||
## ADR-Derived Tasks
|
||||
|
||||
❌ `.agent/decisions/index.json` отсутствует — ADR-ов ещё нет.
|
||||
|
||||
## User Requests
|
||||
|
||||
| Запрос | Приоритет | Источник |
|
||||
|--------|-----------|----------|
|
||||
| Обсуждение архитектуры + серьёзный refactor | **P0** | `user:direct` (current session) |
|
||||
|
||||
## Agent-Identified Improvements (из ANALYSE)
|
||||
|
||||
Эти проблемы выявлены в `analysis-report.md` / `project-state.md` и требуют архитектурного обсуждения.
|
||||
|
||||
### Архитектурные проблемы (кандидаты на рефактор)
|
||||
|
||||
| ID | Проблема | Серьёзность | Затронутые слои |
|
||||
|---|---|---|---|
|
||||
| **A1** | **Слои не выделены явно.** `engine/` импортирует `cashflow_model/`, `cli/` импортирует всё. Нет разделения domain / application / infrastructure. | высокая | все пакеты |
|
||||
| **A2** | **Ручная сериализация** (`to_dict` / `from_dict`) в каждой модели. 7 моделей × 2 метода = 14 boilerplate-методов. | высокая | `cashflow_model/` |
|
||||
| **A3** | **Dataclass vs pydantic** — нет валидации при загрузке JSON, дублирование правил между моделями и Excel-sync. | высокая | `cashflow_model/`, `sync/` |
|
||||
| **A4** | **`float` для денег** — потеря точности при больших суммах. `Decimal` нужен для финансовых расчётов. | средняя | `cashflow_model/`, `engine/`, `sync/` |
|
||||
| **A5** | **CLI-файлы разрослись** — `cli/main.py` 330 LOC, `cli/config.py` 428 LOC. Слишком много в одном файле. | средняя | `cli/` |
|
||||
| **A6** | **i18n — строки разбросаны** по `_r()`-вызовам в `cli/i18n.py`. Нет единого механизма для engine/sync. | низкая | `cli/`, частично `engine/`, `sync/` |
|
||||
| **A7** | **Нет dependency injection** — `ForecastService` создаётся внутри `AssistantService.analyze()`. Тяжело тестировать. | средняя | `ai/`, `engine/` |
|
||||
| **A8** | **Сервисы не абстрагированы** — `ExcelSync` — конкретный класс, нет интерфейса для других storage. | средняя | `sync/`, `cashflow_model/` |
|
||||
| **A9** | **Нет репозиториев** — `FinancialModel.save/load` напрямую работает с файлом. Не расширяется (БД, S3, etc.). | средняя | `cashflow_model/` |
|
||||
| **A10** | **Нет версионирования модели** — `model.json` без `version` поля. Миграции схемы невозможны. | высокая | `cashflow_model/model.py` |
|
||||
|
||||
### Технический долг
|
||||
|
||||
| ID | Что | Из `project-state.md` |
|
||||
|---|---|---|
|
||||
| T1 | Нет CI/CD | R-003 |
|
||||
| T2 | Лицензия не выбрана | R-004 |
|
||||
| T3 | mypy не настроен | R-005 |
|
||||
| T4 | Нет логирования | — |
|
||||
| T5 | Нет pre-commit hooks | — |
|
||||
|
||||
## Consolidated Priority Queue
|
||||
|
||||
### P0 — Архитектурный рефактор (цель сессии)
|
||||
|
||||
Кандидаты на обсуждение (выбрать 1-3 направления):
|
||||
|
||||
1. **A1+A10: Введение явных слоёв + версионирование модели**
|
||||
- Выделить domain (модели), application (сервисы), infrastructure (CLI, Excel-sync, AI)
|
||||
- Добавить `version: 1` в `FinancialModel.to_dict()`
|
||||
- Подготовить инфраструктуру миграций схемы
|
||||
|
||||
2. **A2+A3: Pydantic-миграция**
|
||||
- Заменить `@dataclass` на `BaseModel`
|
||||
- Убрать ручные `to_dict` / `from_dict` (pydantic делает сам)
|
||||
- Добавить валидацию при загрузке JSON
|
||||
- ⚠️ Может потребовать `pydantic>=2.0` (новая зависимость)
|
||||
|
||||
3. **A4: Decimal для денег**
|
||||
- Мигрировать `amount`, `balance`, `value`, `rate` с `float` на `Decimal`
|
||||
- Обновить прогноз, Excel-sync, форматтеры
|
||||
- ⚠️ Большой рефактор: ~10 файлов, 50+ полей
|
||||
|
||||
4. **A5: Декомпозиция CLI**
|
||||
- `cli/main.py` → `cli/commands/init.py`, `cli/commands/forecast.py`, ...
|
||||
- `cli/config.py` → `cli/paths.py` + `cli/services.py`
|
||||
- Улучшает читаемость, не меняет поведение
|
||||
|
||||
5. **A7+A8+A9: DI + Repository pattern + абстракции**
|
||||
- Ввести `ForecastRepository`, `ExcelRepository`
|
||||
- Передавать зависимости в сервисы через конструктор
|
||||
- Упрощает тестирование, подготовка к БД/API
|
||||
|
||||
### P1 — Качество и инфраструктура
|
||||
|
||||
6. T1: GitHub Actions CI (pytest + ruff)
|
||||
7. T3: mypy в строгом режиме
|
||||
8. T4: заменить `rich.print` на `logging` для домена
|
||||
|
||||
### P2 — Полировка
|
||||
|
||||
9. T2: выбрать лицензию
|
||||
10. T5: pre-commit hooks
|
||||
|
||||
### P3 — Долгосрочно (не в этой сессии)
|
||||
|
||||
- Monte-Carlo, FIRE, REST API, Web UI, Mobile — из `README.arch.md`
|
||||
- ~~AI-интеграция (R-001)~~ — **отклонено пользователем 2026-10-08**
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
→ **DECOMPOSITION** с выбранным направлением рефактора.
|
||||
→ Пользователь должен выбрать 1-3 направления из P0-списка.
|
||||
→ Если ни одно не подходит — описать желаемый результат.
|
||||
Reference in New Issue
Block a user