From 1325ab9438d7a1292176bc1bd9f5cb5b529d4bc5 Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Wed, 16 Sep 2026 12:16:21 +0200 Subject: [PATCH] fix(ui): Worktrees-Uebersicht zeigt Task-Nummern, DIFF-Spalte trimmt statt abzuschneiden Befund F7 aus der Sichtpruefung 2026-09-16. TaskNumber war bereits im WorktreeMaintenanceService-Join und in WorktreeOverviewRow vorhanden, fehlte aber im Wire-DTO und in der UI-Kette; jetzt bis zur Row-/Conflict-Anzeige durchgereicht (# dimmed vor dem Titel, ausgeblendet bei 0). DIFF-Spalte bekommt CharacterEllipsis-Trimming + Tooltip statt hartem Cut, Spalte von 80 auf 110px verbreitert (Header und Row synchron). --- src/ClaudeDo.Data/Wire.cs | 3 ++- .../Modals/WorktreesOverviewModalViewModel.cs | 6 ++++- .../Modals/WorktreesOverviewModalView.axaml | 21 ++++++++++----- src/ClaudeDo.Worker/Hub/WorkerHub.cs | 3 ++- .../WorktreesOverviewReconcileTickTests.cs | 26 +++++++++++++++++++ 5 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/ClaudeDo.Data/Wire.cs b/src/ClaudeDo.Data/Wire.cs index 456f0469..c387d9e0 100644 --- a/src/ClaudeDo.Data/Wire.cs +++ b/src/ClaudeDo.Data/Wire.cs @@ -72,7 +72,8 @@ public record WorktreeOverviewDto( WorktreeState State, string? DiffStat, DateTime CreatedAt, - bool PathExistsOnDisk); + bool PathExistsOnDisk, + int TaskNumber = 0); public record ForceRemoveResultDto(bool Removed, string? Reason); diff --git a/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs index 04b25ada..bd22f38a 100644 --- a/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Modals/WorktreesOverviewModalViewModel.cs @@ -16,6 +16,7 @@ public enum BatchMergeOutcome { None, Merging, Merged, Conflict, Blocked, Verify public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase { [ObservableProperty] private string _taskId = ""; + [ObservableProperty] private int _taskNumber; [ObservableProperty] private string _taskTitle = ""; [ObservableProperty][NotifyPropertyChangedFor(nameof(IsRunning))] private TaskStatus _taskStatus; [ObservableProperty] private string _listId = ""; @@ -49,6 +50,9 @@ public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase public bool IsKept => State == WorktreeState.Kept; public bool IsRunning => TaskStatus == TaskStatus.Running; + // 0 = row without an allocated number (test seeds); a bare "#0" would be meaningless. + public bool ShowNumberBadge => TaskNumber > 0; + private static string FormatAge(TimeSpan ts) { if (ts.TotalDays >= 1) return $"{(int)ts.TotalDays}d ago"; @@ -366,7 +370,7 @@ public sealed partial class WorktreesOverviewModalViewModel : ViewModelBase private static WorktreeOverviewRowViewModel Map(WorktreeOverviewDto d) => new() { - TaskId = d.TaskId, TaskTitle = d.TaskTitle, TaskStatus = d.TaskStatus, + TaskId = d.TaskId, TaskNumber = d.TaskNumber, TaskTitle = d.TaskTitle, TaskStatus = d.TaskStatus, ListId = d.ListId, ListName = d.ListName, Path = d.Path, BranchName = d.BranchName, BaseCommit = d.BaseCommit, State = d.State, DiffStat = d.DiffStat, CreatedAt = d.CreatedAt, PathExistsOnDisk = d.PathExistsOnDisk, diff --git a/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml index 4e5f197f..98f708e7 100644 --- a/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml +++ b/src/ClaudeDo.Ui/Views/Modals/WorktreesOverviewModalView.axaml @@ -58,13 +58,18 @@ CommandParameter="{Binding}"/> - + - + + + + - + @@ -146,8 +152,11 @@ - + + + +