# =============================================================================
# TAKT UI Labels — English
# =============================================================================
# User-facing display strings (not AI prompts).
# Template variables use {variableName} syntax.
# =============================================================================

taskStop:
  label: "Stop"
  description: "Request a stop; the worker interrupts itself and determines the final state"
  confirm: 'Request a stop for running task "{name}"? The worker will determine the final state.'
  staleOwner: "Cannot request a stop because the owner is not alive. Use Mark as failed."
  missingExecutionId: "Cannot request a stop because the execution ID is missing."
  rejected: "Stop request rejected: {reason}"
  requested: 'Stop requested for "{name}". The worker will interrupt itself and determine the final state.'

taskDeletion:
  statusOption: "Filter deletion by status (pending|completed|failed|exceeded|pr_failed; multiple values allowed)"
  goalOption: "Filter deletion by goal ID"
  invalidStatus: "Invalid deletion status: {status}. Use pending, completed, failed, exceeded, or pr_failed."
  filtersRequired: "Deletion requires at least one of --status, --goal, or --branch."
  preview: "Tasks selected for deletion (preview; use --yes to delete):"
  previewTask: "Name: {name} | Status: {status} | Branch: {branch} | Goal: {goal}"
  empty: "No tasks match the deletion filters."
  deleted: "Deleted task: {name}"
  failed: "Failed to delete task: {name}"
  failedWithError: "Failed to delete task {name}: {error}"

