Bugs the audit caught in the recovery feature:
- Rename composition is now prefix-aware: renaming a directory AND its
descendant composes instead of producing contradictory paths
- ApplyRecoveryCore merges the persisted recovery with the incoming one,
so recovery-managed repos gaining new invalid paths are fixable
incrementally (GUI dialog and --sanitize-paths)
- Org-lookup loading spinner no longer sticks when superseded by a
short/cleared token
Simplification and correctness:
- Path validation + core.longpaths gated on Windows; other platforms
use plain checkouts (keeps the cross-platform CLI story true)
- Removed speculative/dead surface: ApplyRecoveryAsync token param,
UpdateCheckResult.IsDownloaded, unused DownloadAndApplyAsync params
- One validation implementation (Validate(Tree) delegates to
ValidatePaths); one run-summary string; shared concurrency constants
- Test fixtures deduplicated into GitTestHelpers.cs (~100 lines of
triplication removed); 3 new regression tests (114 total)
- gclo.Engine NuGet-ready: XML docs generated and completed across the
public surface, package metadata, PACKAGE.md readme
- Degraded org listing for classic PATs without read:org (personal
login only) instead of a hard failure; --token-file reads first
non-blank line
- Docs corrected to shipped reality: README GUI walkthrough, recovery
paragraphs, CLI examples/log section, release runbook recovery steps,
CONTRIBUTING architecture
Closes#5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Directory.Build.props: TreatWarningsAsErrors, AnalysisLevel
latest-recommended, EnforceCodeStyleInBuild, Deterministic
- .editorconfig codifying the existing style; every suppression has an
inline justification (incl. CA1822 for x:Bind codegen, proven needed)
- .gitattributes pins CRLF working trees (the format gate enforces
end_of_line, so checkout line endings must be deterministic)
- Analyzer fixes: MainViewModel is IDisposable (owns its CTS, window
disposes on close), explicit CancellationToken.None in test gates,
discarded App construction result
All gates pass with enforcement active: 0-warning build, 111/111
tests, clean format verify.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dependency PRs land on the integration branch and reach main through
the same gated dev->main flow as all other changes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>