You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Leftover signature database** — embedded JSON database with 50 application profiles (Chrome, Firefox, Adobe, Steam, etc.) for known leftover paths. Signature-matched leftovers are flagged as Safe confidence before heuristic matching runs.
28
+
-**Administrator Protection (SMAA) readiness** — `UserIdentity` helper resolves the real interactive user's SID and LocalAppData even when running under Windows 11 SMAA elevation. InstalledProgramScanner and DataPaths use the real user's paths.
29
+
-**SafetyGuard path-traversal hardening** — paths containing `..` segments are rejected before normalization. 5 new test cases for traversal patterns.
30
+
-**Backup file validation** — `BackupManager` now validates registry backup content (non-empty, starts with `Windows Registry Editor Version 5.00`). Truncated backups log a warning instead of silently passing.
31
+
-**True disk footprint** — `InstalledProgram.ActualSizeBytes` computed by walking InstallLocation + AppData + ProgramData paths in parallel. Falls back to registry's EstimatedSizeKB.
32
+
-**Hash caching for duplicate finder** — persistent JSON cache keyed by (path, size, mtime). Second scans of the same directories are near-instant.
33
+
-**Configurable uninstall timeout** — default increased from 10 to 30 minutes. Settable via `UninstallEngine.UninstallerTimeout` and CLI `--timeout` flag.
34
+
-**Winget JSON output** — `PackageManagerScanner` tries `winget list --output json` first, falls back to fixed-width table parsing for older winget versions.
35
+
-**Orphaned Package Cache scanner** — `JunkFilesCleaner` scans `C:\ProgramData\Package Cache\` and flags entries whose parent product is no longer installed.
36
+
-**USB device history cleaner** — new trace category in `EvidenceRemover` for USBSTOR registry entries and SetupAPI logs.
37
+
-**Free space wipe** — `SecureDelete.WipeFreeSpaceAsync()` fills unallocated disk space with random data. Auto-detects SSD vs HDD via WMI MediaType.
38
+
-**Recently-installed highlighting** — programs installed in the last 7 days get an accent-colored left border in the Programs DataGrid.
39
+
-**IconExtractor WPF decoupling** — moved from Core to App. `InstalledProgram.Icon` changed to `object?`. Core.csproj no longer has `UseWPF=true`.
40
+
26
41
### Fixed
27
42
-`deeppurgecli doctor` now includes suggested fixes for actionable warning/failure paths, including missing system tools, inaccessible registry/shell roots, and unwritable data folders.
Copy file name to clipboardExpand all lines: ROADMAP.md
-93Lines changed: 0 additions & 93 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,45 +5,8 @@ Blocked items live in `Roadmap_Blocked.md`.
5
5
6
6
## Research-Driven Additions
7
7
8
-
### P0 — Trust, reliability, safety
9
-
10
-
-[ ] P0 — **Leftover signature database**
11
-
Why: Uninstalr 2026 benchmark shows most tools find <65% of leftovers. A curated JSON database of known leftover paths per application is the single highest-ROI accuracy improvement.
12
-
Evidence: Uninstalr benchmark (BCU 61.3%, Revo Pro 63.1%); Revo's commercial "Logs Database" is their key differentiator; BCU issue #913.
13
-
Touches: `Core/Registry/RegistryLeftoverScanner.cs`, `Core/FileSystem/FileLeftoverScanner.cs`, new `Core/Data/LeftoverSignatures.json`
14
-
Acceptance: Leftover scanner consults signature DB before heuristic matching. Ship with signatures for top 50 commonly-installed programs.
Why: Windows 11 SMAA elevation maps HKCU to a system-managed account, not the real user. InstalledProgramScanner reads HKCU and will return wrong results. DataPaths resolves %LocalAppData% to the SMAA profile.
19
-
Evidence: Microsoft developer blog (May 2025); temporarily disabled in retail but will re-enable.
Acceptance: When running elevated with SMAA active, program list and user data paths resolve to the real user, not the SMAA account. Detect via `WindowsIdentity` token comparison.
Why: `IsPathSafeToDelete()` normalizes via `Path.GetFullPath()` but doesn't reject `..` segments before normalization. Junction-point edge cases could bypass protection.
26
-
Evidence: Code review of `Core/Safety/SafetyGuard.cs`; defensive coding best practice.
27
-
Touches: `Core/Safety/SafetyGuard.cs`
28
-
Acceptance: Paths containing `..` are rejected before normalization. Add test cases for junction-point traversal patterns.
29
-
Complexity: S
30
-
31
-
-[ ] P0 — **Backup file validation**
32
-
Why: `BackupManager.BackupRegistryKey()` only checks reg.exe exit code, not that the .reg file is non-empty and parseable. A truncated backup silently passes.
33
-
Evidence: Code review of `Core/Safety/BackupManager.cs`.
34
-
Touches: `Core/Safety/BackupManager.cs`
35
-
Acceptance: After export, verify file exists, size > 0, and first line matches `Windows Registry Editor Version 5.00`. Log warning on validation failure.
36
-
Complexity: S
37
-
38
8
### P1 — High value, competitive differentiation
39
9
40
-
-[ ] P1 — **True disk footprint per program**
41
-
Why: Registry `EstimatedSizeKB` is often wildly inaccurate (Adobe showing 20GB for a 3GB install). Users need real numbers.
42
-
Evidence: Microsoft Q&A; HN discussion on per-program disk usage; BCU doesn't address this either.
Acceptance: New `ActualSizeBytes` property computed by walking InstallLocation + AppData + ProgramData paths. Falls back to EstimatedSizeKB when paths are unavailable. Displayed in GUI as a separate column.
Why: Uninstalled programs leave orphaned services, scheduled tasks, firewall rules, and PATH entries. No OSS tool covers all four systematically.
49
12
Evidence: Community reports of orphaned scheduled tasks ("task image is corrupt"); BCU #890 (shell extension detection gap); forum complaints about orphaned update-checker services.
@@ -65,13 +28,6 @@ Blocked items live in `Roadmap_Blocked.md`.
65
28
Acceptance: All `[DllImport]` declarations replaced by CsWin32-generated equivalents. NativeMethods.txt lists each API. Build clean with no hand-rolled structs.
66
29
Complexity: L
67
30
68
-
-[ ] P1 — **Hash caching for duplicate finder**
69
-
Why: Full-profile duplicate scans are expensive. Czkawka caches file hashes to disk with (path, size, mtime) for invalidation — second scans are near-instant.
Acceptance: Hash cache persisted as JSON in DataPaths. Cache hit when path+size+mtime match. Second scan of same directory completes in <5% of first scan time.
73
-
Complexity: S
74
-
75
31
-[ ] P1 — **Velopack auto-updater**
76
32
Why: Current UpdateChecker only detects updates — user must manually download. Velopack provides delta auto-updates from GitHub Releases with PerMachine install mode.
77
33
Evidence: Velopack 1.2.0 docs; DriverStoreExplorer ships self-update with SHA256 verification.
@@ -102,57 +58,15 @@ Blocked items live in `Roadmap_Blocked.md`.
102
58
Acceptance: Verify tests for MainViewModel state transitions, GridExporter CSV/JSON output, ProgramExporter formats. Snapshot diffs caught in CI.
103
59
Complexity: S
104
60
105
-
-[ ] P2 — **Winget JSON output migration**
106
-
Why: `ParseWingetTable()` relies on fixed-width column detection which breaks silently on format changes. Winget 1.8+ supports `--output json`.
107
-
Evidence: Code review of `Core/Packages/PackageManagerScanner.cs`; winget CLI docs.
108
-
Touches: `Core/Packages/PackageManagerScanner.cs`
109
-
Acceptance: Use `winget list --output json` when available (probe version first). Fall back to table parsing for older winget. Add test with sample JSON output.
110
-
Complexity: S
111
-
112
-
-[ ] P2 — **Configurable uninstall timeout**
113
-
Why: 10-minute hardcoded timeout fails for Visual Studio, Oracle, and enterprise MSIs.
114
-
Evidence: Code review of `Core/Uninstall/UninstallEngine.cs`; enterprise installer behavior.
115
-
Touches: `Core/Uninstall/UninstallEngine.cs`, `Core/Safety/DeleteOptions.cs` or settings
116
-
Acceptance: Default timeout 30 minutes. Configurable per-program via settings or CLI flag (`--timeout`).
117
-
Complexity: S
118
-
119
61
-[ ] P2 — **System Slimming module**
120
62
Why: Wise's unique curated checklist of removable Windows components (wallpapers, sample media, IME packs, help files) with per-item sizes.
121
63
Evidence: Wise Program Uninstaller feature; Sophia-Script implements similar tweaks.
122
64
Touches: New `Core/Cleaning/SystemSlimmer.cs`, `App/ViewModels/MainViewModel.Extensions.cs`, `App/Views/MainWindow.xaml`
123
65
Acceptance: New sidebar panel with checkboxes for ~15 removable Windows components. Each shows current size. Delete through SafetyGuard with dry-run support.
124
66
Complexity: S
125
67
126
-
-[ ] P2 — **Package Cache cleaner**
127
-
Why: `C:\ProgramData\Package Cache\` accumulates GBs of orphaned installer caches for uninstalled products.
128
-
Evidence: BCU issue #877; user complaints about Package Cache consuming disk.
129
-
Touches: `Core/FileSystem/JunkFilesCleaner.cs`
130
-
Acceptance: JunkFilesCleaner scans Package Cache for entries whose parent product is uninstalled (cross-reference with installed programs). Show reclaimable size.
131
-
Complexity: S
132
-
133
-
-[ ] P2 — **Free space wipe**
134
-
Why: PrivaZer's key feature. Single-pass or multi-pass overwrite of unallocated disk space to prevent forensic recovery of deleted files.
Acceptance: New `WipeFreeSpace(string drivePath)` method. Auto-detects SSD (uses TRIM discard) vs HDD (fills free space with random data then deletes). Progress reporting via IProgress.
138
-
Complexity: M
139
-
140
-
-[ ] P2 — **USB device history cleaner**
141
-
Why: USBSTOR registry keys, SetupAPI logs, and device manager traces persist indefinitely. Privacy-conscious users want these cleared.
142
-
Evidence: PrivaZer feature; 100+ trace types in PrivaZer vs ~30 in DeepPurge's EvidenceRemover.
143
-
Touches: `Core/Privacy/EvidenceRemover.cs`
144
-
Acceptance: New trace category for USB history. Cleans HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR, SetupAPI.dev.log, MountedDevices entries. SafetyGuard validated.
145
-
Complexity: S
146
-
147
68
### P3 — Polish, differentiation
148
69
149
-
-[ ] P3 — **Recently-modified program highlighting**
150
-
Why: Geek Uninstaller's visual cue for newly installed/modified programs. Helps users spot new installs.
0 commit comments