mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-03 11:10:23 +02:00
Batch sub-issue status changes triggered two wrong behaviours from one user action: - Frontend popped the pre-trigger "现在开始处理?" confirm modal for every non-backlog target, but done/cancelled can never start a run, so it degenerated into a misleading "won't start → OK" step. handleBatchStatus now applies directly (product decision: batch status, including backlog → active promotion, applies like a single-issue/CLI change). Assign agent/squad and delete still confirm. The now-unreachable status mode is removed from RunConfirmModal and its locale keys. - Backend evaluated the stage barrier per-child inside the batch loop, using a mid-batch sibling snapshot. A batch closing several stages at once emitted one comment per intermediate stage, pinned the parent assignee's wake to a stale "advance Stage N+1" instruction (the accurate wake was swallowed by the pending-task dedup), and the outcome depended on issue_ids order. BatchUpdateIssues now collects terminal transitions and evaluates each parent once against the batch's final state (notifyParentsOfBatchChildDone): at most one accurate comment + one wake per parent, order-independent. Single-issue UpdateIssue is unchanged; WillEnqueueRun is untouched. Tests: cross-stage batch done/cancelled (forward + reverse) and lower-stage-only on the backend; status-direct / assign-confirm / delete-confirm routing on the frontend. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
212 lines
9.7 KiB
JSON
212 lines
9.7 KiB
JSON
{
|
|
"common": {
|
|
"back": "Back",
|
|
"close": "Close",
|
|
"cancel": "Cancel",
|
|
"expand_tooltip": "Expand",
|
|
"collapse_tooltip": "Collapse"
|
|
},
|
|
"create_workspace": {
|
|
"title": "Create a new workspace",
|
|
"description": "Workspaces are shared environments where teams can work on projects and issues."
|
|
},
|
|
"delete_issue": {
|
|
"title": "Delete issue",
|
|
"description": "This will permanently delete this issue and all its comments. This action cannot be undone.",
|
|
"hint": "Any workspace member can delete issues.",
|
|
"cancel": "Cancel",
|
|
"confirm": "Delete",
|
|
"deleting": "Deleting...",
|
|
"toast_deleted": "Issue deleted",
|
|
"toast_delete_failed": "Failed to delete issue"
|
|
},
|
|
"feedback": {
|
|
"title": "Feedback",
|
|
"placeholder": "Tell us about your experience, bugs you've found, or features you'd like to see…",
|
|
"toast_uploading": "Please wait for uploads to finish…",
|
|
"toast_too_long": "Message is too long",
|
|
"toast_sent": "Thanks for the feedback!",
|
|
"toast_failed": "Failed to send feedback",
|
|
"send": "Send feedback",
|
|
"sending": "Sending…",
|
|
"github_hint_prefix": "Want faster handling and open discussion? Head to ",
|
|
"github_hint_link": "GitHub"
|
|
},
|
|
"issue_picker": {
|
|
"search_placeholder": "Search issues...",
|
|
"searching": "Searching...",
|
|
"no_results": "No issues found.",
|
|
"prompt_to_search": "Type to search issues"
|
|
},
|
|
"set_parent": {
|
|
"title": "Set parent issue",
|
|
"description": "Search for an issue to set as the parent of this issue",
|
|
"toast_failed": "Failed to update issue",
|
|
"toast_success": "Set {{identifier}} as parent issue"
|
|
},
|
|
"add_child": {
|
|
"title": "Add sub-issue",
|
|
"description": "Search for an issue to add as a sub-issue",
|
|
"toast_failed": "Failed to add sub-issue",
|
|
"toast_success": "Added {{identifier}} as sub-issue"
|
|
},
|
|
"run_confirm": {
|
|
"title_assign": "Assign and start?",
|
|
"checking": "Checking…",
|
|
"will_start_named": "Once assigned, {{name}} will start working on this issue right away.",
|
|
"will_start_named_squad": "Once assigned, {{name}}'s leader will review it and start assigning the work.",
|
|
"will_start": "This will start work on {{count}} issues right away.",
|
|
"will_start_squad": "This hands {{count}} issues to the squad's leader to review and assign.",
|
|
"nothing_assign": "Assigned — won't start working while in Backlog.",
|
|
"note_label": "Handoff note (optional)",
|
|
"note_placeholder": "Tell them what matters — scope, focus, or what to avoid…",
|
|
"note_unsupported": "Their runtime is too old to receive this handoff note; it may not be read.",
|
|
"start": "Start",
|
|
"dont_start": "Don't start yet",
|
|
"apply": "Apply",
|
|
"toast_failed": "Action failed",
|
|
"create_will_start": "{{name}} will start working right after creation.",
|
|
"create_will_start_squad": "{{name}}'s leader will review it and start assigning work right after creation.",
|
|
"create_parked": "Assigned — won't start working in Backlog."
|
|
},
|
|
"create_squad": {
|
|
"title": "Create Squad",
|
|
"description": "Create a collaborative squad with a leader agent and optional additional members.",
|
|
"name_label": "Name",
|
|
"name_placeholder": "e.g. Frontend Team",
|
|
"description_label": "Description",
|
|
"description_placeholder": "Describe what this squad is responsible for...",
|
|
"leader_label": "Leader Agent",
|
|
"leader_hint": "The leader receives all tasks assigned to this squad and coordinates the team.",
|
|
"leader_placeholder": "Select a leader agent",
|
|
"members_label": "Additional Members",
|
|
"members_optional": "(optional)",
|
|
"members_hint": "Members the leader can delegate sub-tasks to. Can be added later.",
|
|
"members_placeholder": "Add agents or workspace members",
|
|
"members_selected_count_one": "{{count}} selected",
|
|
"members_selected_count_other": "{{count}} selected",
|
|
"members_more_count": "+{{count}}",
|
|
"members_remove_aria": "Remove {{name}}",
|
|
"picker_search_placeholder": "Search agents and members...",
|
|
"group_my_agents": "My Agents",
|
|
"group_workspace_agents": "Workspace Agents",
|
|
"group_members": "Members",
|
|
"no_agents": "No active agents available. Create an agent first.",
|
|
"no_results": "No results",
|
|
"cancel": "Cancel",
|
|
"submit": "Create Squad",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Squad created",
|
|
"toast_failed": "Failed to create squad",
|
|
"toast_member_add_failed": "Failed to add {{name}}: {{error}}"
|
|
},
|
|
"create_project": {
|
|
"title": "New Project",
|
|
"title_breadcrumb": "New project",
|
|
"icon_tooltip": "Choose icon",
|
|
"title_placeholder": "Project title",
|
|
"description_placeholder": "Add description...",
|
|
"description_hint": "Shared with agents as context for every task in this project.",
|
|
"lead": "Lead",
|
|
"no_lead": "No lead",
|
|
"lead_placeholder": "Assign lead...",
|
|
"members_group": "Members",
|
|
"agents_group": "Agents",
|
|
"no_results": "No results",
|
|
"submit": "Create Project",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Project created",
|
|
"toast_failed": "Failed to create project",
|
|
"repos_pill": "Repos",
|
|
"repos_pill_count_one": "{{count}} repo",
|
|
"repos_pill_count_other": "{{count}} repos",
|
|
"repos_heading": "Attach GitHub repos to this project",
|
|
"repos_empty": "No workspace-level repos yet. Paste a URL below to attach one ad-hoc.",
|
|
"repos_search_placeholder": "Search repositories...",
|
|
"repos_search_empty": "No repositories match your search.",
|
|
"repos_url_placeholder": "https://github.com/owner/repo or git@github.com:owner/repo.git",
|
|
"repos_add": "Add",
|
|
"repos_selected": "Selected",
|
|
"source_pill_local": "Local directory",
|
|
"source_tab_repos": "GitHub repos",
|
|
"source_tab_local": "Local directory",
|
|
"local_heading": "Use a local working directory on this machine",
|
|
"local_on_device": "Bound to {{device}}",
|
|
"local_this_machine": "this machine",
|
|
"local_daemon_offline": "Daemon offline — start it to bind a local directory.",
|
|
"local_pick": "Choose directory…",
|
|
"local_picking": "Opening picker…",
|
|
"local_change": "Change directory…",
|
|
"local_clear": "Clear",
|
|
"local_pick_failed": "Could not open the directory picker.",
|
|
"local_invalid_dir": "This directory can't be used. Pick another.",
|
|
"local_hint": "Agents on other machines won't see this path — they'll fail to start. Use repos for shared work."
|
|
},
|
|
"create_issue": {
|
|
"sr_manual": "New Issue",
|
|
"sr_agent": "Quick create issue",
|
|
"manual_breadcrumb": "Create manually",
|
|
"agent_breadcrumb": "Create with agent",
|
|
"title_placeholder": "Issue title",
|
|
"description_placeholder": "Add description...",
|
|
"more_options_aria": "More options",
|
|
"title_required": "Enter a title to create",
|
|
"submit": "Create Issue",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Issue created",
|
|
"view_issue": "View issue",
|
|
"toast_failed": "Failed to create issue",
|
|
"toast_duplicate_title": "Duplicate issue",
|
|
"toast_duplicate_view": "View existing issue",
|
|
"toast_link_subissues_all_failed": "Failed to link sub-issues",
|
|
"toast_link_subissues_partial": "Failed to link {{failed}} of {{total}} sub-issues",
|
|
"toast_link_labels_failed": "Failed to attach labels",
|
|
"switch_to_agent": "Switch to Agent",
|
|
"switch_to_agent_tooltip": "Switch to create with agent — describe in one line and let the agent file it",
|
|
"switch_to_manual": "Switch to Manual",
|
|
"switch_to_manual_tooltip": "Switch to manual create — fill the fields yourself",
|
|
"create_another": "Create another",
|
|
"remove_parent_aria": "Remove parent",
|
|
"remove_subissue_aria": "Remove sub-issue {{identifier}}",
|
|
"subissue_of": "Sub-issue of {{identifier}}",
|
|
"subissue_chip": "Sub-issue: {{identifier}}",
|
|
"parent_with_id": "Parent: {{identifier}}",
|
|
"set_due_date": "Set due date...",
|
|
"set_start_date": "Set start date...",
|
|
"set_parent": "Set parent issue...",
|
|
"add_subissue": "Add sub-issue...",
|
|
"remove_parent": "Remove parent",
|
|
"set_parent_picker": {
|
|
"title": "Set parent issue",
|
|
"description": "Search for an issue to set as the parent of the new issue"
|
|
},
|
|
"add_subissue_picker": {
|
|
"title": "Add sub-issue",
|
|
"description": "Search for an issue to add as a sub-issue of the new issue"
|
|
},
|
|
"agent": {
|
|
"created_by": "Created by",
|
|
"select_agent_aria": "Select agent",
|
|
"pick_an_agent": "Pick an agent…",
|
|
"no_agents": "No agents or squads available.",
|
|
"search_placeholder": "Search agents and squads…",
|
|
"agents_group": "Agents",
|
|
"squads_group": "Squads",
|
|
"version_missing": "This agent's daemon doesn't report a CLI version. Create with agent needs multica CLI ≥ {{min}}. Upgrade the daemon and reconnect, or switch to manual create.",
|
|
"version_below": "This agent's daemon CLI is {{current}} — Create with agent needs ≥ {{min}}. Upgrade the daemon, or switch to manual create.",
|
|
"prompt_placeholder": "Tell the agent what to do, e.g. \"let Bohan fix the inbox loading slowness in the Web project\"",
|
|
"submit": "Create",
|
|
"sending": "Sending…",
|
|
"uploading": "Uploading…",
|
|
"sent_label": "Sent",
|
|
"sent_count": "{{count}} sent",
|
|
"version_blocked_tooltip": "Daemon CLI must be ≥ {{min}}",
|
|
"toast_sent": "Sent to agent — you'll get an inbox notification when it's done",
|
|
"error_agent_unavailable_fallback": "Agent is unavailable. Pick another agent.",
|
|
"error_daemon_version": "This agent's daemon CLI ({{current}}) is below the required {{min}}. Upgrade the daemon to use Create with agent.",
|
|
"error_unknown": "Failed to submit. Try again.",
|
|
"sub_issue_of": "Sub-issue of {{identifier}}"
|
|
}
|
|
}
|
|
}
|