_version: 2

# NOTE: i18n strings are placeholders; English-only unless explicitly requested.
# CLI help
cli:
  description:
    en: "A tool for managing LLM application rules(prompts) ..."

  config_dir_help:
    en: "Specify configuration directory path"

  log_level_help:
    en: "Set log level"

  verbose_help:
    en: "Verbose output"

# Prompt subcommands
prompt:
  about:
    en: "Manage prompt rule files (alias: rule)"

  gen:
    about:
      en: "Generate rule file"

    interactive_help:
      en: "Use interactive mode"

    app_help:
      en: "Target application name (e.g.: cursor)"

    template_help:
      en: "Template name"

    name_help:
      en: "Rule name (optional, defaults to template name)"

    scope_help:
      en: "Injection scope(s): global and/or project (repeatable, or comma-separated)"

    force_help:
      en: "Force generation, skip repository detection"

  scope:
    select:
      en: "Select injection scope:"

  codex:
    target:
      select:
        en: "Select Codex injection target(s):"

    agents_file:
      select:
        en: "Select Codex agents file:"

  list:
    about:
      en: "List rule files"

    app_help:
      en: "Specify application name"

    app_header:
      en: "📁 %{app}:"

    rule_item:
      en: "📄 %{name}"

  upsert:
    about:
      en: "Update or insert rule file"

    app_help:
      en: "Application name"

    name_help:
      en: "Rule name"

    content_help:
      en: "Rule content"

    file_help:
      en: "File path containing rule content"

  rm:
    about:
      en: "Remove rule file"

    app_help:
      en: "Application name"

    name_help:
      en: "Rule name"

# Interactive prompts
interactive:
  title:
    en: "🚀 Interactive rule file generation"

  select_app:
    en: "Select target application:"

  select_template:
    en: "Select template:"

  input_name:
    en: "Enter rule name:"

  name_help:
    en: "Rule name will be used as filename"

  input_target_dir:
    en: "Target output directory:"

  target_dir_help:
    en: "Where to write generated rule files"

  project_root_force_prompt:
    en: "No git repository detected. Continue using current directory as project root? (equivalent to --force)"

  no_templates:
    en: "⚠️  No templates available, nothing to generate"

  no_templates_hint:
    en: "Hint: add a template with `llman x <app> prompts upsert --name <name> --content <content>`"

# Messages
messages:
  error:
    en: "Error: %{error}"

  log_level_set:
    en: "Log level set to: %{level}"

  verbose_level:
    en: "Verbose level: %{level}"

  file_exists_overwrite:
    en: "File %{path} already exists, overwrite?"

  operation_cancelled:
    en: "Operation cancelled"

  rule_generated:
    en: "✅ Rule file generated: %{path}"

  rule_generation_success:
    en: "✅ Rule file generated successfully!"

  rule_saved:
    en: "✅ Rule saved: %{path}"

  confirm_delete:
    en: "Are you sure you want to delete rule '%{name}'?"

  file_exists_inject:
    en: "File %{path} exists and is not managed by llman. Inject a managed block?"

  file_exists_inject_second:
    en: "This will modify %{path}. Are you REALLY sure?"

  rule_deleted:
    en: "✅ Rule deleted: %{name}"

  content_or_file_required:
    en: "Must provide content or file path"

# Errors
errors:
  unknown_subcommand:
    en: "Unknown subcommand"

  subcommand_required:
    en: "Subcommand is required"

  unknown_prompt_subcommand:
    en: "Unknown prompt subcommand"

  not_find_config_dir:
    en: "Cannot find config directory"

  dev_project_config_required:
    en: "🚨 Error: Running within llman development project\n💡 You must specify --config-dir to avoid conflicts with user configurations\n   Example: --config-dir ./artifacts/testing_config_home\n   Alternatively, set %{env_var} environment variable"

  invalid_config_dir:
    en: "Invalid config directory: %{error}"

  invalid_config_dir_env:
    en: "Invalid config directory in environment variable: %{error}"

  io_error:
    en: "IO Error: %{error}"

  file_read_failed:
    en: "Failed to read %{path}: %{error}"

  inquire_error:
    en: "Inquire Error: %{error}"

  database_error:
    en: "Database Error: %{error}"

  connection_error:
    en: "Connection Error: %{error}"

  json_error:
    en: "JSON Parse Error: %{error}"

  glob_error:
    en: "Glob Pattern Error: %{error}"

  glob_pattern_error:
    en: "Glob Pattern Match Error: %{error}"

  config_error:
    en: "Configuration Error: %{message}"

  custom_error:
    en: "Custom Error: %{message}"

  invalid_app:
    en: "Invalid application type: %{app}"

  not_project_directory:
    en: "Current directory is not a valid project directory"

  home_directory_not_allowed:
    en: "Home directory access not allowed"

  home_dir_missing:
    en: "Cannot find home directory"

  project_scope_requires_repo:
    en: "Project scope requires a git repository (or use --force / remove project from --scope)"

  invalid_scope_for_app:
    en: "Invalid scope '%{scope}' for app '%{app}'"

  invalid_prompt_target_for_app:
    en: "Invalid --target/--override for app '%{app}'"

  override_requires_agents_target:
    en: "--override requires --target project-doc"

  non_interactive_overwrite_requires_force:
    en: "Non-interactive mode cannot overwrite %{path}; re-run with --force"

  non_interactive_inject_requires_force:
    en: "Non-interactive mode cannot modify existing %{path}; re-run with --force"

  non_interactive_delete_requires_yes:
    en: "Non-interactive mode cannot delete rule '%{name}'; re-run with --yes"

  rule_not_found:
    en: "Rule not found: %{name}"

  interactive_prompt_error:
    en: "Interactive prompt error: %{error}"

  no_rules_found:
    en: "No rules found"

  not_find_user_cursor_dir:
    en: "Cannot find user cursor main directory"

