refactor(diff): render planning mode per file and retire DiffLinesView
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
# Review, merge & conflict resolution
|
||||
|
||||
> **Explore-note — verify before trusting.** Distilled map of a subsystem, not authoritative.
|
||||
> Last verified against commit `0d1e3b9` (2026-08-06).
|
||||
> Last verified against branch `worktree-diff-side-by-side` @ 2026-08-07, the commit right after
|
||||
> `cf80fe3` that reworks Planning mode and retires `DiffLinesView` (exact SHA not known at write
|
||||
> time — see `git log` on that branch).
|
||||
> Drift check: `git log --oneline 20bce9b..HEAD -- src/ClaudeDo.Worker/Lifecycle src/ClaudeDo.Worker/State src/ClaudeDo.Worker/Planning src/ClaudeDo.Ui/ViewModels/Conflicts src/ClaudeDo.Worker/External`
|
||||
> Stable structure only (no line numbers). See docs/explore-notes/README.md.
|
||||
|
||||
@@ -219,15 +221,20 @@ Review **Approve** on conflict, and the **Merge** button in the Diff window (a c
|
||||
## Diff stack (UI)
|
||||
|
||||
`UnifiedDiffParser` (static) parses `git diff` output into `DiffFileViewModel`s, detecting
|
||||
added/deleted/renamed/binary files and per-line numbers; `Flatten` injects file-header rows for
|
||||
a combined single-pane view. `DiffModels.cs` holds the shared types (`DiffLineViewModel`,
|
||||
`DiffFileViewModel`, `DiffLineKind`, `DiffFileStatus`, `SubtaskDiffRow`,
|
||||
added/deleted/renamed/binary files and per-line numbers. `DiffModels.cs` holds the shared types
|
||||
(`DiffLineViewModel`, `DiffFileViewModel`, `DiffLineKind`, `DiffFileStatus`, `SubtaskDiffRow`,
|
||||
`DiffTreeNodeViewModel`, `DiffTree`).
|
||||
|
||||
`DiffViewerViewModel` is one unified read-only viewer with two modes:
|
||||
- **Files** — dirty worktree / branch-vs-base / commit-range. Loads via `GitService`, folder
|
||||
file-tree left + per-file diff pane right, Merge button for a live branch source.
|
||||
- **Planning** — per-subtask diffs via `GetPlanningAggregateAsync`, subtask list left + flat
|
||||
diff right, combined integration-branch toggle.
|
||||
- **Planning** — per-subtask diffs via `GetPlanningAggregateAsync`, subtask list left + one
|
||||
editor per file right (`PlanningFiles`), combined integration-branch toggle.
|
||||
|
||||
`DiffLinesView` renders per-file content with binary/empty placeholders.
|
||||
Both modes render through `DiffAlignment` (pure — pairs diff lines into side-by-side rows and
|
||||
computes word-diff spans) and `DiffTextView` (AvaloniaEdit + TextMate highlighting keyed off the
|
||||
file extension, unified/split layout, optional line wrap, synced scrolling). Files mode hosts one
|
||||
`DiffTextView` for the selected file; Planning mode hosts one per file in `PlanningFiles` so each
|
||||
gets its own grammar (one editor can only carry one TextMate grammar). The split/wrap toggles
|
||||
persist to `ui.config.json` via `AppSettings` and reach the per-file editors in Planning mode
|
||||
too.
|
||||
|
||||
Reference in New Issue
Block a user