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:
2026-10-08 17:03:56 +03:00
parent 3ef10618dc
commit 32b2f537a8
54 changed files with 1536 additions and 3012 deletions
+123
View File
@@ -0,0 +1,123 @@
# Task Manifest
**Session:** `metaagent-005`
**Goal:** Серьёзный архитектурный рефактор
**Date:** 2026-10-08
**Total tasks:** 7
---
## T1: Реструктуризация в domain/application/infrastructure + version=1
**Зависимости:** —
**Файлы:** domain/ (new), application/ (new), infrastructure/{cli,sync,ai}/ (new), tests/
**Что:** Ввести явные слои. Переместить пакеты. Добавить version: 1 в FinancialModel.
**Acceptance:**
- [ ] Структура domain/application/infrastructure создана
- [ ] Все исходные файлы перемещены
- [ ] Все импорты обновлены
- [ ] `FinancialModel.to_dict()` → `{'version': 1, ...}`
- [ ] `from_dict()` поддерживает v0 (без version) и v1
- [ ] pytest 63/63
---
## T2: Pydantic v2 — миграция моделей
**Зависимости:** T1
**Файлы:** domain/*.py, pyproject.toml, infrastructure/sync/excel_sync.py
**Что:** `@dataclass` → `pydantic.BaseModel`. Удалить ручные `to_dict`/`from_dict`.
**Acceptance:**
- [ ] Все модели — `BaseModel`
- [ ] Удалены ручные to_dict/from_dict
- [ ] UUID в JSON как str
- [ ] Валидация (balance >= 0, и т.п.)
- [ ] Excel-sync адаптирован
- [ ] pytest 63/63
---
## T3: Decimal для денег
**Зависимости:** T2
**Файлы:** domain/*.py, application/*.py, infrastructure/sync/excel_sync.py, infrastructure/cli/{main,config}.py
**Что:** `float` → `Decimal` для всех monetary полей. Арифметика engine, форматирование.
**Acceptance:**
- [ ] monetary поля — `Decimal`
- [ ] CurrencyConverter с Decimal
- [ ] ForecastService арифметика — Decimal
- [ ] Excel-sync читает числа как Decimal
- [ ] rich.print форматирует Decimal (2 знака)
- [ ] JSON-сериализация Decimal работает
- [ ] pytest 63/63
---
## T4: Repository pattern — ModelRepository
**Зависимости:** T1
**Файлы:** application/repositories/model_repository.py, infrastructure/repositories/{json_file,excel}_repository.py, infrastructure/sync/excel_sync.py
**Что:** `ModelRepository` Protocol + `JsonFileRepository` + `ExcelRepository` (адаптер над ExcelSync).
**Acceptance:**
- [ ] `ModelRepository` Protocol (load/save)
- [ ] `JsonFileRepository` реализует Protocol
- [ ] `ExcelRepository` реализует Protocol
- [ ] `FinancialModel.save/load` удалены
- [ ] Тесты на каждый репозиторий
- [ ] pytest 63/63
---
## T5: Dependency Injection в сервисах
**Зависимости:** T4
**Файлы:** application/forecast.py, scenarios.py, infrastructure/ai/assistant.py, infrastructure/cli/{main,config}.py
**Что:** Зависимости через конструктор. Composition root в CLI.
**Acceptance:**
- [ ] `ForecastService.__init__(model, repository, converter)`
- [ ] ScenarioService, AssistantService — то же
- [ ] Нет `new ForecastService()` внутри других сервисов
- [ ] CLI собирает граф зависимостей
- [ ] pytest 63/63
---
## T6: Декомпозиция CLI
**Зависимости:** T5
**Файлы:** infrastructure/cli/main.py → app.py, infrastructure/cli/commands/*.py, infrastructure/cli/{paths,services}.py
**Что:** 8 команд в отдельных файлах. config.py → paths.py + services.py.
**Acceptance:**
- [ ] Каждая команда в cli/commands/*.py
- [ ] cli/paths.py — только пути
- [ ] cli/services.py — composition root
- [ ] Размер файлов < 100-150 LOC
- [ ] Поведение идентично
- [ ] pytest 63/63
---
## T7: Финальная валидация
**Зависимости:** T6
**Файлы:** tests/, README.md, pyproject.toml
**Что:** Прогнать pytest, ручная проверка CLI, обновить README.
**Acceptance:**
- [ ] pytest 63/63+
- [ ] cf init, cf forecast, cf scenario, cf compare — работают
- [ ] cf import data.xlsx → cf export — round-trip
- [ ] README.md обновлён под новую структуру