# Cursor features
cursor:
  about:
    en: "Cursor-related features"

  database:
    using_db:
      en: "Using database"

    using_global_db:
      en: "Using global database"

    workspace_path_not_exist:
      en: "Cursor workspace storage path does not exist: %{path}"

    no_workspace_db_found:
      en: "No Cursor workspace database files found"

    home_dir_error:
      en: "Cannot find home directory"

    cursor_dir_not_found:
      en: "Cursor directory not found: %{path}"

  workspace:
    scanning_workspaces:
      en: "🔍 Scanning available workspaces..."

    found_workspaces:
      en: "✅ Found %{count} workspaces"

    auto_select:
      en: "Auto selected"

    select_workspace:
      en: "📁 Please select workspace to export conversations"

    selected_not_found:
      en: "Selected workspace not found"

    no_workspaces:
      en: "❌ No Cursor workspaces found"

    workspace_mapping_failed:
      en: "⚠️ Unable to map workspace: %{id}"

    unknown_path:
      en: "Unknown path"

    unknown_name:
      en: "Unknown"

    current_dir:
      en: "Current directory"

  export:
    about:
      en: "Export Cursor AI conversations to local files"

    interactive_help:
      en: "Use interactive mode to select and export conversations"

    db_path_help:
      en: "Specify Cursor database file path"

    workspace_dir_help:
      en: "Specify workspace directory to avoid interactive selection"

    output_mode_help:
      en: "Output mode: console, file, single-file"

    output_file_help:
      en: "Output filename (used when output-mode is file or single-file)"

    composer_id_help:
      en: "Directly specify composer ID for export"

    debug_help:
      en: "Enable debug mode, show detailed processing information"

    debug_non_interactive:
      en: "[DEBUG] Non-interactive export mode"

    debug_workspace_dir:
      en: "[DEBUG] workspace_dir: %{path}"

    debug_composer_id:
      en: "[DEBUG] composer_id: %{id}"

    debug_output_mode:
      en: "[DEBUG] output_mode: %{mode}"

    debug_output_file:
      en: "[DEBUG] output_file: %{file}"

    debug_exporting_composer:
      en: "[DEBUG] Exporting composer: %{id}"

    debug_exporting_file:
      en: "[DEBUG] Exporting to file: %{filename}"

    none:
      en: "none"

    title:
      en: "🎯 Cursor Conversation Export Tool"

    scanning:
      en: "🔍 Scanning Cursor conversation records..."

    found_conversations:
      en: "✅ Found %{count} conversations"

    no_conversations:
      en: "❌ No conversation records found"

    no_selection:
      en: "❌ No conversations selected"

    composer_not_found:
      en: "Composer ID not found: %{id}"

    selected_conversation_not_found:
      en: "Selected conversation not found: %{id}"

    unsupported_output_mode:
      en: "Unsupported output mode: %{mode}"

    invalid_output_dir:
      en: "Invalid output directory: %{path} (%{error})"

    invalid_db_path:
      en: "Invalid db_path"

    invalid_workspace_db_path:
      en: "Invalid workspace db path"

    workspace_dir_not_exist:
      en: "Workspace directory does not exist: %{path}"

    workspace_not_found:
      en: "Workspace not found for path: %{path}"

    select_conversations:
      en: "📝 Please select conversations to export"

    select_help:
      en: "Use space to select/deselect, Enter to confirm"

    search_more:
      en: "🔍 Search more conversations..."

    search_keyword:
      en: "🔍 Please enter search keyword"

    search_help:
      en: "Enter title, content or any relevant keywords to search"

    search_no_results:
      en: "❌ No matching conversations found"

    search_found:
      en: "✅ Found %{count} matching conversations"

    select_search_results:
      en: "📋 Please select search results"

    select_export_method:
      en: "📤 Please select export method"

    export_to_console:
      en: "🖥️ Export to console"

    export_to_files:
      en: "📁 Export as multiple files"

    export_to_single_file:
      en: "📄 Export as single file"

    exported_content_title:
      en: "📋 Exported conversation content"

    console_separator_char:
      en: "="

    console_item_separator_char:
      en: "-"

    input_output_dir:
      en: "📁 Please enter output directory path"

    output_dir_created:
      en: "✅ Output directory created: %{path}"

    export_success_file:
      en: "✅ Export successful: %{path}"

    export_success_summary:
      en: "🎉 Successfully exported %{count} conversations to: %{path}"

    input_filename:
      en: "📄 Please enter filename"

    export_time_label:
      en: "Export time"

    conversation_count_label:
      en: "Conversation count"

    single_file_title:
      en: "# Cursor Conversation Export\n\n"

    export_time:
      en: "**Export time:** %{time}\n"

    conversation_count:
      en: "**Conversation count:** %{count}\n\n"

    export_success_single:
      en: "✅ Export successful: %{filename}"

    untitled_conversation:
      en: "Untitled Conversation"

    user_message:
      en: "User"

    ai_message:
      en: "AI Assistant"

    message_number:
      en: "Message %{number}"

    message_count:
      en: "%{count} messages"

    composer_chat:
      en: "Composer conversation"

    conversation_type_chat:
      en: "(chat)"

    conversation_type_composer:
      en: "(Composer)"

    last_updated:
      en: "**Last updated:** %{time}\n\n"

    terminal_output:
      en: "**Terminal output:**"

    raw_text:
      en: "**Raw text:**"

    selected_file:
      en: "**Selected file:** %{path}"

    message_with_id:
      en: "*%{type} message (ID: %{id})*"

    unknown_id:
      en: "Unknown"

    mixed_conversations:
      en: "Contains %{traditional} traditional conversations and %{composer} Composer conversations"

    composer_mode_chat:
      en: "Chat"

    composer_mode_agent:
      en: "Agent"

    composer_mode_edit:
      en: "Edit"

    composer_mode_label:
      en: "Mode"

    composer_content_note:
      en: "Note: Specific content of Composer conversations is not yet supported for export."

    type_traditional:
      en: "Traditional Chat"

    type_composer_chat:
      en: "Composer Chat"

    type_composer_agent:
      en: "Composer Agent"

    type_composer_edit:
      en: "Composer Edit"

