Files
nifodea/.agent/tasks/manifest.md
T
oqyude 32b2f537a8 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).
2026-10-08 17:03:56 +03:00

124 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 обновлён под новую структуру