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
Copy file name to clipboardExpand all lines: ROADMAP.md
+59Lines changed: 59 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -64,3 +64,62 @@ Explicit "no" list, so anyone proposing these doesn't waste effort:
64
64
-**Cloud sync of settings** — privacy surface without clear value
65
65
-**MSIX distribution** — sandboxes DeepPurge out of the HKLM autorun edits it
66
66
needs to function; actively harmful for this app
67
+
68
+
## Open-Source Research (Round 2)
69
+
70
+
### Related OSS Projects
71
+
-**Klocman/Bulk-Crap-Uninstaller** — https://github.com/Klocman/Bulk-Crap-Uninstaller — Reference implementation for bulk uninstall + leftover scanner with Very-Good/Good/Questionable confidence ratings. Apache 2.0.
72
+
-**bleachbit/bleachbit** — https://github.com/bleachbit/bleachbit — GPL-v3 system cleaner; open cleaner-definition format (`.xml`) that third parties extend.
73
+
-**BleachBit-Software winapp2** — https://github.com/MoscaDotTo/Winapp2 — Community-maintained database of 1400+ CCleaner-format cleaning rules, consumable by BleachBit.
74
+
-**adileo/squirreldisk** — https://github.com/adileo/squirreldisk — Rust cross-platform disk analyzer; visual tree-map UI reference.
- Three-tier leftover confidence rating ("Very Good / Good / Questionable") surfaced inline in the scan UI — borrow from `Bulk-Crap-Uninstaller`.
82
+
- Winapp2.ini ingestion so DeepPurge inherits 1400+ community-curated cleaning rules on day one — borrow from `Winapp2` format (BleachBit also consumes it).
83
+
- Open XML cleaner-definition format so power users can ship their own definitions — borrow from `bleachbit/cleanerml`.
84
+
- Certificate-verify pass on installer executables before running them (flag tampering) — borrow from `Bulk-Crap-Uninstaller` verify-certificates feature.
85
+
- Portable-app detection (apps never registered in the uninstall registry) — borrow from `Bulk-Crap-Uninstaller`.
86
+
- Command-line mode with export-program-list and silent uninstall selectors for Intune/SCCM deployment — borrow from `Bulk-Crap-Uninstaller` CLI.
87
+
- Broken context-menu-entry cleaner as a dedicated tab — borrow from `Bulk-Crap-Uninstaller`'s post-uninstall pass.
88
+
- Duplicate/empty-folder/broken-symlink sweep alongside other Cleanup tasks — borrow from `czkawka`.
89
+
90
+
### Patterns & Architectures Worth Studying
91
+
-`Bulk-Crap-Uninstaller`'s uninstall-system adapters (NSIS, InnoSetup, MSI, Squirrel, Chocolatey, Scoop, winget, Steam, UWP) as a plugin family — replicate instead of hardcoding silent flags.
92
+
-`BleachBit`'s declarative cleaner XML + preview/dry-run separation from the executor — already partly in DeepPurge; the XML format makes it extensible.
93
+
-`Winapp2` repo model: data-only community repo (no code) auto-consumed by the app — low-maintenance way to keep cleaning rules fresh.
94
+
-`czkawka` pipelining: cache-by-size → cache-by-hash-prefix → full hash, mirroring DeepPurge's progressive pipeline (same pattern family as DuplicateFF in this repo family).
95
+
96
+
## Implementation Deep Dive (Round 3)
97
+
98
+
### Reference Implementations to Study
99
+
-**bleachbit/winapp2.ini** — https://github.com/bleachbit/winapp2.ini — canonical BleachBit-compatible winapp2 fork; parse `SpecialDetect=DET_CHROME` etc. for app applicability (the planned v0.10 item)
100
+
-**MoscaDotTo/Winapp2** — https://github.com/moscadotto/winapp2 — upstream community-maintained set; broader than BleachBit's fork, use as secondary sync source
101
+
-**BleachBit docs winapp2ini.html** — https://docs.bleachbit.org/doc/winapp2ini.html — environment-variable expansion (`%LocalAppData%`, `%CommonAppData%`), `RECURSE` and `REMOVESELF` semantics; required to parse entries correctly
102
+
-**Microsoft.Diagnostics.Tracing.TraceEvent** — https://github.com/microsoft/perfview/tree/main/src/TraceEvent — the C# TraceEvent NuGet reference; use for `Microsoft-Windows-Kernel-File` + `Microsoft-Windows-Kernel-Registry` providers
103
+
-**Sysinternals Procmon/Procmon24 ETW manifest** — https://learn.microsoft.com/en-us/sysinternals/downloads/procmon — Process Monitor's filtering and column semantics are the UX reference for the "Track This Installer" flow
104
+
-**dotnet/runtime FileSystemWatcher + USN journal** — https://github.com/dotnet/runtime/issues/24079 — discussion + links for why `FileSystemWatcher` misses events; USN `FSCTL_QUERY_USN_JOURNAL` is the only reliable path
105
+
-**chentsulin/electron-react-boilerplate AutoUpdater refs** — not applicable; instead see **velopack/velopack** — https://github.com/velopack/velopack — for signed MSIX/winget release wiring; copy the CI `Sign.ps1` pattern
106
+
107
+
### Known Pitfalls from Similar Projects
108
+
-**FileSystemWatcher drops events under load** — https://github.com/dotnet/runtime/issues/24079 — buffer overruns silently produce `InternalBufferOverflowException`; never rely on it for install tracing, use USN journal
109
+
-**USN journal wrap-around** — https://learn.microsoft.com/en-us/windows/win32/fileio/walking-a-buffer-of-change-journal-records — default journal is tiny and can wrap mid-install; grow to ≥64MB via `FSCTL_CREATE_USN_JOURNAL` before tracing
110
+
-**Registry ETW requires admin + SeSystemProfilePrivilege** — https://learn.microsoft.com/en-us/windows/win32/etw/configuring-and-starting-a-nt-kernel-logger-session — the tracing session won't start under a standard user; surface a UAC prompt, don't silently fall back
111
+
-**winapp2 entries can delete user data if parsed wrong** — https://wp.bleachbit.org/forums/reply/winapp2-ini-2/ — `RECURSE` on a wrongly expanded variable can nuke profile dirs; always sandbox-test entries on a junction before shipping
112
+
-**Driver store parsing regressions** — Windows 11 24H2 changed `pnputil /enum-drivers` output; the `DriverStoreScanner.ParseText` tests listed in v0.9.x must lock both 23H2 and 24H2 fixtures
113
+
-**MSIX + PSGallery dual packaging** — https://learn.microsoft.com/en-us/windows/msix/overview — MSIX runs in a container; ETW collection and USN reads are blocked from inside MSIX; ship MSIX for the UI and a separate admin-elevated CLI for tracing
114
+
-**VirusTotal false positives on installer monitors** — ETW + USN tools get flagged as rootkits; submit to Defender + common AVs with "Microsoft Partner Portal" submission before GA
115
+
116
+
### Library Integration Checklist
117
+
-**.NET 9** WPF — target `net9.0-windows`, `UseWPF=true`; build with `PublishReadyToRun=true` for cold-start; framework-dependent per stack-csharp.md guidance
118
+
-**Microsoft.Diagnostics.Tracing.TraceEvent 3.2+** (NuGet) — API entry `TraceEventSession("DeepPurgeInstallMonitor")` with `EnableKernelProvider(KernelTraceEventParser.Keywords.FileIOInit | Registry)`; gotcha: must run as admin, and `Stop()` + `Dispose()` or the session leaks across reboots in the registry
119
+
-**PInvoke on `DeviceIoControl` + `FSCTL_QUERY_USN_JOURNAL`** — no good official wrapper; use `Windows.Win32` CsWin32 generator (https://github.com/microsoft/CsWin32); gotcha: struct alignment differs between 32/64-bit, force x64-only
120
+
-**winapp2.ini parser** — no good .NET lib; hand-written INI parser (the file is non-standard — allows duplicate keys); gotcha: environment variable expansion must happen per-user, don't cache across profiles
121
+
-**ManagedBass or NAudio** not needed; pure .NET/WPF
122
+
-**Microsoft.Wim.dll** (via WIM API) — for snapshotting Program Files for v0.10 diff flow; alternative: VSS (Volume Shadow Copy) via `AlphaVSS` NuGet; gotcha: VSS requires `SeBackupPrivilege` — elevate explicitly
123
+
-**Authenticode signing** — `signtool.exe` from Windows SDK 10.0.26100+; pass `/fd SHA256 /td SHA256 /tr http://timestamp.digicert.com`; gotcha: EV certs for MSIX are on Azure Code Signing now (free for OSS via the Microsoft program)
124
+
-**winget manifest schema 1.6** — https://github.com/microsoft/winget-pkgs/tree/master/doc/manifest/schema/1.6.0 — CI-validate with `winget validate --manifest`; `AppsAndFeaturesEntries` must match the installed registry for upgrade detection
0 commit comments