# Tooling utilities
tool:
  clean_comments:
    start:
      en: "Clean useless comments command"

    config_explicit:
      en: "Using explicit config: %{path}"

    config_local:
      en: "Using local config: %{path}"

    config_global:
      en: "Using global config"

    scope_includes:
      en: "Scope includes: %{patterns}"

    scope_excludes:
      en: "Scope excludes: %{patterns}"

    dry_run_enabled:
      en: "Dry run mode enabled - no files will be modified"

    dry_run_hint:
      en: "Use -y to apply changes."

    interactive_enabled:
      en: "Interactive mode enabled"

    safety_dry_run_first:
      en: "Safety: dry-run-first is enabled; running in dry-run mode only."

    safety_dry_run_first_hint:
      en: "Re-run with -y --force to apply changes."

    git_dirty:
      en: "Working tree has uncommitted changes; commit before running or use --force"

    require_git_commit_no_repo:
      en: "Warning: require-git-commit enabled but no git repository detected."

    cancel:
      en: "Operation cancelled by user."

    summary_title:
      en: "=== Processing Complete ==="

    summary_files_changed:
      en: "Files changed: %{count}"

    summary_comments_removed:
      en: "Comments removed: %{count}"

    summary_errors:
      en: "Errors: %{count}"

    summary_modified_files:
      en: "Modified files:"

    confirm_title:
      en: "=== Clean Useless Comments ==="

    confirm_intro:
      en: "This operation will remove comments from your source code files."

    confirm_config:
      en: "Using configuration: %{path}"

    confirm_files:
      en: "Files to process:"

    confirm_mode_dry:
      en: "Mode: Dry run (no files will be modified)"

    confirm_mode_live:
      en: "Mode: Live (files will be modified)"

    confirm_prompt:
      en: "Do you want to continue?"

    confirm_help:
      en: "This will start the comment cleaning process"

    warn_not_git_repo:
      en: "Warning: target path is not inside a git repository:"

    processor:
      init_tree_sitter_failed:
        en: "Warning: Failed to initialize TreeSitter processor: %{error}"

      config_missing:
        en: "No clean useless comments configuration found"

      processing_files:
        en: "Processing files..."

      processing_file:
        en: "Processing: %{path}"

      file_removed_comments:
        en: "File: %{path} - Removed %{count} comments"

      error_processing:
        en: "Error processing %{path}: %{error}"

      git_only_no_repo:
        en: "Warning: git-only enabled but no git repository detected."

      file_not_tracked:
        en: "Warning: File not tracked by git: %{path}"

      file_not_found:
        en: "Warning: File not found: %{path}"

      path_skipped_not_file:
        en: "Warning: Skipping non-file path: %{path}"

      path_symlink_skipped:
        en: "Warning: Skipping symlink path: %{path}"

      path_outside_root:
        en: "Warning: Skipping path outside working tree: %{path}"

      path_resolve_failed:
        en: "Warning: Failed to resolve path: %{path} (%{error})"

      walk_error:
        en: "Error walking directory: %{error}"

      preserve_patterns_found:
        en: "Found %{count} preserve patterns"

      debug_line:
        en: "Processing line: '%{line}'"

      debug_comment:
        en: "  - comment: '%{comment}'"

      debug_should_preserve:
        en: "  - should_preserve: %{preserve}"

      debug_comment_too_short:
        en: "  - comment_too_short: %{too_short} (len: %{len}, min: %{min})"

      debug_would_remove:
        en: "  - would remove: %{remove}"

      regex_build_failed:
        en: "Failed to build regex: %{error}"

      tree_sitter_unavailable:
        en: "Tree-sitter unavailable for %{path}"

      tree_sitter_failed:
        en: "Tree-sitter processing failed for %{path}: %{error}"

  sync_ignore:
    start:
      en: "Sync ignore rules"

    dry_run_hint:
      en: "Dry-run only. Re-run with -y/--yes to apply changes."

    apply_done:
      en: "Done."

    cancelled:
      en: "Operation cancelled."

    preview:
      root:
        en: "Root: %{path}"

      sources_title:
        en: "Sources:"

      sources_none:
        en: "(none found)"

      union_stats:
        en: "Union: ignore=%{ignore}, include=%{include}"

      targets_title:
        en: "Targets:"

      detail_title:
        en: "=== Write preview: %{path} ==="

      claude_added_title:
        en: "=== Claude additions: %{path} (+%{count}) ==="

      dry_run_default:
        en: "Default mode is dry-run."

      action:
        create:
          en: "create"
        update:
          en: "update"
        unchanged:
          en: "unchanged"
        delete:
          en: "delete"

      table:
        header:
          target:
            en: "TARGET"
          action:
            en: "ACTION"
          ignore:
            en: "ignore"
          include:
            en: "include"
          notes:
            en: "notes"
        value:
          none:
            en: "-"

      notes:
        claude_added:
          en: "+%{count} Read()"
        warn_count:
          en: "warn=%{count}"

      warnings_title:
        en: "Warnings:"

      notes_title:
        en: "Notes:"

      truncated_lines:
        en: "... (%{count} more line(s); use -v for full output)"

      truncated_items:
        en: "... (%{count} more item(s); use -v for full output)"

      delete_title:
        en: "=== Delete: %{path} ==="

    interactive:
      select_targets:
        en: "Select outputs to sync:"

      exists:
        en: "exists"

      missing:
        en: "missing"

      confirm_delete:
        en: "You deselected %{path}. Delete it?"

      confirm_apply:
        en: "Apply changes?"

    warn:
      include_not_supported_in_claude:
        en: "Claude Code deny rules do not support include (!pattern); skipped %{count} include pattern(s)."
      claude_jsonc_patch_fallback:
        en: "Could not patch JSONC in-place for %{path}; overwriting with pretty JSON (comments may be lost)."

    note:
      no_sources:
        en: "No source ignore files found."

      claude_skip_non_read:
        en: "Claude deny rule skipped (only Read(...) is supported): %{rule}"

      claude_missing_permissions:
        en: "Note: Claude settings has no 'permissions' object; one will be created if applying."

    error:
      no_git_repo:
        en: "No git repository detected; re-run with --force to use the current directory as root."
      unsupported_json_input:
        en: "Unsupported JSON input: %{path} (only .claude/settings*.json is supported)."
      gitignore_not_supported:
        en: "This tool does not process .gitignore (it is already respected by most tools): %{path}"

      read_failed:
        en: "Failed to read %{path}"

      parse_claude_failed:
        en: "Failed to parse Claude Code settings (JSON/JSONC)."

      serialize_failed:
        en: "Failed to serialize updated settings."

      create_dir_failed:
        en: "Failed to create directory: %{path}"

      write_failed:
        en: "Failed to write %{path}"

      delete_failed:
        en: "Failed to delete %{path}"

  config:
    not_found:
      en: "Configuration file not found: %{path}"

    parse_failed:
      en: "Failed to parse configuration: %{error}"

    schema_invalid:
      en: "Configuration does not match schema: %{path} (%{error})"

    not_found_with_priority:
      en: "No configuration file found. Tried local: %{local} and global config"

    schema_generate_failed:
      en: "Failed to generate JSON schema: %{error}"

    legacy_key_unsupported:
      en: "Legacy config key is not supported: %{key} (use %{replacement})"

  tree_sitter:
    set_language_failed:
      en: "Failed to set language: %{error}"

    parse_content_failed:
      en: "Failed to parse content"

  rm_empty_dirs:
    start_title:
      en: "Remove useless directories"

    target_label:
      en: "Target: %{path}"

    dry_run_enabled:
      en: "Dry run mode enabled (use -y to delete)."

    live_mode_enabled:
      en: "Live mode enabled (useless directories will be removed)."

    prune_ignored_enabled:
      en: "Prune ignored entries enabled (ignored files/dirs may be deleted)."

    verbose_gitignore_using:
      en: "Using .gitignore: %{path}"

    verbose_gitignore_none:
      en: "No .gitignore configured."

    note_root_would_be_empty:
      en: "Note: target directory would be empty after removal; root directory is not removed."

    note_root_empty:
      en: "Note: target directory is empty; root directory is not removed."

    summary_title:
      en: "=== Summary ==="

    summary_empty_dirs_found:
      en: "Useless directories found: %{count}"

    summary_empty_dirs_removed:
      en: "Useless directories removed: %{count}"

    summary_empty_dirs_failed:
      en: "Useless directories failed: %{count}"

    summary_dirs_scanned:
      en: "Directories scanned: %{count}"

    summary_files_scanned:
      en: "Files scanned: %{count}"

    summary_ignored_entries_zero:
      en: "Ignored entries: 0"

    summary_ignored_entries:
      en: "Ignored entries: %{total} (dirs: %{dirs}, files: %{files})"

    summary_errors:
      en: "Errors: %{count}"

    list_to_remove:
      en: "Directories to remove"

    list_removed:
      en: "Directories removed"

    deprecated_alias_warning:
      en: "Command rm-empty-dirs is deprecated; use rm-useless-dirs instead."

    skipping_protected_path:
      en: "Skipping protected path: %{path}"

    list_failed_title:
      en: "Directories failed to remove"

    skipping_ignored_path:
      en: "Skipping ignored path: %{path}"

    would_remove_dir:
      en: "Would remove: %{path}"

    removing_dir:
      en: "Removing: %{path}"

    would_remove_ignored_file:
      en: "Would remove ignored file: %{path}"

    removing_ignored_file:
      en: "Removing ignored file: %{path}"

    error:
      target_not_exist:
        en: "Target path does not exist: %{path}"

      target_not_dir:
        en: "Target path is not a directory: %{path}"

      read_dir_failed:
        en: "Warning: failed to read directory %{path}: %{error}"

      read_entry_failed:
        en: "Warning: failed to read entry in %{path}: %{error}"

      read_file_type_failed:
        en: "Warning: failed to read file type for %{path}: %{error}"

      remove_dir_failed:
        en: "Warning: failed to remove %{path}: %{error}"

      remove_ignored_file_failed:
        en: "Warning: failed to remove ignored file %{path}: %{error}"

      gitignore_not_exist:
        en: ".gitignore path does not exist: %{path}"

      gitignore_not_file:
        en: ".gitignore path is not a file: %{path}"

      gitignore_parse_warning:
        en: "Warning: failed to fully parse %{path}: %{error}"

