v0.9.6 - Stable
Pre-release
Pre-release
Markdown table escape for pipes and newlines
Version 0.9.6 - 2026-05-12
Markdown table hardening surfaced by the post-polish audit pass.
Diff::to_markdown() (under the markdown feature) now escapes
the two characters that previously corrupted the surrounding
|-delimited table layout when they appeared inside a check
name: the pipe itself, and line breaks.
Highlights
Diff::to_markdown()escapes|and newlines inside
check-name cells of the Severity changes and Duration
regressions tables. A check nameda|b|cpreviously
corrupted the surrounding|-delimited table layout,
shifting every later column on the row. Newlines inside a
check name had the same effect — the rendered table would
break on the embedded line. Both forms are now safe:|
becomes\|, and\n/\rbecomes<br>. The rendered
cell carries the original text visually intact while the
table structure stays well-formed.
Breaking changes
None. The fix only affects cells that previously rendered
broken markdown. Any check name that did not contain a |,
\n, or \r produces byte-identical output to 0.9.5.
Internals
- New helper
escape_table_cell()in the markdown module
centralizes the two substitutions (|->\|,\n/\r
-><br>). - New test
diff_table_escapes_pipes_in_check_namesexercises
the regression with a check name containing two pipes and
asserts the rendered table parses as a well-formed markdown
table.
Notes
- No new runtime dependencies.
- No schema changes;
schema_versionstays at1. - MSRV unchanged at Rust 1.85.
- Recommended upgrade for anyone rendering diffs through the
markdownfeature whose check names may contain|
characters (common for parameterized test names) or
multi-line context.
Full Changelog: v0.9.5...v0.9.6