chore(claude-do): refactor(ui): DetailsIslandViewModel (1431 Zeilen) in Sektio

Kontext: src/ClaudeDo.Ui/ViewModels/Islands/DetailsIslandViewModel.cs ist mit 1431 Zeilen ein God-VM mit ~12 Concerns (Log-Streaming, Titel/Description-Editing, Subtasks, Child-Outcomes, Merge-Preview/-Targets, Diff, Agent-Settings-Overrides, Notes-Mode, Prep-Mode, Tabs, Session-Outcome/Roadblocks, Worktree-Info). Jedes neue Feature landet dort.

Änderungen — drei klar abgrenzbare Sektionen als ei

ClaudeDo-Task: 483e419f-1ec8-46ba-986b-8b90d6596b49
This commit is contained in:
mika kuns
2026-06-10 00:31:09 +02:00
parent 74ca2e0dcd
commit e272053e72
12 changed files with 645 additions and 530 deletions

View File

@@ -77,11 +77,11 @@ public class DetailsIslandConflictSeamTests : IDisposable
var vm = BuildVm(new ConflictApproveWorkerClient());
vm.Bind(new TaskRowViewModel { Id = taskId, Status = TaskStatus.WaitingForReview });
vm.SelectedMergeTarget = "main";
vm.Merge.SelectedMergeTarget = "main";
string? capturedTaskId = null;
string? capturedTarget = null;
vm.RequestConflictResolution = (tid, target) =>
vm.Merge.RequestConflictResolution = (tid, target) =>
{
capturedTaskId = tid;
capturedTarget = target;

View File

@@ -140,11 +140,11 @@ public class DetailsIslandPlanningTests : IDisposable
// Wait for the background load to settle
var deadline = DateTime.UtcNow.AddSeconds(5);
while (DateTime.UtcNow < deadline && vm.MergeTargetBranches.Count == 0)
while (DateTime.UtcNow < deadline && vm.Merge.MergeTargetBranches.Count == 0)
await Task.Delay(20);
Assert.Contains("main", vm.MergeTargetBranches);
Assert.Contains("dev", vm.MergeTargetBranches);
Assert.Equal("main", vm.SelectedMergeTarget);
Assert.Contains("main", vm.Merge.MergeTargetBranches);
Assert.Contains("dev", vm.Merge.MergeTargetBranches);
Assert.Equal("main", vm.Merge.SelectedMergeTarget);
}
}

View File

@@ -67,7 +67,7 @@ public class DetailsIslandPrepModeTests : IDisposable
stub.RaisePrepLine("{\"type\":\"assistant\",\"message\":{\"content\":[{\"type\":\"text\",\"text\":\"hi\"}]}}");
Assert.NotEmpty(vm.PrepLog);
Assert.NotEmpty(vm.Prep.PrepLog);
}
[Fact]
@@ -88,9 +88,9 @@ public class DetailsIslandPrepModeTests : IDisposable
var vm = NewDetailsVm(stub);
vm.ShowPrep();
await vm.LoadLastPrepLogIfEmptyAsync();
await vm.Prep.LoadLastPrepLogIfEmptyAsync();
Assert.NotEmpty(vm.PrepLog);
Assert.NotEmpty(vm.Prep.PrepLog);
}
[Fact]
@@ -98,7 +98,7 @@ public class DetailsIslandPrepModeTests : IDisposable
{
var stub = new DefaultStub();
var vm = NewDetailsVm(stub);
await vm.PlanDayCommand.ExecuteAsync(null);
await vm.Prep.PlanDayCommand.ExecuteAsync(null);
Assert.Equal(1, stub.RunDailyPrepNowCalls);
}
@@ -106,6 +106,6 @@ public class DetailsIslandPrepModeTests : IDisposable
public void ShowPrepEmptyState_true_when_empty_and_not_running()
{
var vm = NewDetailsVm(new DefaultStub());
Assert.True(vm.ShowPrepEmptyState);
Assert.True(vm.Prep.ShowPrepEmptyState);
}
}