# Extensions
x:
  about:
    en: "Extended features"

# Composer
composer:
  untitled_chat:
    en: "Untitled Chat"

  untitled_agent:
    en: "Untitled Agent"

  untitled_edit:
    en: "Untitled Edit"

# Claude Code configuration
claude_code:
  interactive:
    select_config_group:
      en: "Select a configuration group to activate:"

    import_title:
      en: "Import configuration group from JSON"

    config_group_name:
      en: "Configuration group name:"

    multi_line_json:
      en: "Multi-line JSON Input"

    you_can_now_paste:
      en: "You can now paste multi-line JSON!"

    supported_formats:
      en: "Supported formats"

    format_1:
      en: "Format 1: {\"env\": {...}}"

    format_2:
      en: "Format 2: {\"KEY\": \"value\", ...}"

    how_to_use_editor:
      en: "How to use the editor"

    paste_json:
      en: "Paste your JSON"

    supports_multiple_lines:
      en: "supports multiple lines"

    navigate:
      en: "Use arrow keys to navigate"

    use_arrow_keys:
      en: "use arrow keys"

    finish:
      en: "Press Enter on empty line or Ctrl+D to finish"

    ctrl_d_or_enter:
      en: "Ctrl+D or Enter on empty line"

    cancel:
      en: "Press Esc to cancel"

    esc:
      en: "Esc"

    example:
      en: "Example"

    json_example:
      en: "{\n  \"env\": {\n    \"ANTHROPIC_BASE_URL\": \"https://api.anthropic.com\",\n    \"ANTHROPIC_AUTH_TOKEN\": \"your-api-key\",\n    \"ANTHROPIC_MODEL\": \"claude-3-5-sonnet-20241022\"\n  }\n}"

    json_configuration:
      en: "JSON configuration:"

    editor_help:
      en: "Paste the complete JSON configuration here (multi-line supported). Press Ctrl+D or Enter on empty line to finish."

    editor_empty:
      en: "<empty>"

    editor_summary:
      en: "%{lines} lines, %{chars} chars"

    warning_empty_config:
      en: "Warning: No environment variables found in the JSON configuration."

    confirm_empty_import:
      en: "Continue importing empty configuration?"

    parsed_env_vars:
      en: "Parsed environment variables:"

    confirm_import:
      en: "Import configuration group \"%{name}\"?"

    import_cancelled:
      en: "Import cancelled."

    check_format_retry:
      en: "Please check your JSON format and try again."

    no_config_groups:
      en: "No configuration groups found."

    use_import_command:
      en: "Use 'llman x claude-code account import' to import a new configuration."

    config_file_location:
      en: "Create a configuration file at"

    unknown_path:
      en: "unknown"

    example_configuration:
      en: "Example configuration"

    toml_example:
      en: "[groups]\n\n[groups.my-group]\nANTHROPIC_BASE_URL = \"https://api.anthropic.com\"\nANTHROPIC_AUTH_TOKEN = \"your-api-key-here\"\nANTHROPIC_MODEL = \"claude-3-5-sonnet-20241022\""

    no_env_vars:
      en: "no environment variables set"

    configuration_groups:
      en: "Configuration groups"

    see_examples:
      en: "See examples"

    import_from_klaudes:
      en: "Found existing klaudes configuration. Would you like to import it?"

  config:
    read_failed:
      en: "Failed to read config file: %{path}"

    parse_all_failed:
      en: "Failed to parse TOML config file (both old and new formats)"

    parse_new_failed:
      en: "Failed to parse new format config"

    parse_old_failed:
      en: "Failed to parse old format config"

    project_dir_not_found:
      en: "Could not find project directory"

    create_dir_failed:
      en: "Failed to create config directory: %{path}"

    serialize_failed:
      en: "Failed to serialize config to TOML"

    write_failed:
      en: "Failed to write config file: %{path}"

    metadata_failed:
      en: "Failed to get file metadata"

    permissions_failed:
      en: "Failed to set file permissions"

    json_repairing:
      en: "⚠️  JSON format appears to be malformed, attempting to repair..."

    json_repaired:
      en: "✅ Successfully repaired JSON format"

    json_repair_failed:
      en: "Failed to parse JSON string even after repair attempts: %{error}"

    json_env_invalid:
      en: "env field must be an object"

    json_must_object:
      en: "JSON must be an object"

  validation:
    name_required:
      en: "Group name is required"

    no_spaces:
      en: "Group name cannot contain spaces"

  main:
    no_configs_found:
      en: "No configuration groups found."

    suggestion_import:
      en: "Suggestions:"

    command_import:
      en: "• Import a configuration: llman x claude-code account import"

    command_edit:
      en: "• Edit configuration: llman x claude-code account edit"

    alternative_config:
      en: "Or create a configuration file manually at:"

    unknown_path:
      en: "unknown"

  account:
    config_created:
      en: "Created default configuration at: %{path}"

    editing:
      en: "Editing configuration: %{path}"

    edited:
      en: "✓ Configuration edited successfully"

    group_exists:
      en: "Configuration group \"%{name}\" already exists."

    use_different_name_or_force:
      en: "Use a different name, edit the configuration manually, or use --force to overwrite."

    overwriting_group:
      en: "Overwriting existing configuration group: \"%{name}\""

    import_success:
      en: "✓ Successfully imported configuration group: \"%{name}\""

    group_not_found:
      en: "Configuration group \"%{name}\" not found."

    use_list_command:
      en: "Use 'llman x claude-code account list' to see available configuration groups."

    env_invalid_keys:
      en: "Invalid environment variable key(s): %{keys}"

  migrate:
    import_failed:
      en: "Failed to import from klaudes"

    check_klaudes_installation:
      en: "Please check if klaudes is installed and has configuration."

    import_success:
      en: "✅ Successfully imported configuration from klaudes"

    cancelled:
      en: "Migration cancelled."

  run:
    interactive:
      prompt_args:
        en: "Do you want to pass arguments to claude?"
      enter_args:
        en: "Enter arguments for claude command:"
      args_help:
        en: "e.g., --version --help project create"
      args_parse_failed:
        en: "Invalid argument string: %{error}. Please try again."
    using_config:
      en: "Using configuration: %{name}"
    session_ended:
      en: "👋 Session ended. You were using: %{name}"
    error:
      group_required_non_interactive:
        en: "Error: In non-interactive mode, --group is required"
      use_i_or_group:
        en: "Use -i for interactive mode or specify --group <name>"

  error:
    parsing_json:
      en: "Error parsing JSON configuration"

    open_editor_failed:
      en: "Failed to open editor: %{editor}"

    invalid_editor_command:
      en: "Invalid editor command: %{editor} (%{error})"

    editor_exit_status:
      en: "Editor exited with status: %{status}"

    failed_claude_command:
      en: "Failed to run claude command"

    load_config_failed:
      en: "Failed to load configuration"

    execute_failed:
      en: "Failed to execute claude command"

    save_after_import_failed:
      en: "Failed to save configuration after import"

    no_configuration_selected:
      en: "No configuration selected"

    prompt_args_failed:
      en: "Failed to prompt for arguments"

    args_input_failed:
      en: "Failed to get claude arguments"

    select_config_failed:
      en: "Failed to select configuration group"

    input_group_name_failed:
      en: "Failed to input group name"

    input_json_failed:
      en: "Failed to input JSON configuration"

    confirm_import_failed:
      en: "Failed to confirm import"

  security:
    parse_error:
      en: "Error parsing settings file %{path}: %{error}"

    read_settings_failed:
      en: "Failed to read settings file: %{path}"

    parse_json_failed:
      en: "Failed to parse JSON even after repair: %{error}"

    reason_pattern_detected:
      en: "Dangerous command pattern detected: %{pattern}"

    warning_header:
      en: "%{count} Security Warnings Detected:"

    warning_separator_char:
      en: "═"

    warning_item_title:
      en: "Dangerous Permission Detected"

    label_location:
      en: "Location:"

    label_setting:
      en: "Setting:"

    label_pattern:
      en: "Pattern:"

    label_description:
      en: "Description:"

    label_recommendation:
      en: "Recommendation:"

    footer_line1:
      en: "These permissions are defined in your Claude Code settings but conflict with"

    footer_line2:
      en: "security rules in <llman config>/claude-code.toml"

    severity:
      critical:
        en: "CRITICAL"
      high:
        en: "HIGH"
      medium:
        en: "MEDIUM"
      low:
        en: "LOW"

    pattern:
      rm_rf:
        description:
          en: "Force deletion of files and directories without confirmation"
        recommendation:
          en: "This can cause irreversible data loss. Consider using more specific permissions or add confirmation prompts."

      sudo_rm:
        description:
          en: "Deletion of files with root privileges"
        recommendation:
          en: "Extremely dangerous as it can delete system files. Always avoid in automated tools."

      dd_if:
        description:
          en: "Raw disk writing that can destroy filesystems"
        recommendation:
          en: "This can wipe entire disks or partitions. Use with extreme caution."

      mkfs_or_format:
        description:
          en: "Filesystem formatting that destroys all data"
        recommendation:
          en: "This will erase all data on the target filesystem. Double-check targets."

      chmod_777:
        description:
          en: "Setting world-writable permissions on files"
        recommendation:
          en: "This creates serious security vulnerabilities. Use more specific permissions."

      chown_root:
        description:
          en: "Changing file ownership to root"
        recommendation:
          en: "Can lead to privilege escalation vulnerabilities. Verify ownership changes carefully."

      curl_or_wget_sh:
        description:
          en: "Downloading and executing scripts from the internet"
        recommendation:
          en: "This can execute malicious code. Download first, review contents, then execute manually."

      eval_or_exec:
        description:
          en: "Dynamic command execution that can be exploited"
        recommendation:
          en: "This can lead to command injection attacks. Use safer alternatives."

      system_call:
        description:
          en: "Executing system commands through various programming languages"
        recommendation:
          en: "This bypasses shell safeguards. Validate all inputs thoroughly."

      crontab:
        description:
          en: "Modifying scheduled tasks that can persist malicious activities"
        recommendation:
          en: "Cron jobs can hide persistent malware. Review scheduled changes carefully."

      system_service:
        description:
          en: "Managing system services that can enable persistence"
        recommendation:
          en: "Service modifications can create backdoors. Verify service configurations."

      firewall:
        description:
          en: "Modifying firewall rules that can expose systems to attack"
        recommendation:
          en: "Firewall changes can open attack vectors. Document and review all rule changes."

      registry:
        description:
          en: "Modifying Windows Registry which controls system behavior"
        recommendation:
          en: "Registry changes can cause system instability or security issues. Backup first."

      net_user:
        description:
          en: "Managing user accounts that can grant unauthorized access"
        recommendation:
          en: "User account changes can create backdoors. Use principle of least privilege."

      shell_exec:
        description:
          en: "Executing command interpreters that can run arbitrary commands"
        recommendation:
          en: "Shell execution can bypass security controls. Validate and sanitize inputs."

      python_system:
        description:
          en: "Python system command execution that can run shell commands"
        recommendation:
          en: "This can execute arbitrary shell commands. Use safer subprocess alternatives."

      default:
        description:
          en: "Pattern detected in command execution permissions"
        recommendation:
          en: "Review this command pattern for potential security implications."

