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
Downgrading from 0.1.6-alpha.1 to 0.1.5-rc.2 leaves the Web sidebar completely blank — no workspace rows, no session rows — while the workspace chip above the composer still shows a label. Session files, workspace.json and session_projcache are all intact, the Host prints nothing, no request fails, and a hard reload does not help. The only evidence is a browser-console exception.
Environment
DSH 0.1.5-rc.2, downgraded from 0.1.6-alpha.1 in the same browser profile (same origin)
dsh web --port 13080 (the default 3080 sits inside a Windows reserved port range on this machine)
Windows, Node v24.17.0, Chromium-based browser
Steps to reproduce
Run dsh web on 0.1.6-alpha.1, open the GUI and let it mount (this writes the persisted view store into localStorage).
Downgrade to 0.1.5-rc.2, restart dsh web, reload the page (a hard reload is not enough).
Look at the sidebar and at the browser console.
Actual
The sidebar renders nothing. Console:
client.js:526 slot entry crashed in 'sidebar.workspaces': TypeError: Cannot convert undefined or null to object
at Object.entries (<anonymous>)
at retainAccountKeys (client.js:218:1)
...
at client.js:2017:1
Expected
The sidebar lists the workspaces and their sessions.
Root cause
packages/client/ui-workspace/src/client/stores.ts defines a persisted store under the key dsh.workspace.view.v5, and the two release lines disagree about its state shape while keeping the same key.
dsh-v0.1.6-alpha.1 — the field does not exist, and retainAccountKeys removes it:
A browser that has run the alpha therefore persists a dsh.workspace.view.v5 value without sessionUpdatedAtByAccount. On rc.2 the rehydrated draft has that key undefined, so the first retainAccountKeys call throws; the exception reaches the sidebar.workspaces slot's error boundary, which replaces the whole left pane with nothing.
Two aggravating factors:
A hard reload does not help, because the value lives in localStorage (per origin). Together with (2) this makes the failure look like permanent loss of all session history.
Nothing surfaces it: no Host log line, no failed request, no UI message.
Removing only this key restores the sidebar immediately. The auth cookie and every server-side artifact are untouched.
Suggested fixes
Guard the reads: Object.entries(d.sessionUpdatedAtByAccount ?? {}) (the other two lines in retainAccountKeys have the same shape).
Give incompatible shapes their own persist key, or add version + migrate handling so a client can normalise a value written by another release line. Note the alpha already deletes the field, i.e. the shape change is deliberate — only the key was not separated.
Surface a slot failure in the UI instead of rendering an empty pane.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Summary
Downgrading from
0.1.6-alpha.1to0.1.5-rc.2leaves the Web sidebar completely blank — no workspace rows, no session rows — while the workspace chip above the composer still shows a label. Session files,workspace.jsonandsession_projcacheare all intact, the Host prints nothing, no request fails, and a hard reload does not help. The only evidence is a browser-console exception.Environment
0.1.5-rc.2, downgraded from0.1.6-alpha.1in the same browser profile (same origin)dsh web --port 13080(the default 3080 sits inside a Windows reserved port range on this machine)v24.17.0, Chromium-based browserSteps to reproduce
dsh webon0.1.6-alpha.1, open the GUI and let it mount (this writes the persisted view store intolocalStorage).0.1.5-rc.2, restartdsh web, reload the page (a hard reload is not enough).Actual
The sidebar renders nothing. Console:
Expected
The sidebar lists the workspaces and their sessions.
Root cause
packages/client/ui-workspace/src/client/stores.tsdefines a persisted store under the keydsh.workspace.view.v5, and the two release lines disagree about its state shape while keeping the same key.dsh-v0.1.6-alpha.1— the field does not exist, andretainAccountKeysremoves it:dsh-v0.1.5-rc.2— the field is required and read unguarded:Sources: alpha.1 · rc.2
A browser that has run the alpha therefore persists a
dsh.workspace.view.v5value withoutsessionUpdatedAtByAccount. On rc.2 the rehydrated draft has that keyundefined, so the firstretainAccountKeyscall throws; the exception reaches thesidebar.workspacesslot's error boundary, which replaces the whole left pane with nothing.Two aggravating factors:
localStorage(per origin). Together with (2) this makes the failure look like permanent loss of all session history.Workaround (verified)
Removing only this key restores the sidebar immediately. The auth cookie and every server-side artifact are untouched.
Suggested fixes
Object.entries(d.sessionUpdatedAtByAccount ?? {})(the other two lines inretainAccountKeyshave the same shape).version+migratehandling so a client can normalise a value written by another release line. Note the alpha already deletes the field, i.e. the shape change is deliberate — only the key was not separated.Related
All reactions