[Bug] Sessions from older releases can't be resumed or opened after upgrading (unknown preset standard-tools; v0 subagent descriptor v2 refused)
#8320
MovieMaker93
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi, and thanks for dsh. After upgrading a long-lived install from 0.1.5-rc.1 to 0.1.7-rc.2, many older Sessions can no longer be continued, and some subagent transcripts can't be opened at all. I traced both to their cause and checked that
master(639ed01, 0.2.0-rc.2) still behaves the same. I know external pull requests aren't accepted; fixes with tests are on a fork in case they're useful.Environment: Linux, npm install of
@deepseek-ai/dsh,dsh webas a systemd service, 197 stored Sessions written by several releases since August.1. A Session whose recorded preset no longer exists can't be resumed
100 of 129 top-level Sessions were created with a directory preset from
~/.dsh/.agent-presets/standard-tools. 0.1.7 no longer reads that directory, so continuing any of them fails:session/createwith the existingsessionIdandcwdreachescreateOrAdopt→composeAgent(storedPreset)→agentPresets.resolve("standard-tools"), which throws. Switching the Session to another preset isn't possible either, becauseselectrefuses once the Session has started (agent-preset/locked). Reading the transcript still works. The 0.1.7-rc.2 upgrade guide doesn't mention that directory presets stopped loading.Reproduce: create a Session under preset
Xand send one message; remove theXdefinition; restart; callsession/createwith thatsessionIdand itscwd.Proposed change (one commit on a fork, diff against master): an explicit
aliasesmap onagent-preset-registry, so a deployment can say which declared preset a retired ID resolves to:resolve,mount/retainandreadfollow the alias; the roster lists only declared presets.registry.spec.ts(fail on master, pass with the change); 100% coverage ofsrc/index.ts. README (en/zh) and its translation record updated.Until then, the workaround is to declare a
preset-standard-toolsrow whose plugin list copiespreset-standard. With that row, the same Session resumes (verified on a throwaway 0.1.7-rc.2 instance).2. Format v0 subagent transcripts with descriptor v2 are refused
19 subagent child Sessions fail to open on 0.1.5, 0.1.7-rc.2 and current
master; 0.2.0-rc.2 ships the same checks:Releases 0.0.1-rc.1 (2026-08-10) through 0.1.1-rc.2 (2026-08-21) wrote
subagent/descriptorv2 into format v0; v3 arrived on 2026-08-24 (#2663) and only added the optionalagentReasoningEffort. Two checks refuse v2:assertReleasedEventPayloadinsession-format-v0-to-v1throws for any non-3 descriptor in payload generation 0;subagentDescriptorValueinpayload-validation.ts, which the v2→v3 edge also uses, accepts onlyversion: 3.The V3→V4 catalog facts already accept descriptor v1–v3, and
docs/session-format-status.mdstates that alpha, beta and RC releases establish released Session-format obligations.Proposed change (one commit on a fork, diff against master): accept descriptor v2 in the shared payload validation, reject
agentReasoningEfforton v2, and keep refusing descriptor versions no release wrote into format v0. Committed generations stay unchanged.session-format-v0-to-v1/tests/validation.spec.tsand one end-to-end test insession-persistence-jsonl/tests/catalog-migration.spec.ts(a V0 child with descriptor v2 opens through read and write access,noneandzstd). All fail on master and pass with the change; 100% coverage of the two changed files; the session-format, catalog and JSONL suites pass (1934 tests).masterfails to open 19; with the change all 197 open for read and for write.Both changed packages type-check, as do the host packages that depend on the preset registry; I didn't run the full-repository build, which needs more memory than my server has. Happy to adjust either change or split it differently if that helps.
All reactions