# OpenAI Codex configuration - provider upsert + env injection
codex:
  account:
    config_created:
      en: "Created default configuration at: %{path}"

    editing:
      en: "Editing configuration: %{path}"
    edited:
      en: "✓ Configuration edited successfully"
    imported:
      en: "✓ Provider '%{name}' imported successfully"

  interactive:
    select_group:
      en: "Select a configuration group to activate:"
    import_group_name:
      en: "Provider group name:"
    import_group_name_help:
      en: "e.g., openai, minimax, custom-provider"
    import_base_url:
      en: "Base URL:"
    import_base_url_help:
      en: "e.g., https://api.openai.com/v1"
    import_env_key_id:
      en: "Environment variable name for API key:"
    import_env_key_id_help:
      en: "The env var codex will read (default: CODEX_API_KEY)"
    import_api_key_value:
      en: "API key value:"
    import_api_key_value_help:
      en: "Your actual API key (stored in llman config only)"

  main:
    no_configs_found:
      en: "No codex provider configurations found"
    suggestion:
      en: "Get started with:"
    command_import:
      en: "llman x codex account import"
    command_edit:
      en: "llman x codex account edit"
    config_location:
      en: "Configuration file"

  run:
    interactive:
      prompt_args:
        en: "Do you want to pass arguments to codex?"
      enter_args:
        en: "Enter arguments for codex command:"
      args_help:
        en: "e.g., --version --help"
      args_parse_failed:
        en: "Invalid argument string: %{error}. Please try again."
    using_config:
      en: "Using configuration: %{name}"
    session_ended:
      en: "👋 Session ended. You were using: %{name}"
    provider_synced:
      en: "✓ Provider '%{name}' synced to ~/.codex/config.toml"
    error:
      group_required_non_interactive:
        en: "Error: In non-interactive mode, --group is required"
      use_i_or_group:
        en: "Use -i for interactive mode or specify --group <name>"

  error:
    group_not_found:
      en: "Provider '%{name}' not found"
    group_exists:
      en: "Provider '%{name}' already exists. Use 'account edit' to modify."
    failed_codex_command:
      en: "Failed to run codex command"
    open_editor_failed:
      en: "Failed to open editor: %{editor}"
    invalid_editor_command:
      en: "Invalid editor command: %{editor} (%{error})"
    editor_exit_status:
      en: "Editor exited with status: %{status}"
    execute_failed:
      en: "Failed to execute codex"
    select_group_failed:
      en: "Failed to select group"
    no_configuration_selected:
      en: "No configuration selected"
    prompt_args_failed:
      en: "Failed to prompt for arguments"
    args_input_failed:
      en: "Failed to get codex arguments"
    import_prompt_failed:
      en: "Failed during import prompt"
    load_config_failed:
      en: "Failed to load configuration"
    parse_config_failed:
      en: "Failed to parse configuration: %{path}"
    project_dir_not_found:
      en: "Could not determine project directory"
    create_config_dir_failed:
      en: "Failed to create config directory: %{path}"
    serialize_config_failed:
      en: "Failed to serialize configuration"
    write_config_failed:
      en: "Failed to write configuration: %{path}"
    metadata_failed:
      en: "Failed to read file metadata"
    permissions_failed:
      en: "Failed to set file permissions"
    home_dir_failed:
      en: "Failed to get home directory"
    read_codex_config_failed:
      en: "Failed to read ~/.codex/config.toml"
    parse_codex_config_failed:
      en: "Failed to parse ~/.codex/config.toml"
    codex_config_not_table:
      en: "~/.codex/config.toml root is not a TOML table"
    override_name_blank:
      en: "Invalid override_name for provider '%{name}': value must not be empty"
    create_codex_dir_failed:
      en: "Failed to create ~/.codex directory"
    serialize_codex_config_failed:
      en: "Failed to serialize codex config"
    write_codex_config_failed:
      en: "Failed to write ~/.codex/config.toml"

