DeepSeek Harness Markdown: strikethrough and backslash

TroubleshootingPublished 2026-10-30Author: DeepSeek Plugin Market
DeepSeek HarnessDSHMarkdownstrikethroughescapingWindows pathversion
DeepSeek Harness renders 16~18 as strikethrough and opens Windows path links to a missing file. The two Markdown bugs landed in different versions; check yours.

"16~18 degrees" renders as "16" followed by a struck-through "18", and a Windows path link opens only to say the file does not exist — one symptom is in inline text, the other in a link target, but both are edge handling in the Markdown parsing layer. The key is that they were fixed in different versions: one landed in rc.3, the other waits for 0.2.2-alpha.x (#10894, #11378).

DeepSeek Harness: Step 1: report the version before the symptom

Similar rendering issues produce opposite conclusions on different versions, and confirming the version first saves half the investigation.

  1. Open "About" or read package.json in the install directory and note the full version.
  2. rc.2 and earlier: a single tilde becoming strikethrough was normal behavior for that code.
  3. rc.3: singleTilde: false was added, so a single ~ should stay literal.
  4. rc.3 / rc.4: Windows path links still open the wrong path; that fix is only in master and 0.2.2-alpha.2.
  5. When the version does not match, do not jump to "the fix did not work" — first confirm which class you are seeing.

DSH plugin: Type 1: a single ~ becomes strikethrough

The parser explicitly disables single-tilde strikethrough now, and both entry points pass the same option.

  1. Reproduction text: Today is 16~18 degrees, and I will swim 1~3 laps.
  2. Symptom: 18 after 16 gets strikethrough, and 3 after 1 does too.
  3. Where the fix lives: the Markdown parsing file in ui-primitives defines gfmOptions = { singleTilde: false }.
  4. Both entry points pass it: the plain parse entry and the parse entry with math support.
  5. The comment explains the reason: numeric ranges.
  6. Control: search for singleTilde in the same file on rc.2 and there is not one occurrence — this was added in rc.3.

If you still see strikethrough on rc.3, change direction: check whether a plugin renders message bodies itself, or whether the frontend bundle is still an old cache.

DeepSeek Harness: Type 2: backslash paths treated as escapes

CommonMark interprets \_ as _, and backslashes in Windows paths land exactly on that rule.

  1. The agent writes G:\AI\_dsh_tools\_issue-body.md.
  2. The reply contains a link: [\_issue-body.md](G:\AI\_dsh_tools\_issue-body.md).
  3. After parsing, the target becomes G:\AI_dsh_tools_issue-body.md — the backslash in \_ was eaten.
  4. The client then replaces \ with / and joins the path, producing G:/AI/_dsh_tools_issue-body.md.
  5. The sidebar opens that non-existent path and shows "file does not exist, it may have been moved or deleted".
  6. Control experiment: Test-Path returns True for the original path and False for the rewritten one.

DSH Plugin: Type 3: the card for the same file still opens

Tool result cards use structured paths and never pass through Markdown text, so they are unaffected by escaping.

  1. The card reads meta.path from the tool call, an absolute path that already passed an absolute-path check.
  2. The inline link reads the Markdown text the author wrote and must go through CommonMark escaping.
  3. So the same file shows the split behavior of "card opens, link does not".
  4. That is also the best discriminator: if the card opens the file and the link does not, you are in this class.
  5. Another community report describes the same rule elsewhere: link resolution only runs decodeURIComponent and never restores escaped backslashes.

DeepSeek Harness: Version matrix and today's writing style

The two classes were fixed in different versions, so workarounds and waiting for upgrades have to be scheduled separately.

IssueFix locationrc.3rc.40.2.2-alpha.x
Single ~ becomes strikethroughparser singleTilde: falsefixedfixedfixed
Backslash path eatenc262a09fd0bnot fixednot fixedfixed

Until the fix reaches you, write links like this:

  1. Use forward slashes in paths: G:/AI/_dsh_tools/_issue-body.md.
  2. Or add a file:// prefix so the target is recognized as an address rather than plain text.
  3. Wrapping a path in inline code avoids escaping, but that only guarantees correct display, not clickability.
  4. If a numeric range must be shown, use inline code or escape the single ~ with a backslash (on unpatched versions).
  5. When reporting, attach the source text and version so it is not re-investigated as a "new issue".

DSH plugin: Three-step self-check: do not merge the two classes

Look at the object, the version, and the control — three steps settle it.

  1. Object: is the problem inline text gaining styling, or a link target being rewritten. The first is a parser option, the second an escaping rule.
  2. Version: confirm whether you are on rc.2 / rc.3 / rc.4 / alpha, then check the matrix.
  3. Control: for the same path, can the tool result card open it. If yes, structured paths are fine and the problem is the hand-written link.
  4. Once all three line up, decide whether to wait for an upgrade or change the writing style.

Cautions

Report the version with the symptom; the two fixes ship separately.

  1. Do not treat a rendering issue as a lost file. First check whether the path was rewritten.
  2. Do not expect upgrading to rc.4 to fix both. The backslash fix is not on the rc line.
  3. Do not ignore plugins. A second Markdown instance keeps an "already fixed" issue alive.
  4. Record the source text. The strongest evidence for rendering issues is a character-by-character comparison of input and output.
  5. Prefer structured paths. When a tool result card can open the file, do not rely on a hand-written link.

If your problem is "a ~ inside a code block also gets processed", that is neither class, because code blocks do not use the same parsing path.See DeepSeek Harness blank sessions and missing auto titles for the related case.

FAQ

Is it normal that a range like 16~18 renders as strikethrough in DeepSeek Harness?

It is not normal in DeepSeek Harness, but it depends on the version. rc.3 adds singleTilde: false to the parser so a single ~ stays literal; rc.2 and earlier lack that option, so strikethrough matched the code of that time.

I am already on rc.3 in DeepSeek Harness and still see it — what now?

Another Markdown instance exists in the DeepSeek Harness render chain if rc.3 still shows it, such as a plugin rendering message bodies itself, or a frontend bundle still cached from an older build. Providing the message source text along with the version makes it easier to locate.

Why does a Windows path link in DeepSeek Harness report file does not exist?

The path link breaks because CommonMark treats a backslash as an escape in DeepSeek Harness rendering, so \_ becomes _, turning G:\AI\_dsh_tools\_issue-body.md into G:\AI_dsh_tools_issue-body.md and breaking the path. The client only swaps backslashes for forward slashes, with no existence check.

Which DeepSeek Harness version fixed the backslash problem?

Commit c262a09fd0b (PR #7098) fixed it in the DeepSeek Harness markdown layer and landed in master (0.2.2-alpha.2), but not in rc.4. So rc.3 and rc.4 still open the wrong path.

Before the fix arrives in DeepSeek Harness, how should I write links so they open?

Before the fix arrives in DeepSeek Harness, use forward slashes or add a file:// prefix; both forms open correctly, as the community verified.

Related Terms

singleTilde
singleTilde is an option of the Markdown strikethrough extension controlling whether a single tilde also acts as a delimiter. When false, only paired `~~` produces strikethrough.— https://github.com/deepseek-ai/deepseek-harness/discussions/10894
CommonMark backslash escape
CommonMark specifies that a backslash followed by an escapable character is treated literally, so `\_` becomes `_`. Backslashes in Windows paths are therefore easily mistaken for escapes.— https://github.com/deepseek-ai/deepseek-harness/discussions/11378
fileAddressFor
fileAddressFor is the client function that turns a link target into an openable address; it currently only replaces backslashes and joins relative paths, with no existence check or fallback.— https://github.com/deepseek-ai/deepseek-harness/discussions/11378
error.notFound
The empty-state copy is `error.notFound`: it is shown when the sidebar document preview fails to open, warning that the file does not exist and may have been moved or deleted. It offers no retry or alternative path.— https://github.com/deepseek-ai/deepseek-harness/discussions/11378

Sources