testing new features
This commit is contained in:
+9
-12
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"metaagent_version": "1.1.0",
|
||||
"session_id": "metaagent-002",
|
||||
"session_id": "metaagent-003",
|
||||
"target_repo": "S:\\Git\\nifodea",
|
||||
"goal": "Обновление metaagent-артефактов до v1.0.0, валидация существующего кода и окружения",
|
||||
"goal": "i18n (ru/en) — инфраструктура, обёртка строк, контроль переводов",
|
||||
"project_type": "existing",
|
||||
"config": {
|
||||
"depth": 4,
|
||||
@@ -18,17 +18,14 @@
|
||||
"red_team": "skipped",
|
||||
"decomposition": "completed",
|
||||
"environment": "completed",
|
||||
"handoff": "completed"
|
||||
"handoff": "pending"
|
||||
},
|
||||
"tasks": [
|
||||
{ "id": "T1", "title": "Инициализация проекта и зависимостей", "status": "completed", "depends_on": [], "acceptance_criteria": ["pyproject.toml создан", "Все __init__.py созданы", "ruff проходит", "pytest запускается"] },
|
||||
{ "id": "T2", "title": "Модель данных (dataclass + JSON)", "status": "completed", "depends_on": ["T1"], "acceptance_criteria": ["Все сущности dataclass", "FinancialModel save/load JSON"] },
|
||||
{ "id": "T3", "title": "Forecast Engine", "status": "completed", "depends_on": ["T2"], "acceptance_criteria": ["forecast_cashflow работает", "recurring проецируются", "активы/обязательства учтены"] },
|
||||
{ "id": "T4", "title": "Scenario Analysis", "status": "completed", "depends_on": ["T3"], "acceptance_criteria": ["3 сценария", "what-if модификация", "сравнение сценариев"] },
|
||||
{ "id": "T5", "title": "Excel Sync", "status": "completed", "depends_on": ["T2"], "acceptance_criteria": ["импорт из Excel", "экспорт в Excel", "ошибки невалидного формата"] },
|
||||
{ "id": "T6", "title": "CLI (Typer)", "status": "completed", "depends_on": ["T2","T3","T4","T5","T7"], "acceptance_criteria": ["init/forecast/analyze/import/export/scenario/whatif/compare команды"] },
|
||||
{ "id": "T7", "title": "AI Assistant", "status": "completed", "depends_on": ["T3"], "acceptance_criteria": ["промпты с моделью и прогнозом", "заглушка ответа"] },
|
||||
{ "id": "T8", "title": "Тесты", "status": "completed", "depends_on": ["T2","T3","T4","T5","T6","T7"], "acceptance_criteria": ["pytest проходит", "покрытие всех модулей"] }
|
||||
{ "id": "T9", "title": "i18n инфраструктура (cli/i18n.py)", "status": "completed", "depends_on": [], "acceptance_criteria": ["Translator, t(), setup_i18n(), set_lang()", "ru default, en fallback"] },
|
||||
{ "id": "T10", "title": "Обёртка CLI-строк в t()", "status": "completed", "depends_on": ["T9"], "acceptance_criteria": ["main.py + config.py через t()", "ruff check проходит"] },
|
||||
{ "id": "T11", "title": "AI-промпты через i18n", "status": "completed", "depends_on": ["T9"], "acceptance_criteria": ["prompts.py использует t()"] },
|
||||
{ "id": "T12", "title": "Тесты i18n", "status": "completed", "depends_on": ["T9"], "acceptance_criteria": ["pytest проходит"] },
|
||||
{ "id": "T13", "title": "Аудит и контроль актуальности переводов", "status": "pending", "depends_on": ["T9"], "acceptance_criteria": ["en-словарь синхронизирован с ru"] }
|
||||
],
|
||||
"last_updated": "2026-07-22T12:00:00Z"
|
||||
"last_updated": "2026-07-22T18:00:00Z"
|
||||
}
|
||||
|
||||
+51
-143
@@ -1,171 +1,79 @@
|
||||
{
|
||||
"$schema": "metaagent-task-manifest",
|
||||
"version": "1.0",
|
||||
"session_id": "metaagent-002",
|
||||
"goal": "Обновление metaagent-артефактов до v1.0.0, валидация существующего кода и окружения",
|
||||
"created_at": "2026-07-12T20:00:00Z",
|
||||
"session_id": "metaagent-003",
|
||||
"goal": "i18n (ru/en) — инфраструктура и обёртка строк, контроль актуальности переводов",
|
||||
"created_at": "2026-07-22T18:00:00Z",
|
||||
"tasks": [
|
||||
{
|
||||
"id": "T1",
|
||||
"title": "Инициализация проекта и зависимостей",
|
||||
"description": "Создать структуру директорий, pyproject.toml, venv, установить зависимости",
|
||||
"type": "config",
|
||||
"files": [
|
||||
"pyproject.toml",
|
||||
"cashflow_model/__init__.py",
|
||||
"sync/__init__.py",
|
||||
"engine/__init__.py",
|
||||
"ai/__init__.py",
|
||||
"cli/__init__.py",
|
||||
"data/.gitkeep",
|
||||
"exports/.gitkeep"
|
||||
],
|
||||
"id": "T9",
|
||||
"title": "i18n инфраструктура (cli/i18n.py)",
|
||||
"description": "Создан модуль cli/i18n.py с Translator, t(), set_lang(), setup_i18n(). Язык: CF_LANG (env), по умолчанию 'ru'. Русские переводы — полные, английский — скелет (fallback на ru).",
|
||||
"type": "feature",
|
||||
"files": ["cli/i18n.py"],
|
||||
"depends_on": [],
|
||||
"acceptance_criteria": [
|
||||
"pyproject.toml создан с правильными зависимостями",
|
||||
"Все директории модулей созданы с __init__.py",
|
||||
"ruff lint проходит без ошибок",
|
||||
"pytest запускается"
|
||||
"t() возвращает русский текст при CF_LANG=ru",
|
||||
"t() возвращает русский текст при CF_LANG=en (fallback)",
|
||||
"t('nonexistent') возвращает 'nonexistent'",
|
||||
"setup_i18n() читает CF_LANG из окружения"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T2",
|
||||
"title": "Модель данных (dataclass + JSON serialization)",
|
||||
"description": "Реализовать все сущности: Account, Transaction, RecurringCashflow, Asset, Liability, ForecastScenario, FinancialModel",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"cashflow_model/__init__.py",
|
||||
"cashflow_model/account.py",
|
||||
"cashflow_model/transaction.py",
|
||||
"cashflow_model/recurring.py",
|
||||
"cashflow_model/asset.py",
|
||||
"cashflow_model/liability.py",
|
||||
"cashflow_model/scenario.py",
|
||||
"cashflow_model/model.py"
|
||||
],
|
||||
"depends_on": ["T1"],
|
||||
"id": "T10",
|
||||
"title": "Обёртка CLI-строк в t()",
|
||||
"description": "Все user-facing строки в cli/main.py и cli/config.py заменены на вызовы t('key', ...). Русский словарь содержит ~150 ключей.",
|
||||
"type": "refactor",
|
||||
"files": ["cli/main.py", "cli/config.py"],
|
||||
"depends_on": ["T9"],
|
||||
"acceptance_criteria": [
|
||||
"Все сущности — dataclass с правильными полями и типами",
|
||||
"FinancialModel корректно сохраняется и загружается из JSON",
|
||||
"Создание Account, Transaction, Asset, Liability через конструктор работает"
|
||||
"Все help-строки typer.Option/Argument через t()",
|
||||
"Все console.print сообщения через t()",
|
||||
"Все docstrings оставлены как комментарии (typer не использует)",
|
||||
"ruff check проходит"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T3",
|
||||
"title": "Forecast Engine (базовый прогноз)",
|
||||
"description": "Реализовать ForecastService с методами forecast_cashflow, apply_recurring, project_balance",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"engine/__init__.py",
|
||||
"engine/forecast.py"
|
||||
],
|
||||
"depends_on": ["T2"],
|
||||
"id": "T11",
|
||||
"title": "AI-промпты через i18n",
|
||||
"description": "prompt.analyze, prompt.advice, prompt.scenario_comparison добавлены в словарь i18n, prompts.py использует t().",
|
||||
"type": "refactor",
|
||||
"files": ["ai/prompts.py"],
|
||||
"depends_on": ["T9"],
|
||||
"acceptance_criteria": [
|
||||
"forecast_cashflow(months=12) возвращает список помесячных балансов",
|
||||
"Регулярные платежи корректно проецируются на будущие периоды",
|
||||
"Активы учитываются с ростом (growth_rate)",
|
||||
"Обязательства учитываются с процентами и платежами"
|
||||
"ANALYZE_PROMPT = t('prompt.analyze')",
|
||||
"ADVICE_PROMPT = t('prompt.advice')",
|
||||
"SCENARIO_COMPARISON_PROMPT = t('prompt.scenario_comparison')"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T4",
|
||||
"title": "Scenario Analysis",
|
||||
"description": "Реализовать ScenarioService с методами: сценарии, what-if, сравнение",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"engine/__init__.py",
|
||||
"engine/scenarios.py"
|
||||
],
|
||||
"depends_on": ["T3"],
|
||||
"acceptance_criteria": [
|
||||
"Три предустановленных сценария (baseline, optimistic, pessimistic)",
|
||||
"What-if: изменение параметров (доход +10%, расход -5%)",
|
||||
"Сравнение сценариев возвращает сводку различий"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T5",
|
||||
"title": "Excel Sync (import/export)",
|
||||
"description": "Реализовать ExcelSync: чтение модели из .xlsx, запись результатов прогноза в .xlsx",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"sync/__init__.py",
|
||||
"sync/excel_sync.py"
|
||||
],
|
||||
"depends_on": ["T2"],
|
||||
"acceptance_criteria": [
|
||||
"Импорт из Excel заполняет FinancialModel",
|
||||
"Экспорт FinancialModel в Excel создаёт корректный .xlsx",
|
||||
"Обработка ошибок при невалидном формате Excel"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T6",
|
||||
"title": "CLI (Typer) — все команды",
|
||||
"description": "Реализовать CLI через Typer с командами: init, import, export, forecast, scenario, analyze, whatif, compare",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"cli/__init__.py",
|
||||
"cli/main.py",
|
||||
"pyproject.toml"
|
||||
],
|
||||
"depends_on": ["T2", "T3", "T4", "T5", "T7"],
|
||||
"acceptance_criteria": [
|
||||
"Команда 'cf init' создаёт пустую модель и JSON",
|
||||
"Команда 'cf forecast --months 12' выводит таблицу прогноза",
|
||||
"Команда 'cf analyze' вызывает AI Assistant",
|
||||
"Команда 'cf import' и 'cf export' работают с Excel",
|
||||
"Команда 'cf scenario' применяет и выводит сценарий",
|
||||
"Команда 'cf whatif' выполняет what-if анализ",
|
||||
"Команда 'cf compare' сравнивает сценарии"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T7",
|
||||
"title": "AI Assistant (промпты + интерфейс)",
|
||||
"description": "Реализовать AssistantService: генерация промптов, заглушка для вызова AI API",
|
||||
"type": "feature",
|
||||
"files": [
|
||||
"ai/__init__.py",
|
||||
"ai/prompts.py",
|
||||
"ai/assistant.py"
|
||||
],
|
||||
"depends_on": ["T3"],
|
||||
"acceptance_criteria": [
|
||||
"Промпт 'analyze' включает модель и прогноз в JSON",
|
||||
"Промпт 'advice' формирует запрос на финансовые рекомендации",
|
||||
"AssistantService возвращает структурированный ответ (заглушка)"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T8",
|
||||
"title": "Тесты на все модули",
|
||||
"description": "Написать pytest-тесты для всех модулей",
|
||||
"id": "T12",
|
||||
"title": "Тесты i18n",
|
||||
"description": "test_i18n.py: базовые тесты Translator, t(), set_lang, fallback, неизвестный ключ.",
|
||||
"type": "test",
|
||||
"files": [
|
||||
"tests/test_model.py",
|
||||
"tests/test_forecast.py",
|
||||
"tests/test_scenarios.py",
|
||||
"tests/test_excel_sync.py",
|
||||
"tests/test_cli.py",
|
||||
"tests/test_ai.py",
|
||||
"tests/conftest.py"
|
||||
],
|
||||
"depends_on": ["T2", "T3", "T4", "T5", "T6", "T7"],
|
||||
"files": ["tests/test_i18n.py"],
|
||||
"depends_on": ["T9"],
|
||||
"acceptance_criteria": [
|
||||
"pytest запускается и все тесты проходят",
|
||||
"Покрытие базовых сценариев для каждой сущности",
|
||||
"Roundtrip-тест Excel: export → import → compare",
|
||||
"Forecast-тест: известные входные данные → ожидаемый результат"
|
||||
"pytest tests/test_i18n.py проходит",
|
||||
"Покрытие: ru default, en fallback, неизвестный ключ, format args"
|
||||
],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "T13",
|
||||
"title": "Аудит и контроль актуальности переводов",
|
||||
"description": "Периодическая проверка: все ли ключи из TRANSLATIONS['ru'] имеют соответствующий перевод в TRANSLATIONS['en']. При добавлении новых фич — новые ключи должны добавляться в оба словаря.",
|
||||
"type": "audit",
|
||||
"files": ["cli/i18n.py"],
|
||||
"depends_on": ["T9"],
|
||||
"acceptance_criteria": [
|
||||
"Все ru-ключи имеют en-перевод или fallback",
|
||||
"При добавлении нового t('key') он регистрируется в _r()"
|
||||
],
|
||||
"status": "pending"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user