# SDD workflow
sdd:
  config:
    read_failed:
      en: "Failed to read llmanspec config: %{error}"
    parse_failed:
      en: "Failed to parse llmanspec config: %{error}"
    missing:
      en: "No llmanspec config found at %{path}. Run 'llman sdd init' first."
    spec_style_missing:
      en: "Missing required llmanspec config field 'spec_style' in %{path}. Set 'spec_style: ison|toon|yaml' before running spec/delta commands."
    spec_style_invalid:
      en: "Invalid llmanspec config 'spec_style' in %{path}: %{value}. Supported values: ison, toon, yaml."
    schema_invalid:
      en: "llmanspec config does not match schema: %{path} (%{error})"
    unsupported_version:
      en: "Unsupported llmanspec config version: %{version}"
    serialize_failed:
      en: "Failed to serialize llmanspec config: %{error}"
    write_failed:
      en: "Failed to write llmanspec config: %{error}"

  style:
    pretty_ison_requires_ison:
      en: "--pretty-ison is only supported when llmanspec config 'spec_style' is 'ison' (current: %{style})."

  yaml:
    lossless_fallback:
      en: "YAML lossless update failed for %{path}; falling back to rewriting fenced YAML payload. Comments inside the YAML payload may be lost."

  templates:
    read_failed:
      en: "Failed to read template %{path}: %{error}"
    not_found:
      en: "Template not found: %{path}"
    region_missing:
      en: "Region '%{name}' not found in %{path}"
    region_duplicate:
      en: "Region '%{name}' is duplicated in %{path}"
    region_unterminated:
      en: "Region '%{name}' is not terminated in %{path}"

  shared:
    invalid_id:
      en: "Invalid %{kind} id '%{id}'. Use a simple identifier (no '/', '\\', '.' or '..')."

  update_skills:
    no_llmanspec:
      en: "No llmanspec directory found. Run '%{cmd}' first."

  list:
    no_changes_dir:
      en: "No llmanspec changes directory found. Run 'llman sdd init' first."
    no_active_changes:
      en: "No active changes found."
    changes_header:
      en: "Active changes:"
    no_specs:
      en: "No specs found."
    specs_header:
      en: "Available specs:"
    no_tasks_status:
      en: "no tasks"
    complete_status:
      en: "complete"
    just_now:
      en: "just now"
    conflicting_flags:
      en: "Flags --specs and --changes are mutually exclusive."

  show:
    option_change:
      en: "Change"
    option_spec:
      en: "Spec"
    select_type:
      en: "What would you like to show?"
    no_changes_found:
      en: "No changes found."
    pick_change:
      en: "Pick a change"
    no_specs_found:
      en: "No specs found."
    pick_spec:
      en: "Pick a spec"
    non_interactive:
      line1:
        en: "Nothing to show. Try one of:"
      line2:
        en: "  llman sdd show <item>"
      line3:
        en: "  llman sdd show --type change"
      line4:
        en: "  llman sdd show --type spec"
      line5:
        en: "Or run in an interactive terminal."
    unknown_item:
      en: "Unknown item '%{item}'"
    did_you_mean:
      en: "Did you mean: %{items}?"
    ambiguous_item:
      en: "Ambiguous item '%{item}' matches both a change and a spec."
    ambiguous_hint:
      en: "Pass --type change|spec."
    change_not_found:
      en: "Change '%{id}' not found."
    spec_not_found:
      en: "Spec '%{id}' not found."
    change_stage:
      en: "Stage: %{stage}"
    requirements_only_deprecated:
      en: "Flag --requirements-only is deprecated; use --deltas-only instead."
    requirements_conflict:
      en: "Options --requirements and --requirement cannot be used together."
    requirement_not_found:
      en: "Requirement %{id} not found (1-%{count})."
    ignore_flags:
      en: "Warning: Ignoring flags not applicable to %{item_type}: %{flags}"

  validate:
    option_change:
      en: "Change"
    option_spec:
      en: "Spec"
    select_scope:
      en: "What would you like to validate?"
    option_all:
      en: "All (changes + specs)"
    option_changes:
      en: "All changes"
    option_specs:
      en: "All specs"
    option_pick_one:
      en: "Pick a specific change or spec"
    pick_item:
      en: "Pick an item"
    no_items:
      en: "No items found to validate."
    invalid_pick:
      en: "Invalid selection."
    unknown_item:
      en: "Unknown item '%{item}'"
    did_you_mean:
      en: "Did you mean: %{items}?"
    ambiguous_item:
      en: "Ambiguous item '%{item}' matches both a change and a spec."
    ambiguous_hint:
      en: "Pass --type change|spec."
    item_valid:
      en: "%{item} '%{id}' is valid"
    item_invalid:
      en: "%{item} '%{id}' has issues"
    issue_line:
      en: "[%{label}] %{path}: %{message}"
    spec_read_failed:
      en: "Failed to read spec file: %{error}"
    sections_missing:
      en: "Spec is missing required ISON fields: %{sections}."
    sections_example:
      en: |
        Example:
        ```ison
        {
          "version": "1.0.0",
          "kind": "llman.sdd.spec",
          "name": "sample",
          "purpose": "State the goal in one sentence.",
          "requirements": [
            {
              "req_id": "sample-requirement",
              "title": "Sample requirement",
              "statement": "The system MUST ...",
              "scenarios": [
                { "id": "happy-path", "text": "- **WHEN** ...\n- **THEN** ..." }
              ]
            }
          ]
        }
        ```

    scenario_missing:
      en: "Requirement must include at least one scenario object in `scenarios`."
    scenario_example:
      en: |
        Example:
        ```ison
        { "id": "sample-scenario", "text": "- **WHEN** ...\n- **THEN** ..." }
        ```

    delta_missing:
      en: "Change must include at least one delta spec under llmanspec/changes/<change-id>/specs/."
    delta_example:
      en: |
        Example:
        ```ison
        {
          "version": "1.0.0",
          "kind": "llman.sdd.delta",
          "ops": [
            {
              "op": "add_requirement",
              "req_id": "sample-requirement",
              "title": "Sample requirement",
              "statement": "The system MUST ...",
              "scenarios": [
                { "id": "sample-scenario", "text": "- **WHEN** ...\n- **THEN** ..." }
              ]
            }
          ]
        }
        ```
    proposal_missing:
      en: "Change is missing proposal.md."
    proposal_frontmatter_invalid_yaml:
      en: "proposal.md frontmatter YAML parse error: %{error}"
    proposal_depends_on_unknown:
      en: "proposal.md depends_on references unknown change: %{id}"
    proposal_depends_on_format:
      en: "proposal.md depends_on must be a list of change ID strings"
    proposal_blocks_format:
      en: "proposal.md blocks must be a list of change ID strings"
    proposal_blocks_unknown:
      en: "proposal.md blocks references unknown change: %{id}"
    proposal_depends_on_archived:
      en: "proposal.md depends_on references archived change: %{id}"
    proposal_blocks_archived:
      en: "proposal.md blocks references archived change: %{id}"
    proposal_depends_on_may_be_frozen:
      en: "proposal.md depends_on references change '%{id}' (frozen or does not exist — use 'llman sdd archive freeze --list' to check)"
    proposal_blocks_may_be_frozen:
      en: "proposal.md blocks references change '%{id}' (frozen or does not exist — use 'llman sdd archive freeze --list' to check)"
    dag_cycle_detected:
      en: "Dependency cycle detected: %{cycle}"
    tasks_missing:
      en: "Change is missing tasks.md."
    task_pending:
      en: "Unchecked task without defer link (line %{line}): %{task}"
    task_defer_target_missing:
      en: "Deferred task references non-existent change '%{target}' (line %{line}): %{task}"
    task_defer_target_archived:
      en: "Deferred task references archived change '%{target}' (line %{line})"
    task_defer_target_may_be_frozen:
      en: "Deferred task references change '%{target}' which may be frozen (line %{line})"
    task_defer_legacy:
      en: "Legacy defer syntax (line %{line}): migrate to (defer → <change-id>)"
    task_completion_summary:
      en: "Task completion: %{completed}/%{total} (%{ratio}%%)"
    design_present:
      en: "design.md is present."
    tasks_without_design:
      en: "Change has tasks.md but missing design.md. Tasks MUST be generated after design decisions are documented. Create design.md first, then regenerate tasks.md."
    stage_draft_hint:
      en: "Change is in 'draft' stage (next: add specs/)"
    stage_specified_hint:
      en: "Change is in 'specified' stage (next: add design.md)"
    stage_designed_hint:
      en: "Change is in 'designed' stage (next: add tasks.md)"
    next_steps:
      en: "Next steps:"
    change_step_1:
      en: "- Ensure change has deltas in specs/: define ISON `ops` with add/modify/remove/rename operations"
    change_step_2:
      en: "- Each add/modify requirement op MUST include at least one scenario object"
    change_step_3:
      en: "- Debug parsed deltas: llman sdd show <id> --json --deltas-only"
    spec_step_1:
      en: "- Ensure spec ISON includes `purpose` and `requirements`"
    spec_step_2:
      en: "- Each requirement MUST include at least one scenario object"
    spec_step_3:
      en: "- Re-run with --json to see structured report"
    bulk_ok:
      en: "OK %{item}"
    bulk_fail:
      en: "FAIL %{item}"
    bulk_summary:
      en: "Totals: %{passed} passed, %{failed} failed (%{items} items)"
    staleness_status:
      en: "Staleness: %{status}"
    staleness_touched:
      en: "Touched scope paths: %{paths}"
    staleness_spec_updated:
      en: "Spec file updated since base."
    staleness_dirty:
      en: "Working tree is dirty; results may be unreliable."
    staleness_note:
      en: "Note: %{note}"
    staleness_scope_missing:
      en: "Spec validation scope is missing."
    staleness_base_missing:
      en: "Unable to resolve base ref for staleness check."
    staleness_stale:
      en: "Spec may be stale; scope changed without spec update."
    staleness_git_failed:
      en: "Git command failed during staleness evaluation."
    feature_refs_no_bdd_config:
      en: "feature_refs defined but no bdd config in config.yaml. Fix: add `bdd:` block to llmanspec/config.yaml (see `bdd.framework` and `bdd.feature_dir`)."
    feature_ref_not_found:
      en: "Required .feature file not found: %{path}. Fix: create the .feature file — it is the executable implementation of this spec's scenarios."
    feature_ref_not_found_optional:
      en: "Optional .feature file not found: %{path}."
    feature_ref_bad_extension:
      en: "feature_refs path must end with .feature: %{path}"
    feature_ref_parse_error:
      en: "Gherkin parse error in %{path}: %{error}. Fix: check .feature syntax and language directive."
    feature_ref_read_error:
      en: "Cannot read .feature file %{path}: %{error}"
    feature_ref_coverage_gap:
      en: "Feature %{path} has %{feature} scenarios but spec has %{spec} scenarios. The .feature file is the executable form of this spec — add missing scenarios to either the spec or the .feature file."
    feature_ref_unsupported_language:
      en: "Unsupported gherkin language '%{lang}' in %{path}. Fix: use a valid language code (e.g. 'en', 'zh-CN')."
    meta_field_empty:
      en: "Spec %{key} must not be empty (add it inside the .toon document)."
    bdd_empty_spec_guardrail:
      en: "BDD is enabled but this spec declares no requirements and no feature_refs. Either add requirements/scenarios, or point to a .feature via feature_refs."
    bdd_point_only:
      en: "Point-only spec: behavior lives in the referenced .feature file(s)."
    bdd_next_step_verify:
      en: "- Run BDD tests: %{command}"
    bdd_next_step_feature:
      en: "- Create .feature file at the path shown in the ERROR above — it is the executable implementation of the spec's scenarios"
    staleness_feature_ref_stale:
      en: "Spec may be stale: .feature file (%{path}) changed without spec update. The .feature file is the executable implementation of this spec."
    non_interactive:
      line1:
        en: "Nothing to validate. Try one of:"
      line2:
        en: "  llman sdd validate --all"
      line3:
        en: "  llman sdd validate --changes"
      line4:
        en: "  llman sdd validate --specs"
      line5:
        en: "  llman sdd validate <item-name>"
      line6:
        en: "Or run in an interactive terminal."

  archive:
    change_required:
      en: "Change id is required."
    change_not_found:
      en: "Change '%{id}' not found."
    archive_exists:
      en: "Archive '%{name}' already exists."
    archived:
      en: "Change '%{change}' archived as '%{archive}'."
    rebuilt_invalid:
      en: "Validation errors in rebuilt spec for %{spec}: %{errors}"
    no_deltas:
      en: "Delta parsing found no operations for %{spec}. Provide ADDED/MODIFIED/REMOVED/RENAMED sections."
    new_spec_only_added:
      en: "%{spec}: target spec does not exist; only ADDED requirements are allowed for new specs."
    rename_missing:
      en: "%{spec} RENAMED failed for header \"### Requirement: %{name}\" - source not found"
    rename_exists:
      en: "%{spec} RENAMED failed for header \"### Requirement: %{name}\" - target already exists"
    remove_missing:
      en: "%{spec} REMOVED failed for header \"### Requirement: %{name}\" - not found"
    modify_missing:
      en: "%{spec} MODIFIED failed for header \"### Requirement: %{name}\" - not found"
    modify_header_mismatch:
      en: "%{spec} MODIFIED failed for header \"### Requirement: %{name}\" - header mismatch in content"
    add_exists:
      en: "%{spec} ADDED failed for header \"### Requirement: %{name}\" - already exists"
    requirements_missing:
      en: "Spec must include a ## Requirements section."
    invalid_target:
      en: "Invalid target path for spec."
    totals:
      en: "Totals: + %{added}, ~ %{modified}, - %{removed}, -> %{renamed}"
    dry_run_apply:
      en: "Would apply changes to %{path}:"
    apply:
      en: "Applying changes to %{path}:"
    count_added:
      en: "  + %{count} added"
    count_modified:
      en: "  ~ %{count} modified"
    count_removed:
      en: "  - %{count} removed"
    count_renamed:
      en: "  -> %{count} renamed"
    dry_run_move:
      en: "Would move %{from} -> %{to}"
    task_gate_blocked:
      en: "Archive blocked: %{pending} unchecked task(s) without defer links."
    task_gate_options:
      en: "Options:\n  1. Add defer links: (defer → <change-id>)\n  2. Cancel tasks: (cancelled — <reason>)\n  3. Use --force to archive anyway (not recommended)\n  4. Complete the remaining tasks"
    task_gate_item:
      en: "  - [ ] %{task}"
    task_completion_low:
      en: "Task completion ratio %{ratio}%% is below minimum %{min}%%."

  orphans:
    header:
      en: "Found %{count} orphaned defer item(s) across %{changes} change(s):"
    no_orphans:
      en: "No orphaned defer items found."
    change_header:
      en: "  %{change}:"
    item:
      en: "    - [ ] %{task}"
    legacy_item:
      en: "    - [ ] %{task} (legacy defer — no link)"
    suggestion:
      en: "Suggestion: Create follow-up changes or cancel these items."