# ===== Interactive Mode UI =====
interactive:
  operation:
    taskSaved: "Task saved: {taskName}."
    saveCancelled: "Task saving cancelled. No task was saved."
    issueSaved: "Issue #{issueNumber} created; task saved: {taskName}."
    issueSavedWithoutNumber: "Issue created; task saved: {taskName}. The Issue number was not returned."
    issueSaveCancelled: "Task saving cancelled after creating Issue #{issueNumber}; no task was saved. Reason: {reason}"
    issueFailed: "Issue creation failed. No task was saved. Reason: {reason}"
    issueNumberUnknown: "Issue created, but its number could not be obtained. No task was saved. Reason: {reason}"
    issueNotSaved: "Issue #{issueNumber} created, but no task was saved. Reason: {reason}"
    issueOnlyCreated: "Issue #{issueNumber} created. No task was saved."
    issueOnlyNumberUnknown: "Issue created, but its number could not be obtained. No task was saved. Reason: {reason}"
    issueOnlyFailed: "Issue creation failed. No task was saved. Reason: {reason}"
    executionFinished: "Workflow execution finished successfully."
    executionFailed: "Workflow execution finished with failure."
    executionFailedWithReason: "Workflow execution finished with failure. Reason: {reason}"
    executionCancelled: "Workflow execution cancelled before starting."
    failed: "Operation {action} failed. Reason: {reason}"
    reference: "Operation results (quoted reference data)"
  sourceContextLabel: "Source Context"
  userCommentLabel: "User Comment"
  conversationLabel: "Conversation:"
  noTranscript: "(No local transcript. Summarize the current session context.)"
  formalSpecPrompt: "Enable formal specification mode (Alloy, Quint)? Change the mode default with assistant.formal_spec.mode (or the legacy scalar assistant.formal_spec)."
  ui:
    intro: "Interactive mode - describe your task. When ready, use /go to create the instruction and run it, or /tell to send an additional instruction to a running task."
    introGrillMe: "Grill Me mode - clarify requirements one question at a time with a recommended option. When ready, use /go to create and run the instruction, or /tell to send an additional instruction to a running task."
    introWithoutTell: "Interactive mode - describe your task. When ready, use /go to create the instruction and run it."
    introGrillMeWithoutTell: "Grill Me mode - clarify requirements one question at a time with a recommended option. When ready, use /go to create and run the instruction."
    resume: "Resuming previous session"
    noConversation: "No conversation yet. Please describe your task first."
    thinking: "Assistant is thinking..."
    creatingInstruction: "Creating instruction..."
    summarizeFailed: "Failed to summarize conversation. Please try again."
    continuePrompt: "Okay, continue describing your task."
    proposed: "Proposed task instruction:"
    actionPrompt: "What would you like to do?"
    issueSaveTaskConfirm: "Save as a task too?"
    executeConfirm: "This TUI will be unavailable until the workflow finishes. Normally, save the task and execute it with `takt run`. Continue?"
    actions:
      execute: "Execute here now"
      createIssue: "Create Issue"
      saveTask: "Save as Task"
      continue: "Continue editing"
    cancelled: "Cancelled"
    acceptNoAssistant: "No assistant response found. Please describe your task first."
    retryNoOrder: "No previous order (order.md) found. /retry is only available during retry."
    pasteImageUnavailable: "/paste-image is only available for image attachment during interactive input."
    verifyUnavailable: "/verify is only available in formal specification mode."
    personaFallback: "No persona available for the first step. Falling back to assistant mode."
    assistantRetryUnavailableGuidance: "The /requeue and /retry commands are unavailable in this conversation because it cannot change task state. If the user enters either command, explain that it is unavailable here and treat the input as regular conversation."
  modeSelection:
    prompt: "Select interactive mode:"
    assistant: "Assistant"
    assistantDescription: "Ask clarifying questions before generating instructions"
    grill-me: "Grill Me"
    grill-meDescription: "Resolve requirements one recommended question at a time"
    persona: "Persona"
    personaDescription: "Converse as the first agent's persona"
  providerSelection:
    prompt: "Select provider:"
  runSelector:
    confirm: "Reference a previous run's results?"
    prompt: "Select a run to reference:"
    noRuns: "No previous runs found."
  continueNoSession: "No previous assistant session found. Starting a new session."
  mcpUnavailable: "Task-state lookup is unavailable for provider {provider}; the conversation will continue without it. Reason: {error}"
  resumeSessionLoaded: "Session loaded. Subsequent AI calls will use this session."
  resumeSessionFailed: "Session resume failed. Continuing with a new conversation."
  sessionSelector:
    prompt: "Resume from a recent session?"
    newSession: "New session"
    newSessionDescription: "Start a fresh conversation"
    noSessions: "No resumable sessions were found. Starting a new session."
    lastResponse: "Last: {response}"
    messages: "{count} messages"
  commands:
    accept: "Accept latest assistant response"
    go: "Create instruction & run"
    issue: "Replace Source Context with Issues"
    tell: "Send an additional instruction to a running task"
    requeue: "Return a failed or exceeded task to the queue"
    retry: "Revise a failed task instruction and queue it"
    retrySavedOrder: "Review and resubmit the saved task instruction"
    replay: "Rerun immediately with previous instructions"
    cancel: "Exit interactive mode"
    open: "Open the running task directory"
    resume: "Load a previous session"
    pasteImage: "Attach clipboard image"
    setup: "Configure exec agents"
    workflow: "Switch workflow"
    mode: "Switch interactive mode"
    provider: "Switch provider"
    model: "Use a model for this conversation"
    effort: "Use reasoning effort for this conversation"
    verify: "Verify the current formal specification"
  issueCommand:
    argumentsRequired: "Provide one or more Issue numbers, for example: /issue 123 456"
    invalidArguments: "Use one or more Issue numbers, with or without #, for example: /issue 123 #456"
    fetched: "Fetched Issues: {issues}. Source Context replaced."

