From f307ed80f039fe769c9f8dec408e0912bd3ea064 Mon Sep 17 00:00:00 2001 From: nrs <38722970+nrslib@users.noreply.github.com> Date: Sun, 22 Feb 2026 21:57:48 +0900 Subject: [PATCH] takt: tasuku-takt-list-komandoni-iss (#335) --- src/__tests__/taskStatusLabel.test.ts | 24 ++++++++++++++++++++++ src/features/tasks/list/taskStatusLabel.ts | 5 ++++- src/infra/task/mapper.ts | 1 + src/infra/task/types.ts | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/__tests__/taskStatusLabel.test.ts b/src/__tests__/taskStatusLabel.test.ts index 8e06987..824ff41 100644 --- a/src/__tests__/taskStatusLabel.test.ts +++ b/src/__tests__/taskStatusLabel.test.ts @@ -37,6 +37,30 @@ describe('formatTaskStatusLabel', () => { const task = makeTask({ kind: 'running', name: 'my-task' }); expect(formatTaskStatusLabel(task)).toBe('[running] my-task'); }); + + it('should include issue number when present', () => { + const task = makeTask({ + kind: 'pending', + name: 'implement-feature', + issueNumber: 32, + }); + expect(formatTaskStatusLabel(task)).toBe('[pending] implement-feature #32'); + }); + + it('should include issue number with branch when both present', () => { + const task = makeTask({ + kind: 'completed', + name: 'fix-bug', + issueNumber: 42, + branch: 'takt/42/fix-bug', + }); + expect(formatTaskStatusLabel(task)).toBe('[completed] fix-bug #42 (takt/42/fix-bug)'); + }); + + it('should not include issue number when absent', () => { + const task = makeTask({ kind: 'pending', name: 'my-task' }); + expect(formatTaskStatusLabel(task)).toBe('[pending] my-task'); + }); }); describe('formatShortDate', () => { diff --git a/src/features/tasks/list/taskStatusLabel.ts b/src/features/tasks/list/taskStatusLabel.ts index 2212784..32b9a50 100644 --- a/src/features/tasks/list/taskStatusLabel.ts +++ b/src/features/tasks/list/taskStatusLabel.ts @@ -8,7 +8,10 @@ const TASK_STATUS_BY_KIND: Record = { }; export function formatTaskStatusLabel(task: TaskListItem): string { - const status = `[${TASK_STATUS_BY_KIND[task.kind]}] ${task.name}`; + let status = `[${TASK_STATUS_BY_KIND[task.kind]}] ${task.name}`; + if (task.issueNumber !== undefined) { + status += ` #${task.issueNumber}`; + } if (task.branch) { return `${status} (${task.branch})`; } diff --git a/src/infra/task/mapper.ts b/src/infra/task/mapper.ts index a781921..3f69c00 100644 --- a/src/infra/task/mapper.ts +++ b/src/infra/task/mapper.ts @@ -127,6 +127,7 @@ function toBaseTaskListItem(projectDir: string, tasksFile: string, task: TaskRec completedAt: task.completed_at ?? undefined, ownerPid: task.owner_pid ?? undefined, data: toTaskData(projectDir, task), + issueNumber: task.issue, }; } diff --git a/src/infra/task/types.ts b/src/infra/task/types.ts index 573b047..5556536 100644 --- a/src/infra/task/types.ts +++ b/src/infra/task/types.ts @@ -92,4 +92,5 @@ export interface TaskListItem { startedAt?: string; completedAt?: string; ownerPid?: number; + issueNumber?: number; }