Bug: plugin-authored session event types without ignorable make sessions unreadable (SessionFormatUnsupportedError) - dsh-talk/speech #3416
Replies: 1 comment
|
The rc.7 source supports this diagnosis and adds one important boundary: keeping the plugin installed cannot make the event readable. That explains the evidence combination here:
I would keep the proposed repair explicit rather than auto-mark every unknown type. Only the writer/plugin author can truthfully assert that dropping an event cannot change message reconstruction, tool identity, policy, approval, workspace, model route, or interpretation of later events. An For affected users, the data patch is useful forensic confirmation but should not become a generic live-log recipe. Stop all writers, preserve the original, use a version-aware tool on a copy, and validate frame layout, checksums, seq, references, and cold resume before replacement. Until a writer API ships, informational telemetry belongs in a plugin-owned versioned store keyed by Session id. Updated source-pinned guide and cold-resume matrix: https://sandbaseai.github.io/deepseek-harness-handbook/custom-session-events.html Disclosure: independent SandBase community handbook, not official DeepSeek documentation. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Sessions that contain plugin-authored session event types (e.g.
dsh-talk/speechfrom the dsh-talk plugin) fail to load with:…even on the same harness version that wrote the log (
0.1.0-rc.7, Windows, JSONL+zstd backend). Two sessions hit this on 2026-08-19; both are otherwise healthy (seq-contiguous, all other types core-known).Root cause
Session.append(type, data, opts)(core/session/src/index.ts:604) accepts noignorableoption —optsis onlySurfaceIntent(surfaceOp/sourceEventSeqs). The envelope'signorable?: truemarker (types.ts:422) can only enter the log via seed/restore or lower-level persistence writes.service.ts:238session.append('dsh-talk/speech', event)(its own docs state the event is meant to be ignorable so builds without the plugin still read the session).assertEventsSupported(session-persistence/src/coordinator.ts:1061) accepts only types in the staticKNOWN_SESSION_EVENT_TYPESset or events carryingignorable: true— so the log is refused on every later load/prepare, by the same harness that wrote it.Impact
dsh-talk/speechevents total (6 + 2).Suggested fixes
append(type, data, { ..., ignorable?: true })(or a dedicatedappendIgnorable) so plugin authors can fulfil the documented contract.Session.appendcould stampignorable: trueon types outside the core known set (they are log-only by definition from the harness's perspective), which also fixes already-written logs on the next read.Workaround applied
Data patch: added
"ignorable": trueto the 8 storeddsh-talk/speechenvelopes (frames re-encoded, rest byte-identical, full scan + support-check verified). Both sessions now load; the events remain in the log and the installed plugin's client renders them.All reactions