# ===== Workflow Maker =====
workflowMaker:
  basePrompt: "Select a Workflow Maker base:"
  workflowPrompt: "Select a workflow:"
  namePrompt: "Workflow name"
  sources:
    new: "New workflow"
    project: "Project workflows"
    user: "Global workflows"
    builtin: "Builtin workflows"
    repertoire: "Repertoire workflows"
  intro: "Workflow Maker - describe the workflow you want. Use /workflow to change the base, /go to prepare it, or /cancel to exit."
  proposed: "Proposed Workflow Maker instruction:"
  plannedPath: "Planned artifact path: {path}"
  actionPrompt: "What would you like to do?"
  actions:
    execute: "Execute"
    continue: "Continue editing"
  continuePrompt: "Continue editing the Workflow Maker request."
  noWorkflows: "No workflows are available from that source."
  baseChanged: "Workflow Maker base changed to {name}."
  wait: "Please wait until the workflow completes…"
  completed: "Workflow Maker completed. Artifact: {path}. Doctor report: {report}"
  completedWithoutReport: "Workflow Maker completed. Artifact: {path}."
  failed: "Workflow Maker failed. Artifact preserved at {path}. Reason: {reason}. Doctor report: {report}"
  failedWithoutReport: "Workflow Maker failed. Artifact preserved at {path}. Reason: {reason}."
  planningFailed: "Workflow Maker could not prepare the artifact: {reason}"
  ttyRequired: "Workflow Maker requires an interactive terminal (TTY)."

# ===== Exec Mode UI =====
exec:
  common:
    add: "Add"
    back: "Back"
    builtin: "Builtin"
    cancel: "Cancel"
    currentSuffix: "(current)"
    default: "Default"
    delete: "Delete"
    discard: "Discard"
    global: "Global"
    none: "none"
    project: "Project"
    providerDefault: "provider default"
    save: "Save"
    user: "User"
  scope:
    projectDescription: ".takt/facets"
    globalDescription: "~/.takt/facets"
  setup:
    teamConfiguration: "Exec agents"
    assistantSummary: "Assistant agent: {summary}"
    workersSummary: "Worker agents: {count}"
    reviewsSummary: "Review agents: {count}"
    replanSummary: "Replanning agent: {instruction}"
    loopSummary: "Loop detection: {small}/{large}/{max}"
    preset: "Preset"
  actors:
    workers: "Worker agents"
    reviews: "Review agents"
    mustContainOne: "{label} must contain at least one entry."
    deletePrompt: "Delete {label}"
    invalidIndex: "Invalid {label} index: {index}"
  settings:
    assistant: "Assistant agent settings"
    actor: "{name} settings"
    provider: "Provider"
    model: "Model"
    effort: "Effort"
    name: "Name"
    instruction: "Instruction"
    knowledge: "Knowledge"
    policy: "Policy"
    customModel: "Custom input..."
    customModelPrompt: "Custom model"
    customModelRequired: "Custom model must be a non-empty string."
    defaultModel: "Default ({value})"
    defaultEffort: "Default (none)"
  fields:
    provider: "Provider: {value}"
    model: "Model: {value}"
    effort: "Effort: {value}"
    name: "Name: {value}"
    instruction: "Instruction: {value}"
    knowledge: "Knowledge: {value}"
    policy: "Policy: {value}"
    smallLoopThreshold: "Small loop detection threshold: {value}"
    largeLoopThreshold: "Large loop detection threshold: {value}"
    maxSteps: "Max steps: {value}"
    actorInstruction: "instruction: {value}"
  replan:
    settings: "Replanning agent settings"
  loop:
    settings: "Loop detection settings"
    smallThresholdPrompt: "Small loop detection threshold"
    largeThresholdPrompt: "Large loop detection threshold"
    maxStepsPrompt: "Max steps"
  preset:
    menu: "Preset"
    load: "Load preset"
    saveCurrent: "Save current preset"
    delete: "Delete preset"
    saveScope: "Preset save scope"
    deleteScope: "Preset delete scope"
    loadSource: "Preset load source"
    defaultDescription: "Default exec configuration"
    builtinDescription: "builtins/exec/presets"
    projectDescription: ".takt/exec/presets"
    globalDescription: "~/.takt/exec/presets"
    loadFromSource: "Load {source} preset"
    deleteFromSource: "Delete {source} preset"
    namePrompt: "Preset name"
    descriptionPrompt: "Preset description"
    descriptionDefault: "Custom exec preset"
    saved: "Saved {scope} exec preset: {name}"
    deleted: "Deleted {scope} exec preset: {name}"
    exportAsWorkflow: "Export preset as workflow"
    exportNamePrompt: "Workflow name"
    exported: "Exported workflow: {name}"
  facets:
    instructions: "instructions"
    knowledge: "knowledge"
    policies: "policies"
    selectPrompt: "Select {kind} facet"
    multiSelectPrompt: "Select {kind} facets"
    multiSelectInstructions: "↑↓ to move, Space to toggle, Enter to confirm"
    listPrompt: "{kind} facets"
    saveScope: "Facet save scope"
    editedSaveScope: "Edited facet save scope"
    saveGenerated: "Save generated facet?"
    generated: "Generated {kind} facet \"{name}\":"
    created: "Created {scope} {kind} facet: {name}"
    consultationPrompt: "Describe the {kind} facet changes for {name}: "
    namePrompt: "Facet name"
    instructionMenu: "Instruction facet"
    selectExisting: "Select existing ({current})"
    editWithAI: "Edit with AI"
    createWithAI: "Create with AI"
    createWithEditor: "Create with editor"
    openInEditor: "Open in editor"
    restoreDefault: "Restore default ({defaultRef})"
    toggleExisting: "Toggle existing"
    clearAll: "Clear all"

