{ "$schema": "metaagent-task-manifest", "version": "1.0", "session_id": "metaagent-003", "goal": "i18n (ru/en) — инфраструктура и обёртка строк, контроль актуальности переводов", "created_at": "2026-07-22T18:00:00Z", "tasks": [ { "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": [ "t() возвращает русский текст при CF_LANG=ru", "t() возвращает русский текст при CF_LANG=en (fallback)", "t('nonexistent') возвращает 'nonexistent'", "setup_i18n() читает CF_LANG из окружения" ], "status": "completed" }, { "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": [ "Все help-строки typer.Option/Argument через t()", "Все console.print сообщения через t()", "Все docstrings оставлены как комментарии (typer не использует)", "ruff check проходит" ], "status": "completed" }, { "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": [ "ANALYZE_PROMPT = t('prompt.analyze')", "ADVICE_PROMPT = t('prompt.advice')", "SCENARIO_COMPARISON_PROMPT = t('prompt.scenario_comparison')" ], "status": "completed" }, { "id": "T12", "title": "Тесты i18n", "description": "test_i18n.py: базовые тесты Translator, t(), set_lang, fallback, неизвестный ключ.", "type": "test", "files": ["tests/test_i18n.py"], "depends_on": ["T9"], "acceptance_criteria": [ "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" } ] }