- Two-phase flow: Load repos fills a selectable, sortable table
(checkbox column + select-all, Name/Status/Branch/Archived headers);
Sync selected runs only checked repos via a new engine overload that
takes an explicit repository list
- Per-row progress bars: determinate clone percent, indeterminate pull
- Always-on activity log (IActivityLog/FileActivityLog in the engine,
%LOCALAPPDATA%\gclo\logs, never throws) wired into GUI and CLI;
View > Activity log menu opens a viewer with open-logs-folder
- Retry failed re-runs exactly the failed repos; Open folder appears
after a run; live target-path preview + optional org subfolder toggle
- 29 new tests (90 total); also replaces a StatusText race in the old
view-model suite that CI caught (org-lookup message could overwrite
the sync summary on slow runners)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The dotnet gitignore template excludes *.pubxml (a web convention), but
packaged WinUI builds resolve PublishProfile=win-$(Platform).pubxml at
build time: fresh checkouts failed with NETSDK1198 on CI.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New UI-framework-free library holds MainViewModel, RepoItemViewModel,
and AppSettings persistence (theme mapping stays in the app)
- Testability seams: injectable progress factory (synchronous in tests;
Progress<T> in the app) and org-lookup debounce interval
- 14 new view-model tests (61 total): command gating, sync flow with
per-repo outcomes, cancellation, debounced org lookup incl. supersede
and failure paths, concurrency clamping, item status formatting
- The WinUI project now contains only XAML, dialogs, pickers, brushes,
and update plumbing
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Official name expansion applied: README, CLI help, About dialog,
window title, CLI docs
- Release pipeline now attaches auto-generated changelogs (categorized
by labels via .github/release.yml) to every GitHub Release
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixes the owner-reported class of clone failures on repos that are fine on
Linux but break on Windows (#2):
- Clones are two-phase (fetch, then checkout) so core.longpaths=true is set
before any file touches disk — deep paths past MAX_PATH now clone fine
- WindowsPathValidator walks the tree before every checkout (clone, pull
merge, unborn repair): invalid characters, trailing space/dot, reserved
device names, >255-char segments, case-only collisions
- Failures surface as InvalidRepositoryPathsException with per-path reasons
and suggested sanitized names instead of raw libgit2 errors
- FetchAndPull also sets core.longpaths and validates incoming trees
12 new tests (47 total), fixtures forged via ObjectDatabase plumbing.
Recovery UX (rename/skip mapping) tracked in #2 for the UX overhaul.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every owner request as an individual tracked task: done / in progress /
queued (execution order) / deferred / needs-owner-action.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>