skills:
  not_implemented:
    en: "Skills manager is not implemented yet."
  non_repo_confirm:
    en: "Current directory is not a git repo. Scan global/user sources anyway?"
  non_repo_cancelled:
    en: "Cancelled."
  non_repo_non_interactive:
    en: "Current directory is not a git repo. Run in an interactive terminal to continue."
  non_repo_prompt_failed:
    en: "Failed to confirm non-repo scan: %{error}"
  source_missing:
    en: "Source path not found: %{path}"
  relink_removed:
    en: "--relink-sources was removed. Run `llman skills` without it."
  conflict:
    prompt:
      en: "Multiple versions found for %{skill}. Select the version to activate."
    prompt_failed:
      en: "Failed to select version: %{error}"
    auto_selected:
      en: "No interactive terminal; using default version for %{skill}."
    no_options:
      en: "No conflict options available for %{skill}."
  hash:
    strip_prefix_failed:
      en: "Failed to compute relative path:"
  copy:
    strip_prefix_failed:
      en: "Failed to copy file; unable to resolve relative path:"
  target:
    not_directory:
      en: "Target path is not a directory: %{path}"
    not_symlink:
      en: "Target entry exists and is not a symlink: %{path}"
    not_managed:
      en: "Target entry is not managed by llman; skipping removal: %{path}"
    metadata_invalid:
      en: "Target metadata is invalid; treating as conflict: %{path} (%{error})"
  target_conflict:
    prompt:
      en: "Target %{target} for %{skill} already exists. Choose a conflict action."
    prompt_failed:
      en: "Failed to resolve target conflict: %{error}"
    requires_flag:
      en: "Non-interactive mode requires --target-conflict=overwrite|skip for %{skill} in %{target}."
    option_overwrite:
      en: "overwrite"
    option_skip:
      en: "skip"
  manager:
    no_skills:
      en: "No skills found to manage."
    duplicate_skill_id:
      en: "Duplicate skill id %{skill} found at %{path}; using %{chosen}."
    select_skills:
      en: "Select skills:"
    select_skills_for_target:
      en: "Select skills for %{target}"
    select_skill:
      en: "Select a skill to manage"
    select_target:
      en: "Select a target to manage"
    select_agent_tools:
      en: "Select which agent tools to manage"
    select_scope:
      en: "Select scope to manage"
    select_mode:
      en: "Select mode:"
    mode_apply_preset:
      en: "Apply preset"
    mode_select_individually:
      en: "Select individually"
    select_presets:
      en: "Select presets:"
    prompt_failed:
      en: "Failed to read selection: %{error}"
    exit:
      en: "Exit"
    back:
      en: "Back"
    confirm_apply:
      en: "Apply changes for %{target}?"
    state_on:
      en: "on"
    state_off:
      en: "off"
    state_skip:
      en: "skip (read-only)"
    read_only:
      en: "Target is read-only and cannot be toggled."
    hidden_user_scope_skills_hint:
      en: "Hidden %{count} skills already managed in user scope."
    legacy_registry_detected:
      en: "Legacy skills registry detected at %{path}; it is ignored in realtime mode."
    group_skills_count:
      en: "%{count} skills"
    preset_not_found:
      en: "Preset '%{preset}' not found."
    preset_missing_parent:
      en: "Preset '%{preset}' extends missing preset '%{parent}'."
    preset_cycle:
      en: "Circular preset dependency detected: %{chain}."
    preset_unknown_skill_dir:
      en: "Preset '%{preset}' references unknown skill dir '%{dir}'."
    preset_empty:
      en: "Preset '%{preset}' resolves to an empty skill set."
  config:
    read_failed:
      en: "Failed to read skills config: %{error}"
    parse_failed:
      en: "Failed to parse skills config: %{error}"
    llman_read_failed:
      en: "Failed to read llman config: %{error}"
    llman_parse_failed:
      en: "Failed to parse llman config: %{error}"
    llman_schema_invalid:
      en: "llman config does not match schema: %{path} (%{error})"
    unsupported_version:
      en: "Unsupported skills config version %{version}."
    invalid_target_mode:
      en: "Unsupported target mode %{mode}. Expected link, copy, or skip."
    sources_removed:
      en: "Skills config v2 does not support [[source]] entries. Use targets-only config under <skills_root>."
    skills_dir_invalid_cli:
      en: "Invalid skills directory: %{error}"
    skills_dir_invalid_env:
      en: "Invalid skills directory in LLMAN_SKILLS_DIR: %{error}"
    skills_dir_invalid_config:
      en: "Invalid skills directory in config.yaml: %{error}"
    home_missing:
      en: "Unable to resolve home directory for path expansion."
  registry:
    read_failed:
      en: "Failed to read skills registry: %{error}"
    parse_failed:
      en: "Failed to parse skills registry: %{error}"
    write_failed:
      en: "Failed to write skills registry: %{error}"