# ===== Workflow Execution UI =====
workflow:
  skillPermission: 'Allow loading OpenCode Skill {patterns}?'
  unconsumedLiveInstructions: "There are {count} unconsumed additional instructions"
  teamLeader:
    decomposeWait: "Team leader is decomposing tasks. This may take some time..."
    feedbackWait: "Team leader is reviewing results and planning next tasks..."
  iterationLimit:
    maxReached: "Reached max iterations ({currentIteration}/{maxSteps})"
    currentStep: "Current step: {currentStep}"
    continueQuestion: "Continue?"
    continueLabel: "Continue (enter additional iterations)"
    continueDescription: "Increase the limit by the entered count"
    stopLabel: "Stop"
    inputPrompt: "Enter additional iterations (>= 1)"
    invalidInput: "Please enter an integer of 1 or greater."
    userInputPrompt: "Enter additional instructions (empty to cancel)"
  notifyComplete: "Workflow complete ({iteration} iterations)"
  notifyAbort: "Aborted: {reason}"
  notifyFailed: "Failed: {reason}"
  sigintGraceful: "Ctrl+C: Aborting workflow..."
  sigintTimeout: "Graceful shutdown timed out after {timeoutMs}ms"
  sigintForce: "Ctrl+C: Force exit"

# ===== Instruct Mode UI (takt list -> instruct) =====
instruct:
  ui:
    intro: "Instruct mode - describe additional instructions. Commands: /go (create instruction & run), /replay (resubmit previous order), /cancel (exit)"
    resume: "Resuming previous session"
    noConversation: "No conversation yet. Please describe your instructions first."
    summarizeFailed: "Failed to create instruction. Please try again."
    continuePrompt: "Okay, continue describing your instructions."
    proposed: "Proposed additional instructions:"
    actionPrompt: "What would you like to do?"
    actions:
      execute: "Execute now"
      saveTask: "Save as Task"
      continue: "Continue editing"
    cancelled: "Cancelled"
    replayNoOrder: "Previous order (order.md) not found"

# ===== Retry Mode UI (takt list -> retry) =====
retry:
  ui:
    intro: "Retry mode - enter additional instructions. Use /go to review the update, then queue it or continue editing. Use /cancel to exit."
    resume: "Resuming previous session"
    noConversation: "No conversation yet. Please enter additional instructions first."
    summarizeFailed: "Failed to create the instruction. Please try again."
    continuePrompt: "Continue entering additional instructions."
    proposed: "Updated task instruction:"
    actionPrompt: "What would you like to do?"
    actions:
      saveTask: "Save as Task"
      continue: "Continue editing"
    cancelled: "Cancelled"
  usePreviousWorkflowConfirm: "Use previous workflow \"{workflow}\"?"

