{ "request_id": "req-T5", "task_id": "T5", "title": "Dependency Injection — services через composition root", "status": "ready_for_review", "goal": "Убрать создание сервисов внутри других сервисов, инжектировать зависимости", "changes": { "summary": "AssistantService теперь принимает ForecastService через __init__ (раньше создавал new ForecastService() внутри analyze/advice). В infrastructure/cli/main.py добавлен _build_services() — composition root, собирающий граф зависимостей: CurrencyConverter, ForecastService, ScenarioService, AssistantService. Все CLI-команды (forecast, scenario, whatif, compare, analyze) используют _build_services(model) вместо прямого создания сервисов. test_ai.py обновлён.", "commits": ["541a768"], "files_changed": [ "infrastructure/ai/assistant.py", "infrastructure/cli/main.py", "tests/test_ai.py" ] }, "verification": { "tests_passed": "67/67", "no_internal_service_creation": "AssistantService больше не создаёт ForecastService внутри", "composition_root": "_build_services() в main.py", "cf_init_forecast_scenario_compare_whatif_analyze_works": true }, "fulfills_ac": [ "ForecastService(model) — через __init__", "ScenarioService(model) — через __init__", "AssistantService(model, forecast_service, converter) — через __init__", "Нет new ForecastService() внутри AssistantService", "CLI: composition root собирает граф", "pytest 67/67" ] }