self:
  schema:
    generate_start:
      en: "Generating config schemas..."
    generate_written:
      en: "Wrote schema: %{path}"
    generate_failed:
      en: "Failed to generate schema: %{error}"
    apply_start:
      en: "Applying schema headers..."
    apply_updated:
      en: "Updated schema header: %{path}"
    apply_unchanged:
      en: "Schema header already present: %{path}"
    apply_skipped:
      en: "Skipped missing config: %{path}"
    check_start:
      en: "Checking config schemas..."
    check_ok:
      en: "Schema check passed."
    check_missing:
      en: "Schema file missing: %{path}"
    check_invalid:
      en: "Invalid schema at %{path}: %{error}"
    check_failed:
      en: "Schema validation failed for %{name}: %{error}"
    read_failed:
      en: "Failed to read file: %{path} (%{error})"
    write_failed:
      en: "Failed to write file: %{path} (%{error})"
    yaml_parse_failed:
      en: "Failed to parse YAML: %{path} (%{error})"
  completion:
    install_prompt:
      en: "Install llman completion block into %{path}?"
    install_help:
      en: "This will add or update the marked llman completion block."
    non_interactive:
      en: "Non-interactive mode cannot modify %{path}; re-run with --yes."
    read_failed:
      en: "Failed to read file: %{path} (%{error})"
    write_failed:
      en: "Failed to write file: %{path} (%{error})"
    invalid_marker:
      en: "Invalid completion marker state in %{path}."
