Repository navigation
[0.2.2-rc.1][Windows] First launch after update re-initialized $DSH_HOME — all workspaces, sessions and plugins gone #12290
Replies: 3 comments
|
Confirming one deterministic amplifier of the reported symptom on current What is reproducible (no model, no Desktop needed). Take a shipped profile directory that still has state but lost DSH_HOME=/tmp/dsh-incident
mkdir -p $DSH_HOME/profiles/web/node_modules/some-plugin
printf -- '- id: custom\n config: {}\n' > $DSH_HOME/profiles/web/cordis.patch.yml
# no $DSH_HOME/profiles/web/package.json
pnpm dsh --profile web --dump-configOn unmodified and leaves the directory untouched ( Why this matters for this failure family. Whatever removed the files (#9940, #9753, #9309), a missing manifest alone must not silently erase the rest of the profile's visible state: the current initializer rewrites the manifest, then the desktop path reconciles bundles from the default list, so a recoverable directory becomes a "first run" with no diagnostic. The guard only protects the profile directory; it does not touch Patch — branch: https://github.com/aturzone/deepseek-harness/tree/fix/profile-silent-reset-guard, commit
Checks: Open question for maintainers: would you prefer this fail-loud behavior, or a backup-then-reset ( |
|
Thanks — the 211-byte artifact is exactly what we saw, and the guard is a real improvement. Answering the open question: Preference: fail-loud by default, with an explicit recovery path. Do not write the default manifest when the profile directory still contains state. The error should name the surviving state and offer three actions: restore the manifest from a backup, open the backup folder, or reset deliberately (which then takes a backup first). If the product must remain startable, my second choice is backup-then-reset with a persistent, visible banner ( On this machine the guard would have caught the profile half of the incident (the 211 B manifest), although not the Recovery status here, for the record:
A second guard worth adding: at boot, log |
|
Thanks — that is exactly the artifact reproduction I hoped would settle the mechanism, and your preference resolves the open question: fail-loud by default, no silent default-write. What the patch already gives you:
What it does not give you yet is the explicit recovery action to pair with the diagnostic. Today a deliberate reset is "remove the profile directory", and
I would not make backup-then-reset the default for a missing manifest, because the missing file is itself the evidence that something else went wrong — but it is the right shape for a deliberate reset, which currently has no backup at all. On the wider incident: the guard only covers the profile half. The |
Uh oh!
There was an error while loading. Please reload this page.
[0.2.2-rc.1][Windows] First launch after update re-initialized
$DSH_HOME— all workspaces, sessions and plugins goneTL;DR (中文)
2026-11-05 18:19:55(UTC+8),Windows 桌面端 0.2.2-rc.1 在一次启动中把
%USERPROFILE%\.dsh按“全新安装”重建:storages\workspace.json只剩一个当天新建的default-workspace;profiles\desktop\package.json变成 211 B、dependencies: {}的默认模板;.anonymous-user-id/.credentials.yaml重新生成,被迫重新登录;storages\session_projcache\sessions\*.json。这与 #9940(0.2.1-rc.1)、#7921(0.1.7-rc.1 → rc.2)、#9309(静默以空 profile 重建)属于同一类故障,这次发生在 0.2.2-rc.1。
Environment
ProductNamereports Windows 10 Pro)nightly(install dir created 2026-11-04 22:22:30 local)%APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-2026-11-04T*.log)DSH_HOME=%USERPROFILE%\.dsh,DSH_PROFILE=desktopstorages/layout first appears at 11/05 18:19:55, i.e. the first effective launch of the new build happened then.Timeline (local UTC+8, filesystem timestamps)
...\Programs\DeepSeek Harnesscreated; app version0.2.2-rc.1D:)plugin-operationsentry (quant-labenable)%USERPROFILE%\.dsh\profilesLastWriteTime; no further writes until eveningstorages\andlantern\created; 12session_projcache\sessions\*.jsonfiles created in the same secondprofiles\desktop\{package.json, cordis.yml, pnpm-workspace.yaml}created;package.jsonis 211 B withdependencies: {}.anonymous-user-idcreatedsessions\created;storages\workspace.jsoncontains exactly onedefault-workspace(created 18:20:21).credentials.yamlandcordis.patch.ymlcreated — sign-in required againEvidence
E1. Host data directories were created anew
The profile directory is old (2026-09-30) but its files are new (18:20:16). This is not a whole-home copy; the data units were re-created inside a surviving directory.
E2.
package.jsonwas regenerated as the 211-byte default{ "name": "dsh-profile-desktop", "private": true, "dependencies": {}, "dsh": { "profile": { "bundles": [ "@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app" ] } } }The installed 0.2.2-rc.1 bundle's
initProfile()only writes this manifest whenpackage.jsondoes not exist. So the old manifest (with plugin dependencies) was absent before 18:20:16.E3. Only the default workspace was written
storages\workspace.jsonhas one entry created at2026-11-05T10:20:21Z, path...\Documents\deepseek-harness\default-workspace. No old workspace paths.E4. Sign-in state was re-created
.anonymous-user-id(18:20:18) and.credentials.yaml(18:22:28) are new files, and the UI asked for sign-in again at 18:22. An upgrade should not remove credentials.E5. The old renderer state still proves six workspaces existed
In
%APPDATA%\@deepseek-ai\dsh-desktop\Local Storage\leveldb\000014.ldb(last write 08:33), the persisteddsh.workspace.view.v5value contains 6 distinct workspace IDs ingroupExpansion, and theplugin-manager.install-registrykey is present. The host-side store was reset while renderer state remained.E6. Old sessions survive only in the projection cache
storages\session_projcache\sessions\holds 12 session files (all created 18:19:55) whoseidentity.cwdvalues cover four old project roots onD:. Theirrecord.rowscontain titles and full event rows (one file has 4,471 events), so they are still readable. They are the only surviving conversation data.E7. Project files are intact
The project directories on
D:are untouched; only DSH's workspace registry, profile dependencies, and session index were lost.Expected vs actual
workspace.jsonand the profile dependency list (or at least keep them), or abort the upgrade with a visible error and a backup.dsh-backup-*/ upgrade logs do not exist).Why this looks like the same class as #9940 / #7921 / #9309
All three reports describe the same shape:
$DSH_HOMEroot survives, butstorages,sessions,workspace.json,.credentials.yaml,.anonymous-user-idand the profile manifest are re-created within seconds; the UI then shows an empty profile and the plugin list disappears. In this case it happened on 0.2.2-rc.1, after the 0.2.1-rc.5 → 0.2.2-rc.1 nightly update, without any crash report in%APPDATA%\@deepseek-ai\dsh-desktop\logs.The trigger may be the new
storages/root and workspace schema v2: the oldworkspace.jsonis not migrated, the new bootstrap cannot find the old profile manifest, and it falls back to the first-run seed. I cannot prove which process removed the files because the desktop app writes no boot log.Ask
DSH_HOME, profile path, bundle/dependency count, storage root, and whether the run is a fresh initialization. Todaylogs/contains only crash reports.$DSH_HOMEexists (storages,sessions, or a profile with dependencies). Require an explicit reset, or restore from the last backup.$DSH_HOMEbackup before applying an update and keep the last N snapshots.session_projcache; the data is still there.Notes
<user>, project roots onD:); no credentials or session content are included.All reactions