orderRevision:
  attachmentsHeading: "Attachments"
  ui:
    proposed: "Proposed new order.md:"
    actionPrompt: "Replace the current order with this instruction?"
    actions:
      approve: "Yes (save and run)"
      reject: "No (return to conversation)"

run:
  notifyComplete: "Run complete ({total} tasks)"
  notifyAbort: "Run finished with errors ({failed})"

# ===== Issue Creation UI =====
issue:
  labelSelection:
    prompt: "Label:"
    none: "None"
    custom: "Custom input"
    customPrompt: "Enter label name"
  createdFromIssueComment: "Created an execution Issue: #{issueNumber}{issueUrl}"
  sourceIssueCommentFailed: "Failed to post the execution Issue link on source Issue #{sourceIssueNumber}: {error}"

# ===== Ink TUI =====
tui:
  ui:
    thinking: "Thinking..."
    extendedThinking: "Reasoning..."
    responding: "Responding"
    selectTask: "Selecting a task..."
    selectStart: "Choosing a starting point..."
    extractRetryAgreement: "Summarizing the agreed retry position..."
    reviseInstruction: "Revising the instruction..."
    composeTell: "Composing the instruction..."
    hint: "Enter: send  Shift+Enter: newline  Tab: complete  ↑↓: move/history  Ctrl+C: cancel"
    placeholder: "Type a task, / for commands"
    queuedHint: "↑ to edit the queued line"
    queuedMore: "+{count} more queued"
    interruptHint: "(Esc to interrupt)"
    interruptHintCompact: "(Esc: stop)"
    interruptHintMinimal: "Esc"
    responseInterrupted: "Response interrupted."
    instructionInterrupted: "Instruction generation interrupted."
    runFinished: "The workflow run finished. Describe the next task, or /cancel to leave."
    taskSaved: "The task was saved. Describe the next task, or /cancel to leave."
    issueCreated: "The issue was created. Describe the next task, or /cancel to leave."
    promptHint: "Enter: confirm  Esc: cancel"
    promptKeepHint: "Enter: confirm  empty Enter: keep the current value  Esc: cancel"
    promptPlaceholder: "Type your answer"
    model: "Model: {value}"
  errors:
    requiresTty: "--tui requires an interactive terminal. Run takt from a TTY or drop --tui."
    exitedEarly: "The TUI exited before the task conversation finished."
    providerNotConfigured: "No provider is configured. Set one in ~/.takt/config.yaml or pass --provider."
    workflowNotFound: "Workflow not found: {workflow}"
    messageRequired: "Type a message first."
    taskTextRequired: "Task text is required."
    emptyAiResponse: "The assistant returned no response."
    noConversation: "No conversation yet. Describe your task first."
    instructionFailed: "Failed to create the task instruction."
    conversationRebuildFailed: "Failed to switch conversation settings: {error}"
    unsupportedCommand: "That command is not available in the TUI."
    settingNoArguments: "{command} does not accept an argument."
    tellInstructionRequired: "Describe the additional instruction before using /tell."
    tellGenerationFailed: "The additional instruction could not be generated: {error}"
    tellSelectionFailed: "Failed to select an additional-instruction recipient. No instruction was sent: {error}"
    tellRequiresTty: "The additional instruction was not sent: /tell requires an interactive terminal."
    tellNoCandidates: "No running worktree-clone task can receive an additional instruction."
    tellExcluded: "Running tasks excluded from /tell:\n{tasks}"
    tellExcludedMore: "... and {count} more excluded tasks"
    tellCancelled: "Additional instruction was not sent."
    tellStale: "The additional instruction was not sent: {error}"
    assistantRetryRequiresTty: "The task was not changed: /requeue and /retry require an interactive terminal."
    assistantRetryNoCandidates: "There are no tasks eligible for this command."
    assistantRetryUnresolved: "I could not identify one eligible task and a usable start position from the conversation. No task was changed."
    assistantRetryGenerationFailed: "The task could not be prepared: {error}"
    assistantRetryInvalidResult: "The assistant returned a task or start position that is not available. No task was changed."
    assistantRetryFormatMismatch: "The response did not match the required single-property JSON format."
    assistantRetryUnknownTaskName: "The returned task name is not among the candidates."
    assistantRetryUnknownStartId: "The returned start position ID is not among the selectable candidates."
    assistantRetryCancelled: "The task was not changed."
    assistantRetryRequeued: "Task \"{task}\" is pending again. The workflow was not started."
    assistantRetrySaved: "The revised task \"{task}\" is pending. The workflow was not started."
    settingValueRequired: "{command} requires a value."
    imagePasteFailed: "The image could not be pasted."
  tell:
    targetFailed: "Target unclear: {reason}"
    targetUnresolved: "The conversation did not identify one recipient."
    targetInvalid: "The assistant returned an invalid response."
    targetUnknown: "The returned run is not among the candidates."
    selectPrompt: "Select the running task to tell:"
    confirm: "Send this additional instruction?\nTask: {task}\nSummary: {summary}\nWorkflow: {workflow}\nCurrent step: {step}\nRun slug: {runSlug}\nInstruction:\n{content}"
    sent: "Additional instruction sent to {task} (instruction #{instructionId})."
  assistantRetry:
    selectTask: "Select a task to return to the queue."
    selectStart: "Select a start position for the task."
    resumeUnavailable: "Saved resume position is unavailable: {reason}\nSaved resume information cannot be carried forward. Select a position to restart execution, or cancel."
    requeueConfirm: "Return this task to the queue?\nTask: {task}\nSummary: {summary}\nWorkflow: {workflow}\nStart position: {start}"
    retryDetails: "Task: {task}\nSummary: {summary}\nWorkflow: {workflow}\nStart position: {start}"
    exceededStart: "Saved stopping position: {start} (iteration {iteration})"

