From 660e1adae6f46669f187e1c3ed7f8c11cbc590a2 Mon Sep 17 00:00:00 2001 From: Andy <119136210+AndyMik90@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:02:05 +0100 Subject: [PATCH] fix(ui): display subtask titles instead of UUIDs (#844) (#849) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(ui): display subtask titles instead of UUIDs in TaskSubtasks The Subtasks tab was rendering raw UUIDs instead of human-readable titles for each subtask row. This made the list hard to scan and undermined usability. Changed: - Display subtask.title instead of subtask.id in row header - Added fallback to 'Untitled subtask' for edge cases - Updated tooltip to show full title for truncated text Fixes #844 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 * fix: use i18n translation for untitled subtask fallback - Add 'subtasks.untitled' translation key to en/tasks.json - Add French translation to fr/tasks.json - Update TaskSubtasks.tsx to use useTranslation hook - Replace hardcoded 'Untitled subtask' with t('tasks:subtasks.untitled') Addresses CodeRabbit and Auto Claude PR review feedback. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --------- Co-authored-by: Test User Co-authored-by: Claude Opus 4.5 --- .../src/renderer/components/task-detail/TaskSubtasks.tsx | 6 ++++-- apps/frontend/src/shared/i18n/locales/en/tasks.json | 3 +++ apps/frontend/src/shared/i18n/locales/fr/tasks.json | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/frontend/src/renderer/components/task-detail/TaskSubtasks.tsx b/apps/frontend/src/renderer/components/task-detail/TaskSubtasks.tsx index b7355c39..7cb16055 100644 --- a/apps/frontend/src/renderer/components/task-detail/TaskSubtasks.tsx +++ b/apps/frontend/src/renderer/components/task-detail/TaskSubtasks.tsx @@ -1,4 +1,5 @@ import { CheckCircle2, Clock, XCircle, AlertCircle, ListChecks, FileCode } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; import { Badge } from '../ui/badge'; import { ScrollArea } from '../ui/scroll-area'; import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'; @@ -23,6 +24,7 @@ function getSubtaskStatusIcon(status: string) { } export function TaskSubtasks({ task }: TaskSubtasksProps) { + const { t } = useTranslation(['tasks']); const progress = calculateProgress(task.subtasks); return ( @@ -69,11 +71,11 @@ export function TaskSubtasks({ task }: TaskSubtasksProps) { - {subtask.id} + {subtask.title || t('tasks:subtasks.untitled')} -

{subtask.id}

+

{subtask.title || t('tasks:subtasks.untitled')}

diff --git a/apps/frontend/src/shared/i18n/locales/en/tasks.json b/apps/frontend/src/shared/i18n/locales/en/tasks.json index 88f24015..9b4b8c42 100644 --- a/apps/frontend/src/shared/i18n/locales/en/tasks.json +++ b/apps/frontend/src/shared/i18n/locales/en/tasks.json @@ -130,5 +130,8 @@ "useWorktreeLabel": "Use isolated workspace (recommended)", "useWorktreeDescription": "Creates changes in a separate git worktree for safe review before merging. Disable to build directly in your project (faster but riskier)." } + }, + "subtasks": { + "untitled": "Untitled subtask" } } diff --git a/apps/frontend/src/shared/i18n/locales/fr/tasks.json b/apps/frontend/src/shared/i18n/locales/fr/tasks.json index 613d5050..2cab8d9d 100644 --- a/apps/frontend/src/shared/i18n/locales/fr/tasks.json +++ b/apps/frontend/src/shared/i18n/locales/fr/tasks.json @@ -130,5 +130,8 @@ "useWorktreeLabel": "Utiliser un espace de travail isolé (recommandé)", "useWorktreeDescription": "Crée les changements dans un worktree git séparé pour une révision sécurisée avant la fusion. Désactivez pour travailler directement dans votre projet (plus rapide mais risqué)." } + }, + "subtasks": { + "untitled": "Sous-tâche sans titre" } }