23 TDD-sized tasks covering GitService additions, TaskMergeService,
SignalR surface, MergeModal view/vm, and wiring into DetailsIsland
plus DiffModal. Each task: failing test -> implement -> green -> commit.
Wire TaskResetService into DI and add WorkerHub.ResetTask with the
same InvalidOperationException/KeyNotFoundException error-translation
pattern as ContinueTask.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Window controls (min/close) were stroke-only paths — PathIcon fills
geometries, so only max rendered. Swap all three (and BrandCheck) to
closed filled shapes.
- Task rows now have a 1px LineBrush border + rounded 8px box with
subtle AccentSoft hover, matching the mock's visible row separation.
- "Open in explorer" button switched from icon-btn to btn class so it
matches "Open diff" / "Worktree" framing, with a proper Lucide-style
filled arrow geometry.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Binding had no Path, so it bound to ListsIslandViewModel itself
and the UpperCase converter produced the fully-qualified type name,
which rendered as "CLAUDEDO.UI.VIEWMODELS.ISLAI..." in the header.
Replace with literal Text="NAVIGATOR".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- A1: list-name eyebrow runs through UpperCase converter.
- D2: + Open-in-explorer icon button in AgentStrip (Process.Start on worktree path).
- D4: DeleteTaskCommand prompts inline confirm Window before deleting; shell
wires Details.CloseDetail to clear Tasks.SelectedTask and Details.DeleteFromList
to reload the current list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Expose OverdueItems / OpenItems / CompletedItems as separate observable
collections recomputed in LoadForList (and after add / toggle-done).
- OverdueItems: ScheduledFor.Date < Today && !Done
- OpenItems: remaining !Done
- CompletedItems: Done
View renders three sections with eyebrow-style headers:
- OVERDUE (blood accent, only when non-empty)
- TASKS (shown only when overdue is also visible, matching the mock)
- COMPLETED · N (hidden when IsShowingCompleted is false)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Expose IsOverdue, Tags, StepsCount/StepsCompleted, DiffAdditions/Deletions
on TaskRowViewModel; parse DiffStat into numeric add/del.
- Rebuild TaskRowView with explicit chip set: status, list-with-dot, branch
(GitBranch icon + mono), diff (+N moss / −M blood), per-tag chips.
- Selected row shows 2px accent left bar + AccentSoft background.
- Done rows dim to 0.55 opacity with faint title plus strikethrough.
- Live-tail row: mono 11px ellipsized text + slim 3px moss progress bar,
visible only when Status=Running and HasLiveTail.
- task-row Border now transitions Background and Margin.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Reformat subtitle to "{Weekday}, {Month} {Day} · {open} open".
- Add right-aligned running/review status pill (kbd style).
- Add header icon toolbar: Sort, Eye (toggle completed), MoreHorizontal.
- Wire Eye to IsShowingCompleted [ObservableProperty] on the VM.
- Style add-task row as rounded Surface2 border with dashed Plus circle,
borderless TextBox, and ENTER kbd chip visible on focus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rewrites ListsIslandView: NAVIGATOR eyebrow, search bar with PathIcon+borderless TextBox+kbd chip,
two ItemsControls for SmartLists/UserLists with icon/dot + active left-bar,
+ New list button, and footer profile row (avatar initials, username, machine/local, MoreHorizontal button).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add a RadialGradientBrush border (DeepBrush center → VoidBrush edges)
filling the island row. Island BoxShadow was already set to IslandShadow
token — no change needed there.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switched the four text-label buttons (Open diff, Worktree, Stop,
Approve & merge) from Classes="icon-btn" (24x24 fixed size) to
Classes="btn" so content is not clipped.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rewrote all Border.terminal TextBlock log-kind selectors from CSS
class form (.log-sys) to attribute form ([Tag=log-sys]), matching
the pattern used by the diff-line selectors. Classes are not set on
dynamically created TextBlocks; Tag binding works.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Added CancellationTokenSource per-load in both DetailsIslandViewModel
and TasksIslandViewModel. Public entry points cancel any in-flight load
before starting a new one. DB calls and collection mutations after awaits
are guarded with ThrowIfCancellationRequested. DetailsIslandViewModel
now sets _subscribedTaskId only after the DB confirms the entity exists,
preventing the SignalR handler from routing messages to a stale load.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Moved ShowDiffModal/ShowWorktreeModal delegate wiring from
AgentStripView (child, possibly detached) to DetailsIslandView
(the VM's DataContext owner). TopLevel is resolved at invocation
time, not at wiring time, so attachment order no longer matters.
AgentStripView reduced to InitializeComponent() only.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>