director:
  slackNotifications: "Director updates: completed work and decisions for the human"
  patrolFailed: "Director patrol failed"
  projectUnreadable: "Director could not read a project"
  description: "Open the experimental director conversation TUI"
  experimentalNotice: "director is experimental. Behavior, settings, and saved data formats may change."
  costNotice: "director runs AI turns, which incur provider API costs."
  placeholder: "Discuss manager status or instructions"
  managerReply: "Reply from manager {managerId} (operation ID: {operationId}): {message}"
  managerError: "Manager {managerId} message failed (operation ID: {operationId}): {message}"
  managerInterrupted: "Manager {managerId} message was interrupted (operation ID: {operationId}): {message}"
manager:
  goalPr:
    objective: "Objective"
    changes: "Changes"
    verification: "Verification"
    humanChecks: "Human verification steps"
    truncated: "The change list is truncated. Also review the PR diff."
  conversation:
    reading: "Reading conversation data. Summary approval is unavailable until it completes."
    disconnected: "Reconnecting to the daemon."
    incomplete: "The read is incomplete. Summary approval is unavailable until refresh completes."
    interrupted: "The previous operation was interrupted. You can send a new message."
    director_interrupted: "The director message (operation ID: {operationId}) was interrupted. It will not be retried automatically."
    permission_appended: "The permission was appended. Check whether the answer was saved."
    assignment_changed: 'The assignment has changed. Reopen the conversation for the current assignment.'
    busy: "An operation is running. Submit again after it finishes."
    stale_summary: "The summary has changed. Review the latest summary."
    invalid_assignment: "The assignment changed or the target is outside it. Reopen the conversation."
    unavailable_attachment: "The conversation is disconnected. Reopen it."
    registration_recovery: "Goal registration needs recovery. Inspect the saved reservation and goal state."
    storage_error: "Conversation state could not be saved. Check storage and reconnect."
    shutting_down: "The daemon is shutting down. Connect again."
    invalid_input: "The operation input is invalid."
    operation_failed: "The conversation operation failed. Inspect its current state."
    dismissed: "Summary dismissed."
    answer_saved: "Answer saved."
  assignmentHeading: "Assignment: {name}"
  assignmentHeadingMultiple: "Assignment: {name} + {count} more"
  counts: "Ongoing {goals} / Pending {questions}"
  inputHint: "Enter Send  Shift+Enter Newline  Esc Interrupt  ^R Inquiries  ^G Goals  ^C Exit"
  makeGoalHint: "/make-goal creates a goal registration proposal"
  makeGoalDescription: "Create a goal registration proposal"
  slackGoalApprove: "Approve registration"
  slackGoalDismiss: "Continue conversation"
  slackGoalObjective: "Objective"
  slackGoalOutOfScope: "Out of scope"
  slackGoalAcceptance: "Acceptance criteria"
  slackGoalConstraints: "Work constraints"
  summaryInputHint: "↑↓ Choose / Enter Confirm / Esc Continue conversation / Ctrl+C Exit"
  goSummaryRequest: "Summarize the current conversation for goal registration. Return the objective, out-of-scope items, acceptance criteria, and work constraints in the structured response's summary. If there is insufficient material to summarize, explain why in message and return summary: null."
  goSummaryUnavailable: "Could not create a summary for registration because there is insufficient material. Please continue the conversation."
  summaryWorking: "Preparing a summary"
  inputUnavailableDuringAbort: "Cannot enter input during abort confirmation. Finish the confirmation before typing."
  toolPermission:
    savedDenial: "Denied by the saved approval answer."
    consumptionFailed: "Denied because approval consumption could not be saved."
    contextReadFailed: "Human confirmation is required because permission or approval information could not be read. {reason}"
    approvalConsumed: "The once approval has been consumed. Human confirmation is required again."
    inquirySaveFailed: "Failed to save the approval inquiry."
    agentDenied: "{toolName}: The manager is not allowed to launch another AI agent."
    bashDenied: "Bash: Launching another AI command-line agent is not allowed."
    awaitingConfirmation: "Waiting for human confirmation ({toolName}): {reason}"
    judgeFailed: "Denied because the tool permission judge failed to run."
    judgeInvalidOutput: "Denied because the tool permission judge returned invalid output."
    judgeMissingReason: "Denied because the tool permission judge did not provide a reason."
    judgeTimeout: "Referred for human confirmation because the tool permission judge did not return a decision within the 30-second time limit."
    judgeInterrupted: "Denied because the tool permission check was interrupted."
    judgeValidationFailed: "Denied because the tool permission judge failed to run or its output could not be validated."
  conversationFailureNotification: |-
    Manager processing failed.
    Reason: {reason}
    Review the conversation and current work state before trying again.
  turnFailureNotification: |-
    The manager failed to process an event. Unprocessed events remain.
    Review the logs and configuration to resolve the event processing failure.
    For a paused goal, press Ctrl+G in the TUI, select the goal and resume it, or request resumption in conversation with a supported provider and confirm the operation. An aborted goal cannot be resumed.
    Reason: {reason}
  selectionTitles:
    answer: "Select an inquiry to answer"
    goal: "Select a goal"
    action: "Select a goal operation"
  goalActions:
    pause: "Pause"
    resume: "Resume"
    abort: "Abort"
  selectionHint: "↑↓ Choose / Enter Select / Esc Close"
  selectionEmpty:
    repository: "No assigned repositories."
    answer: "No pending inquiries to answer."
    goal: "No ongoing goals to operate on."
  goalRegistered: "Goal registered: {name} ({id})\n{branch}"
  sessionUnavailable: "The manager session is currently unavailable."
  goalPaused: "Goal paused: {goalId}"
  goalResumed: "Goal resumed: {goalId}"
  goalExecutionFailed: "Could not change the goal execution state: {reason}"
  goalStates:
    active: "Active"
    paused: "Paused"
    awaiting_merge: "Awaiting merge"
  inquiryKinds:
    question: "Question"
    approval: "Approval"
    operation_request: "Operation request"
  answerHint: "Press Ctrl+R to select an inquiry and answer"
  slack:
    replyHint: "Use a button to choose an answer, or reply in this thread for free text."
    permissionTitle: "Confirm permission"
    permissionSentence: "Permission sentence"
    confirm: "Confirm"
    cancel: "Cancel"
  answerFreeText: "Free text"
  answerChoiceHint: "↑↓ Choose / Enter Select / Esc Back"
  answerPrompt: "Enter your answer"
  inquiryNoGoal: "No goal"
  permissionAppendFailed: "Failed to append permission: {reason}"
  answerStages:
    decision: "Choose whether to allow this operation."
    report: "Report the result of the procedure."
    scope: "Choose the approval scope."
    comment: "Optional comment (Enter to confirm)"
    permission: "Edit and confirm one permission sentence. If saving fails, correct the cause and press Enter to retry."
  answerChoices:
    allow: "Allow"
    deny: "Deny"
    completed: "Completed"
    unable: "Unable"
    once: "This time only (once)"
    goal: "This goal"
    project: "Project"
    projectManager: "Project / Manager"
    workspace: "Manager (workspace)"
    global: "Global"
  goalAborted: "Goal aborted: {goalId}"
  abortConfirmation: "Confirm goal abort"
  abortRetryWarning: "The abort operation failed. Retry the same goal to finish abort processing."
  retryAbort: "Retry abort processing"
  selectionChanged: "The selected goal is no longer eligible. The candidate list has been updated."
  abortWarning: "Aborting cannot be undone. Pending tasks are invalidated and running tasks belonging to this goal are interrupted. Branches, sub-PRs and records are retained."
  confirmAbort: "Abort goal"
  cancelAbort: "Cancel"
  abortChoiceHint: "↑ Abort / ↓ Cancel / Enter Select / Esc Back"
  description: "Open the experimental manager conversation TUI"
  experimentalNotice: "manager is experimental. Behavior, settings, and saved data formats may change without notice."
  costNotice: "manager automatically queues and runs tasks, which incurs provider API costs."
  notificationHeadings:
    progress: "Progress update — {project}"
    awaiting_merge: "Awaiting merge — {project}"
    completed: "Goal completed — {project}"
    blocked: "Cannot proceed — {project}"
    question: "Question — {project}"
    custom: "Notification — {project}"
  notificationGoal: "Goal: {objective} ({id})"
  notificationSeverity: "Severity: {severity}"
  notificationSeverities:
    info: "Information"
    warning: "Warning"
    error: "Error"
  notificationIntegratedBody: "Integrated the work on “{purpose}”."
  notificationOptions: "Options: {options}"
  notificationMoreOptions: "Additional options: {count}. View all options in the TUI."
  notificationRecommendation: "Recommendation: {recommendation}"
  notificationAnswer: "Open takt manager in {project}, press Ctrl+R in the TUI and select an inquiry from the list to answer."
  notificationMerge: "Review the changes and merge them into the {branch} branch."
  notificationMergeRepository: "Run the following commands in order in a clean worktree of the {project} repository where you can switch branches."
  notificationMergeWorktree: "Check the state of the worktree at {directory}, then run the following commands in order."
  notificationBlockedAction: "Check the reason and required action above. For full details, open takt manager in {project} and follow up in the TUI."
  notificationFullMessage: "Open takt manager in {project} to check the conversation and current work state in the TUI."
  notificationDigestHint: "Remaining body lines omitted."

caccia:
  waitingForReview: "Caccia: Waiting for a CodeRabbit review."
  waiting: "Caccia: Still waiting for a CodeRabbit review."
  threads: "Caccia: {count} unresolved thread(s) to process."
  iteration: "Caccia: Iteration {current} / {maximum}"
  cloning: "Caccia: Creating a temporary clone."
  pushed: "Caccia: Pushed commit {commit}."
  resolved: "Caccia: Resolved thread {thread}."
  success: "No unresolved CodeRabbit review threads remain."
  skipped: "Caccia skipped: {reason}"
  limit: "Caccia reached its iteration limit with {count} unresolved thread(s)."
  failed: "Caccia failed: {error}"
  notRun: "Caccia was not started."
