DeepSeek Harness upgrade: "refuses this format v0"
Old sessions that refuse to open with refuses this format v0 after a DeepSeek Harness upgrade are hitting a migration allow-list that was frozen against the writers still present on master, missing shapes older releases actually wrote: the data contains members such as permission/preset.origin from 0.1.1-rc.1 and a flat replayState, the migrator does not recognise them, and valid history is rejected as an illegal format. Back up the whole session directory first, then use a read-only repair tool — never hand-edit the files.
What the DeepSeek Harness refuses this format v0 error looks like
On the surface it is one format refusal, but it is really four different member classes being judged illegal, reported one at a time. A user hit this in the wild (see Discussion #6151):
- After upgrading to 0.1.5, 15 of 35 sessions reported
refuses this format v0 Session; - Only one error appears per attempt, and fixing one reveals the next, which makes it look like the count is growing;
- The four refused shapes are: an extra
originonpermission/preset,subagent/descriptorcarryingversion2 instead of 3, plugin-defined message sourcesinstruction-hint/at-file-mention, and unknown historical events that already carryignorable: true; - An earlier variant of the same family: sessions written by an alpha build then opened with rc.2 (npm
latestat the time) reportedSessionPersistenceCorruptionError(see Discussion #5160).
Why a DSH plugin rejects released historical data as an illegal format
The core contradiction is that the reader freezes its allow-list against current code, while the writer produced more shapes in the past. After checking the 0.1.5-rc.1 source line by line, the community described the mechanism:
RELEASED_V0_EVENT_DISPOSITIONSis frozen only against writers that survive on master, so it misses thepermission/preset.originwritten by 0.1.1-rc.1 and the flatreplayStateused before the envelope wrapper (source: Discussion #5818);subagent/descriptorhard-requiresversion === 3while older data wrote 2; v3 only adds an optionalagentReasoningEffortover v2, so bumping should be lossless;- Plugin-defined message sources belong to a closed
kind/formset, and values written by earlier plugin versions fall outside it; - In the same family there is an encoding mismatch: the writer's
encodeSeqRangescompresses three or more consecutive seqs into[[start,end]], while the rc.2 reader'sassertProvenanceonly accepts flat integers, andSESSION_FORMAT_VERSIONwas never bumped, so the version guard was bypassed silently (source: Discussion #5160).
In short: the session is not corrupt — the reader no longer recognises shapes it once wrote itself.
How to handle refused sessions in DeepSeek Harness, and where the fix stands
The order is back up, inspect read-only, apply, then record what is left. Concretely:
- Back up the entire session directory (
~/.dsh/profiles/<name>/sessions/) first; the tool only touches the first three classes, so the backup is your only rollback; - Run the community tool
dsh-session-surgeonininspectmode to see which refusal class each session hits; - Only then apply repairs; one community report went from 1 of 57 sessions readable to all 57;
- The fourth class (unknown historical events carrying
ignorable: true) needs an upstream allow-list expansion and is outside the tool's coverage — record those and wait for the official fix; - Version clues: readers from 0.1.2-rc.1 onwards ship
decodeSeqRangesand are healthy for ranged-seq sessions, while the root fix is still a writer that bumps the format version; - To check which release line you are on (
latest/alpha/rc), review installed plugins and versions under Settings → Plugin Marketplace; for this project that is DSH Plugin Hub.
DSH plugin troubleshooting notes
Back up first and repair read-only; the two shortcuts below turn a repairable refusal into real corruption. Three points to keep in mind about a DeepSeek Harness plugin session:
- Do not hand-edit session files: the version number, event shapes and seq encoding are interrelated, and one wrong edit turns a repairable refusal into real corruption.
- Do not "open and re-save" with an older build: writes from an old reader can introduce new shape differences and spread the problem to more sessions.
- The wider session story is collected in DeepSeek Harness session corruption: enumeration failures, format refusals and recovery.

Sources: Discussion #6151, Discussion #5818, Discussion #5160
FAQ
In DeepSeek Harness the session migration allow-list is frozen against the writers that still exist on master, so it misses shapes older releases actually wrote. Old sessions contain members such as permission/preset.origin from 0.1.1-rc.1 and a flat replayState, and the migrator does not recognise them, so it rejects valid historical data as an illegal format.
In DeepSeek Harness refusals are evaluated per session and loading stops at the first failure. One community report saw 15 failures across a 35-session directory. Opening each failing session individually and recording the message is how you assemble the full list of refusal classes.
In a DSH plugin session the two belong to the same family but have different mechanisms. The ranged-seq issue is a writer that compresses consecutive seqs while the reader only accepts flat integers, with the format version never bumped. The refusals come from gaps in the migration allow-list itself. Both need the read and write sides aligned upstream.
For DeepSeek Harness session refusals there is a read-only fix: the community tool dsh-session-surgeon covers the first three refusal classes. It inspects sessions read-only first and only then applies repairs, leaving unrelated content untouched. The fourth class needs an upstream allow-list expansion. Back up the whole session directory before using it.
Related Terms
- session format version
- The session format version is the schema generation DeepSeek Harness defines for persisted events; every shape change should bump it so readers know whether migration is required.— DeepSeek Harness official architecture docs
- dispositions (migration allow-list)
- Dispositions are the migrator's built-in allow-list of historical shapes, frozen against what released writers produced; a missing entry makes valid history look illegal.— DeepSeek Harness source (dispositions.ts)
- ranged seq encoding
- Ranged seq encoding compresses consecutive event sequence numbers into [start, end] pairs, and a reader must support the same encoding to restore them correctly.— DeepSeek Harness source (session persistence module)
Sources
- deepseek-harness Discussion #6151: sessions unopenable after upgrading to 0.1.5 (four refusal classes)· deepseek-ai (GitHub Discussions)
- deepseek-harness Discussion #5818: v0 migration list rejects released payload members· deepseek-ai (GitHub Discussions)
- deepseek-harness Discussion #5160: ranged sourceEventSeqs trigger SessionPersistenceCorruptionError on rc.2· deepseek-ai (GitHub Discussions)