Repository navigation
WPF cutover — sole shipping app is WinRestoreKit (0.1.0) - #13
Merged
Merged
Conversation
Completes Stage 5 of the Timeline+Compare WPF migration: the WPF shell
becomes the only shipping WinRestoreKit application, all WinForms is
removed, and the release artifact is one self-contained WinRestoreKit.exe.
Cutover (no compatibility shims):
- src/WinRestoreKit is now the WPF app (AssemblyName WinRestoreKit,
UseWPF, GenerateAssemblyInfo=false). Shell keeps its WinRestoreKit.Wpf
C# namespace; only the assembly/exe identity is WinRestoreKit.
- Moved App/MainWindow/Views/ViewModels/Services/Themes/Resources/
Navigation/Infrastructure from src/WinRestoreKit.Wpf into src/WinRestoreKit.
- Deleted the entire WinForms shell: MainForm, Program, Views/, Forms/,
Controls/, WinForms Helpers/, Resources.*, and WinForms-only fonts.
Preserved the load-bearing shared assets at their paths: app.manifest,
WinRestoreKit.ico, Properties/AssemblyInfo.cs, IBMPlexMono-Regular.ttf.
- Removed the src/WinRestoreKit.Wpf project; solution now has four projects
(WinRestoreKit WPF, Core, Application, Tests).
- Repointed the five /WinRestoreKit.Wpf;component/ pack URIs to
/WinRestoreKit;component/ (themes, templates).
- Dropped redundant InternalsVisibleTo("WinRestoreKit.Wpf") from Core and
Application (the renamed app is covered by the existing "WinRestoreKit").
Safety net restored for the new shell:
- Relocated DescribeStartupFailure to the neutral Application layer
(StartupDiagnostics). App.OnStartup now wraps shell construction in a
try/catch that shows the diagnostic and rethrows, preserving the Phase 2c
guarantee that a construction-time failure is a visible message, not a
silent WER tear-down.
Test triage (985 pass, 0 fail):
- Deleted WinForms-only tests (MainForm/ProgressPageView/BackupPageView/
HomePageView/HistoryPageView/FontLoader/NavigationService/ShellLayout/
RestoreDialogOwner); their contracts are covered by the WPF STA tests.
- Deleted CompressedDriftPayloadTests + HomePageViewDriftTests (reflected
the deleted HomePageView.DetectDrift); compressed-payload drift + scope
disposal is covered by SnapshotPayloadPreparationServiceTests,
SnapshotComparisonServiceTests, and BackupPayloadTests.
- Ported LogHelperTests to a neutral ILogSink capture (drops the RichTextBox
dependency; keeps the load-bearing format-string-hazard coverage).
- Repointed typeof(MainForm/Program).Assembly anchors to
typeof(WinRestoreKit.Wpf.App).Assembly; removed one WinForms close-rule
fact and two stale `using Views;` imports.
Version + docs:
- Bumped AssemblyVersion/AssemblyFileVersion to 0.1.0 (three-part) in the
canonical AssemblyInfo.cs; updated RebrandIdentity expected version.
- CLAUDE.md updated to describe the WPF app, the four-project layout, and
the relocated seams/startup guard.
Verified: Release build 0 warnings/0 errors; 985/985 tests pass; published
artifact is a single 68.8 MB self-contained WinRestoreKit.exe that launches
and renders the WPF shell (Timeline, navigation, dark theme) on a real
Windows desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Completes Stage 5 of the Timeline+Compare WPF migration: the WPF shell becomes the only shipping
WinRestoreKitapplication, all WinForms is removed, and the release artifact is one self-containedWinRestoreKit.exe.This is the entire remaining gap from the plan review — Stages 1–4 (Foundation Application layer, Timeline, Compare/Confirm/Restore, Backup/Progress/Results) were already complete with no stubs.
Changes
Cutover (no compatibility shims):
src/WinRestoreKitis now the WPF app (AssemblyNameWinRestoreKit,UseWPF,GenerateAssemblyInfo=false). Shell keeps itsWinRestoreKit.WpfC# namespace; only the assembly/exe identity isWinRestoreKit.src/WinRestoreKit.Wpfintosrc/WinRestoreKit.src/WinRestoreKit.Wpfproject; solution is now four projects.Safety net restored:
DescribeStartupFailure→ neutralStartupDiagnostics;App.OnStartupwraps construction in try/catch (visible message, not silent crash).Tests (985 pass, 0 fail): deleted WinForms-only tests covered by WPF STA tests; ported
LogHelperTeststo a neutral sink; repointed assembly anchors.Version + docs: bumped to
0.1.0; updatedCLAUDE.md.Verification
dotnet build(Release): 0 warnings, 0 errorsdotnet test(Release): 985 passed, 0 faileddotnet publish: exactly oneWinRestoreKit.exe(~68.8 MB, self-contained)MainWindowTitle = "WinRestoreKit", WPF shell renders Timeline + navigation + dark theme