Repository navigation
Description
Describe the bug
On Windows, after plugin updates, the sidebar file tree context menu 'Open with -> File Manager (资源管理器)' silently does nothing — Explorer never comes to the front (it opens behind the DSH window or not at all), while 'Open with -> VS Code' works fine.
The root cause is deeper than the plugin code: the plugin generation migration freeze leaves profiles\web\node_modules\<plugin> junctions pointing at stale generations, so the dsh web /plugins/ route keeps serving old (unpatched) client code — even though the 'active' generation on disk is correct.
Environment
- DSH Desktop 0.8.x (Windows 10/11)
- dsh-better-sidebar 0.18.0
- harness profile:
web
Root cause (evidence)
-
Migration frozen —
profiles\web\.generations-deferred.json:{ "protocol": 6, "fingerprint": "c4d5c7fad5faf3ae895d42fa6dbda28af5ea002505fb25781fb1ea654df11ac9", "reason": "dsh-builtin-browser failed peer validation: electron resolves outside the generation and installation closure: electron", "failedAt": "2026-09-11T07:13:02.965Z", "retryAfter": "2026-09-11T13:13:02.965Z" }harness.log:
profile maintenance frozen: migration deferred (previously failed preflight for this exact fingerprint) -
Stale junction —
profiles\web\node_modules\dsh-better-sidebaris a junction that still points to an old generation (...\dsh-better-sidebar+0.18.0+7d0ce9355c39\..., ~5 days old) instead of the active one (...\dsh-better-sidebar+0.18.0+40ef654e32d0\...), even after a full DSH Desktop restart and afterretryAfterpassed. -
dsh web serves plugin client bundles from that junction (
/plugins/??dsh-better-sidebar/client.js&rev=..., responsecache-control: public, max-age=31536000, immutable). The renderer therefore keeps loading the stale client code: the 'reveal' branch never calls the desktop bridge, falls back to spawningexplorer.exefrom the harness (which cannot foreground a window because the harness runswindowsHide+detached), so Explorer opens behind DSH — the user sees 'nothing happened'. VS Code keeps working because the URL branch goes through a different route (cmd /c start), and the oldrundll32happened to work forvscode://. -
Manual workaround that fixed it: re-point the junction at the patched generation (
cmd /c rmdir <link>+New-Item -ItemType Junction) then fully restart DSH Desktop.revis regenerated per harness start, which also bypasses the immutable HTTP cache.
Expected behavior
- When generation migration fails, the harness must not silently keep loading stale generation code:
profiles\web\node_modules\<plugin>junctions should stay on the newest installed generation, or migration should keep retrying once the peer-validation blocker is resolved.- A user-visible warning in the Desktop UI would have saved hours of debugging — currently there is zero on-screen indication that plugins are running from old code.
dsh-builtin-browser's peer validation (electron resolves outside the generation and installation closure: electron) looks like a false positive (that plugin deliberately bundles/spawns its own Electron) and should not freeze migration for the whole profile.
Suggested fix
- Re-evaluate
dsh-builtin-browserpeer validation (electron is intentionally resolved outside its generation). - On deferred migration, either update junctions to the active generation anyway, or surface an explicit error/warning in the UI instead of silently serving stale plugin client bundles.
Activity
yaojin3616 commentedon Sep 23, 2026
main 已加入不完整 generation 清理与投影恢复(commit d34eacc),用于清除指向旧 generation 的残留链接并恢复当前投影。该修复已进入后续正式版本,因此关闭;若 v0.9.2 仍复现,请附
profiles/web/node_modules实际链接目标与启动日志重新打开。