fix(discovery): drop uninstall entries and dead-path ghosts from the AppsFolder scan#73
Conversation
…AppsFolder scan
Uninstalled apps could linger in the menu indefinitely: "Uninstall
wxNotepad++" and "wxNotepad++" survived their uninstall, and launching
the former opened the Documents folder.
Three holes, one per mechanism:
- MergeUwp had no uninstall filter: shell:AppsFolder lists
AUMID-registered Win32 uninstallers too ("Uninstall wxNotepad++",
"Uninstall Node.js", VirtualBox's bare "Uninstall"), and only the
.lnk scanner (FromShortcut) filtered them. Mirror the same
case-insensitive name check.
- The shell's app-resolver cache keeps listing uninstalled Win32 apps
for a while, reporting a raw exe path as the "AUMID". A rescan in
that window (exactly what the .lnk-deletion watcher triggers mid
uninstall) ingested the ghost and persisted it into the discovery
cache, where it survived indefinitely - the ghost's later
disappearance from AppsFolder changes no file, so the fingerprint
never flips and nothing re-scans it away. Launching one routed
explorer.exe to an invalid shell:AppsFolder item, which falls back to
opening Documents. Skip AppsFolder entries whose AUMID is a
drive-rooted path that no longer exists; real AUMIDs (Package!App,
Microsoft.AutoGenerated.{...}, {KNOWNFOLDERID}\...) skip the check.
- FromShortcut's uninstall filter sat after the info-null early return,
so a shortcut whose ShellLink read failed bypassed the filter and
surfaced as a launchable "Uninstall ..." tile. The name checks now
run first.
Self-healing: the every-launch confirming backstop rescan produces a
ghost-free list, SameApps flags the difference, and the corrected list
is applied and re-persisted - no cache purge or schema bump needed.
Release-As: 0.9.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A localized label that wraps to two lines ("Ostatnie pliki w menu
kontekstowym" in Polish) makes its grid row taller, and the
default-Stretch NumericUpDown then fills that height with its text
stuck at the top. VerticalAlignment=Center on all three spinners keeps
them at natural height in any locale.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 13 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…ullet (#76) PR #73 carried "Release-As: 0.9.0" inside the first bulleted sub-message of its two-commit squash body and release-please ignored it, computing 0.8.16 instead. Document the pitfall and the reliable vehicle (a single-commit micro-PR whose own message carries the footer) - which is exactly what this commit is: it pins the next release. Supersedes #75 (CodeRabbit's MD018 fix folded in; amending that PR would have required a force-push, and adding a second commit would have buried this footer in a squash bullet - the very bug documented). Release-As: 0.9.0 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What
Two fixes batched for the 0.9.0 release (the first commit carries
Release-As: 0.9.0):1.
fix(discovery)— uninstalled apps lingered in the menu (reported live)"Uninstall wxNotepad++" + "wxNotepad++" survived their uninstall; launching the former opened the Documents folder. Live forensics on the affected machine found the same ghost class for Node.js and VirtualBox uninstall entries. Three holes closed:
MergeUwphad no uninstall filter (only the.lnkscanner did) —shell:AppsFolderlists Win32 uninstallers too.explorer.exeto an invalidshell:AppsFolderitem → Documents opens. Dead drive-rooted-path AUMIDs are now skipped; real AUMIDs are untouched.FromShortcut's filter ran after theinfo is nullearly-return, letting broken shortcuts bypass it.Self-healing: the every-launch backstop rescan now produces a ghost-free list and re-persists it — no cache purge needed.
2.
fix(settings)— "8" not vertically centeredA wrapping localized label makes its row two lines tall; the default-Stretch
NumericUpDownfills it with text stuck at the top.VerticalAlignment=Centeron all three spinners (locale-proof).Verification
Release build 0 warnings / 0 errors. Cache inspection confirms the four ghost specimens currently persisted will drop on the first post-update rescan.
🤖 Generated with Claude Code