Skip to content

Releases: viell-dev/slop-markdown-tools

mdrefine 0.7.1

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:15
Immutable release. Only release title and notes can be modified.
a66e259

0.7.1 formats tables in two additional Obsidian layouts while preserving the native rendering protections. What's new in 0.7 describes the fix. No upgrading steps are needed.

Fixed

  • Format Obsidian tables directly below a callout's title or starting a nested list item below parent text. Tables continuing paragraph text or using Tab container prefixes keep their rendering protections (#759).

Maintenance

  • Retry transient GitHub server errors during release CI evidence lookup (#880).

mdrefine 0.7.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 23:37
Immutable release. Only release title and notes can be modified.
659c305

What's new in 0.7 describes the configuration-conversion changes with examples. Read the upgrading steps before updating a workspace that relies on converted settings.

Changed

  • Preserve supported EditorConfig intersection branches independently (#840).
  • Convert legacy .markdownlintignore exclusions alongside standalone markdownlint settings (#803).

Fixed

  • Honor the first ignore pattern after a UTF-8 byte-order mark (#877).

Maintenance

  • Retain lazy-HTML scaling windows in failed assertions for Windows triage (#826).
  • Balance edit-scaling workloads and extend their timing windows under contention (#795).

mdrefine 0.6.5

Choose a tag to compare

@github-actions github-actions released this 03 Nov 16:01
Immutable release. Only release title and notes can be modified.
6f66945

0.6.5 speeds up deeply nested lists and corrects VitePress paragraph wrapping with syntax plugins. What's new in 0.6 describes both fixes. No upgrading steps are needed.

Fixed

  • Avoid repeated blank-line scans and descendant event rebuilding in deeply nested builtin lists, preserving list positions and looseness; syntax plugins retain their original container routines (#859).
  • Wrap VitePress body paragraphs beginning with --- when syntax plugins are enabled, while retaining actual plugin block boundaries (#869).

Maintenance

  • Refresh the MathJax speech engine and remove its obsolete xmldom override (#481).
  • Refresh eligible indirect dependencies used by syntax extensions, documentation and verification tools.

mdrefine 0.6.4

Choose a tag to compare

@github-actions github-actions released this 02 Nov 01:36
Immutable release. Only release title and notes can be modified.
0cd13a2

0.6.4 corrects heading checks during markdownlint fallback, avoids refused formatting around VitePress and plugin syntax, and speeds up long lazy list paragraphs. What's new in 0.6 summarizes the fixes. No upgrading steps are needed.

Fixed

  • Avoid repeated event searches in long lazy list paragraphs, preserving syntax plugin observations and falling back when a cached token changes (#796).
  • Keep paragraphs whose wrapped lines would open a syntax plugin's block, avoiding refused edits while retaining safe wrapping nearby (#777).
  • Wrap VitePress body entities without false unsafe-edit refusals, preserving heading anchors and context-sensitive entity distinctions (#863).
  • Avoid refused wrapping of VitePress code spans that retain continuation indentation, while keeping ordinary multiline code joinable (#782).
  • Avoid refused spacing proposals before table text grouped with a VitePress component, retaining safe table formatting nearby (#800).
  • Bound nested directive work during markdownlint's initial-heading HTML-flow inspection, reporting an incomplete check without changing the document (#858).
  • Report markdownlint heading-spacing requirements above attached comments and inside list items, preserving their formatting (#849, #850).
  • Match markdownlint's initial-heading fallback for HTML headings and raw HTML flow, empty input and permitted preambles (#848, #853, #854, #860).

Maintenance

  • Verify parser module-comment provenance in both directions (#851).

mdrefine 0.6.3

Choose a tag to compare

@github-actions github-actions released this 01 Nov 11:37
Immutable release. Only release title and notes can be modified.
495b95a

0.6.3 corrects configuration fallback, ignore matching, heading checks around HTML comments and footnote lists. What's new in 0.6 summarizes the fixes. No upgrading steps are needed.

Fixed

  • Avoid false initial-heading and heading-spacing findings around HTML comments during markdownlint fallback (#801).

  • Keep lists on their footnote label's line stable with startIndented: true (#802).

  • Match Git's whole-component asterisk runs, including re-inclusion after a trailing run (#843).

  • Name the last matching Git ignore rule when explaining a skipped input (#844).

  • Retain Prettier settings when its bundled ignore matcher leaves root Markdown files unignored (#845).

  • Apply fallback ignores, file selections and overrides relative to an explicit --root workspace, so excluded files stay excluded and scoped settings apply (#791).

  • Stop discovering .prettierrc.jsonc during fallback and configuration conversion, matching Prettier's configuration search (#793).

Maintenance

  • Refresh the Obsidian verification image to the Node.js 24.22.1 security release, retaining the pinned app and installer.

  • Update the parser bundler and check its module-start comments against the reviewed module graph.

  • Update the task runner and typed lint tooling, and refresh the pnpm installation check.

mdrefine 0.6.2

Choose a tag to compare

@github-actions github-actions released this 01 Nov 03:29
Immutable release. Only release title and notes can be modified.
c60276e

Security

  • Update the shipped glob matcher for the minimatch pattern-amplification advisory, preserving configuration conversion with its new matcher API (#837).

Fixed

  • Remove the incorrect claim that the repository slug is mdrefine's original project name (#832).

Maintenance

  • Refresh eight age-eligible indirect dependencies, including the Markdown tree traversal utilities.

  • Consolidate contributor and release procedures and remove redundant state and history from agent guidance (#836).

mdrefine 0.6.1

Choose a tag to compare

@github-actions github-actions released this 30 Oct 21:38
Immutable release. Only release title and notes can be modified.
756af07

The documentation is reorganized for people new to mdrefine: rules have pages of their own, upgrading steps and release notes have theirs, and the site has a glossary. What's new in 0.6 summarizes 0.6.1. No upgrading steps are needed.

Changed

  • mdrefine help with an unknown command ends with mdrefine: unknown command 'NAME', config with options but no command names its commands, lint with stdin and a path no longer mentions --write, which it does not take, and the conversion messages name markdownlint, Prettier, and # and underlined headings instead of competitors, ATX, and Setext (#830).

  • A glossary defines the terms the pages use, and pages link it. Rule pages and the style/heading message say "# heading" and "underlined heading" instead of ATX and Setext. The pages name markdownlint and Prettier instead of calling them competitors, so the fallback's sections are now "Fallback to markdownlint and Prettier" and "Fallback notices", and so does the notice about their inline comments. The README and the home page say that the package is mdrefine and the repository keeps the original name (#817).

  • The site has release notes, starting with What's new in 0.6, in a menu named after the documented version in the top bar. This changelog's 0.6.0 entry is shorter, with internal work under "Maintenance", and the 0.6.0 and 0.5.0 entries point to their upgrading steps (#813).

  • The site's top bar has Guide and Reference menus and an Examples link, which the home page's second button also opens, and the sidebar's last group is named About. Issues about the documentation have their own form (#818).

  • The Obsidian, dialect, integration, VitePress, benchmark, and command line pages describe what users need, and the details for maintainers, such as the list of every Obsidian protection and the parser work behind the benchmark limits, move to maintainer notes in the repository. The command line page gathers its file access and write safety details at its end (#812).

  • Reference pages are easier to scan: the command line page explains the workspace root once and marks the options that only format takes, the configuration page numbers the search for a configuration file and patches one rule of recommended in its ruleUpdates example, the integration guide lists which .prettierignore entries leave Markdown to mdrefine, the library page has a table of the conversion exports, and the VitePress page explains srcDir with the usual layout (#816).

  • Getting started covers running mdrefine without installing it, a global installation, pnpm, Yarn, and Bun, and what npm install does in a folder without package.json. The Obsidian page says how to install for a vault, the integration guide has hooks for the pre-commit framework and lefthook, and the configuration page warns that outside a repository the search for a configuration reaches parent folders such as the home directory (#815).

  • The documentation has an Upgrading page with the steps for each release that needs them: the markdownlint and Prettier fallback and the exit code of bare format in 0.6.0, and the mdtools names removed in 0.5.0. Getting started, the command line, configuration, and library pages no longer carry migration notes, and the JSON report's example shows the current version (#810).

  • The rules reference has one page per rule, at rules/<category>/<name>.html. Each page opens with what the rule does, its facts, an example, and its options; edge cases, dialect notes, and related rules follow under their own headings. The index lists the rules by category in plain words, and a link to a rule's section of the former single page, such as rules.html#stylewrap, continues to the rule's page (#811).

  • The built-in rules' descriptions, which mdrefine rules prints, are the sentences of the rules index, in plain words. mdrefine rules lists the rules sorted by ID, plugin rules among them, also with --json. Without a command, mdrefine follows its help with mdrefine: no command given; try mdrefine lint, and mdrefine config alone names its commands. format --help describes --write as writing the formatting changes to the files (#819).

  • Getting started picks presets from a table of renderers, shows what lint prints, and compares the forms of lint and format in a table. The configuration page lists what recommended does, and the README and the home page show only lint and format --write. The examples' commands use the installed npx mdrefine, after copying the examples from the package, and the examples' README lists vitepress.jsonc (#814).

Fixed

  • Piping output into a program that stops reading early, such as mdrefine lint --json | head, no longer ends with an EPIPE stack trace and exit code 1: the rest of the output is dropped, and the run keeps its own exit code (#820).

mdrefine 0.6.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 03:30
Immutable release. Only release title and notes can be modified.
2287609

Changed

  • A workspace with a markdownlint or Prettier configuration and no mdrefine configuration now gets the settings converted from them instead of the recommended preset, so lint and format can report other rules, at other severities, ignore other files, and exit differently than in 0.5.0. Upgrading: to keep the recommended preset, create an mdrefine configuration, for example with "extends": ["recommended"], or pass --no-competitor-config; to adopt the converted settings, write them with mdrefine config convert --write. Files that the fallback cannot use apply nothing, and without a usable one the recommended preset applies as before: JavaScript and TypeScript configurations, which it never runs, TOML and JSON5 ones, and a Prettier configuration whose .prettierignore provably excludes all Markdown, so that the coexistence setup in the integration guide keeps checking documents; one with a negated entry never qualifies. The fallback applies none of the patterns of a .prettierignore with a negated entry, which conversion cannot express, rather than apply its exclusions without their exceptions, which can select no documents. .markdownlintignore is not converted, so the documents it excludes are checked; the fallback names it. The fallback prints one line on stderr for the settings it uses and one for each file it leaves out, with paths from the workspace root, and none with --quiet; config explain lists the files left out under conversion.unused (#788).

  • An error about a rule setting that cannot be used, such as an unknown rule or invalid options, names the configuration file that holds it (#788).

  • Bare format on files prints a diff and exits 1 when formatting would change a document. Scripts needing an exit-0 preview should use format --diff. --check --diff prints the diff and fails on changes. Remaining errors still exit 1, and operational failures take precedence with exit 2. Stdin keeps its formatted output and exit behavior (#788).

  • lint and format read stdin when --stdin-filepath is given without paths, and reject it with paths other than -. Help includes examples, workspace scope and exit codes; nested configuration help selects the named subcommand. Mistaken check/fix commands and lint modes suggest format. rules accepts --root; empty selections print a notice on stderr, and formatting previews name --write as the next step (#788).

  • content/image-alt, in recommended, also reports an HTML <img> element without an alt attribute, where renderers certainly show it. alt="", which marks a decorative image, is accepted, and so are images hidden by aria-hidden="true", hidden, inert, or a hiding style outside GitHub, whose sanitizer removes those attributes. Blank Markdown alternative text is still reported, because Markdown cannot mark an image as decorative. Images in content that may not be shown, such as <template> or <video>, after HTML whose reading is uncertain, after an end tag that a browser may ignore inside a hidden element, in unused footnote definitions, and in VitePress near Vue syntax are not reported (#694).

  • The documentation describes the behavior of the version it belongs to, without version notes; this changelog keeps the history. Each rule section opens with what the rule does, then states the severity that each preset gives it, as the rule index does (#746).

  • style/table formats tables inside lists and block quotes with all of its options, as Prettier aligns them, where it used to leave them as written. Each row keeps the quote markers, indentation, and line ending before it, and widths are measured after them, so a second run changes nothing. A header on its list item's marker line keeps its leading pipe or its lack of one, because markdown-it reads - a | b above an indented delimiter row as a table outside the list. Tables in footnote definitions, indented tables outside containers, and tables that renderer protections hold stay as written (#710).

  • style/heading removes heading-owned indentation, including Setext text and underlines, while retaining container prefixes. Its new closing: "add" option writes matching closing hash sequences on ATX headings, including the deeper levels of the Setext style. Renderer protections still apply. This interface addition belongs to the next minor release (#680, #700).

  • style/block-spacing also separates fenced code blocks that have a closing fence, and tables, from the blocks around them, as markdownlint's MD031 and MD058 and Prettier do. Blocks inside list items and footnote definitions stay as written, and a table is separated only from blocks that every renderer reads as separate from it: text below a table, which GFM reads as another row, stays (#684, #697).

  • style/heading writes one space between ATX heading hashes and text, including tabs and retained closing sequences. Empty headings need no separator. Protected Forgejo and Gitea attribute suffixes stay as written (#676, #678).

  • The comparison with Prettier and markdownlint lists every markdownlint rule and every Prettier Markdown option and formatting choice, with the issue that tracks each check not yet covered (#668).

  • Tokenizer identity verification partitions the unchanged deterministic corpus into bounded unit cases while retaining every source, selection and assertion under the existing deadline (#654).

  • Release evidence selects the latest check-run identity, preserving pending and unsuccessful reruns without letting an older completed null-start check hide a newer success (#647).

  • The shipped internal protection-source declaration uses its existing point type without an undeclared direct type import. Installed package checks cover that declaration with npm and strict pnpm; public entry points are unchanged (#655).

  • Maintainer guidance distinguishes intentional first-occurrence fixture rewrites from sanitizers, preserving intended bytes when triaging scanner alerts (#643).

  • Workspace memory verification separates document/cache lifecycle checks from a fresh compiled-product process's retained-text sample. The existing source allowance remains enforced, with numeric failure evidence and opt-in heap diagnostics (#413).

  • Filesystem discovery and selection, on-demand related-file lookup, and in-place write/recovery now have separate internal owners. Public discovery, selection and filesystem safety contracts are preserved (#620).

  • The Obsidian verification harness uses only its service-provided browser and ChromeDriver binaries, removing unused automatic-download FTP/PAC and extract-zip dependencies. Missing or incomplete executables fail explicitly; native host downloads, caching and version selection retain their existing owners (#639, #640).

  • Dependency updates follow parser, VitePress/reference and tooling maintenance units across dependency declarations. Existing compatibility deferrals remain, with explicit revisit checks for peers, tool pins and verified host baselines (#636, #637).

  • Five parser extensions used only to build the bundled parser are development dependencies. Installed consumers retain the required runtime utilities and public plugin types; package checks cover both parser paths and the shipped internal declarations. Release audits include bundled inputs regardless of npm's development flag (#624).

  • Maintained internal parser algorithms live in directly checked TypeScript source, with source guards and generated provenance linking their rationale, ownership and removal conditions to the dependency records. Parser behavior, extension compatibility and the bundled license graph are preserved (#622, #623).

  • Test suites separate engine, configuration, plugin, rule and comparison responsibilities. Shared parser/CLI support and authored native fixtures have explicit ownership, preserving their cases and native workload plans (#634).

  • Internal renderer protections have named collectors and one cached result; rule registration and semantic acceptance are separate from engine phase orchestrat...

Read more

mdrefine 0.5.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 13:55
Immutable release. Only release title and notes can be modified.
7ef856b

Changed

  • Dependency automation defers the incompatible reference-parser versions assessed in #591 through #594, with explicit reconsideration conditions, to prevent repeat incompatible PRs.

  • Remove every mdtools compatibility form deprecated in 0.4.x: the command, all five configuration discovery names and all three suppression-comment prefixes. Replace them with mdrefine before upgrading; old comments are ordinary HTML and old config names are no longer discovered. The migration notice and legacy wrapper are removed. Formatting does not migrate user files (#601).

Fixed

  • Update the indirect fast-uri dependency to 3.1.9 for its URI parsing and normalization security fixes, and the Docker-only Obsidian check's serialize-javascript override to 7.1.3 for its serialization security fix. The repository lockfile does not ship: existing installations can retain an older indirect version. Run npm update fast-uri in the consuming project, then use npm ls fast-uri to verify every resolved copy is 3.1.9 or a newer compatible patched release.

  • Memory checks settle V8's collectible roots and compilation caches before sampling, rather than assuming a regular major collection has released all collectible memory. The strict source-retention allowance and negative controls remain in place (#413).

mdrefine 0.4.1

Choose a tag to compare

@github-actions github-actions released this 24 Oct 08:03
Immutable release. Only release title and notes can be modified.
eb3ec66

Changed

  • Forgejo and Gitea gain automated before/after comparisons against pinned official disposable hosts, with realistic fixed-seed corpora and actual repository-file heading/fragment controls. PR and release gates use these checks; weekly adversarial discovery remains separate (#486).

  • The command, configuration filenames, suppression comments, temporary-file prefixes, examples and current documentation now use mdrefine. The old mdtools command, config names and comments remain compatible but deprecated throughout 0.4.x and will all be removed in 0.5.0. Rename config files and replace comment prefixes manually; formatting does not migrate them. One CLI migration notice per run does not count against --max-warnings (#600, #601).

  • Obsidian structural rules conservatively keep ambiguous block boundaries as written. Proposed style edits held by native-rendering protection now report the original rule and severity instead of disappearing silently; safe independent formatting remains available (#603).

  • Renderer PR/release gates compare existing fixtures and realistic documents at fixed seeds. Fresh adversarial generation becomes weekly/manual discovery with exact issue-linked known differences and stale-entry checks. Maintenance and review now use bounded scope and proportional verification (#603).

  • A release is published only after CI has passed on its exact commit and GitHub, Obsidian, Forgejo and Gitea rendering of fixed documents is unchanged by formatting at that commit. Pull requests that change parsing, rules, presets, or dependencies run the renderer comparisons. The documentation site records the release and commit it was built from in version.json, and the current release's site can be corrected from a site-VERSION branch without a new version (#485).

Fixed

  • Builtin parsers avoid repeated nested-label lookups and batch eligible pairs of long emphasis runs. Obsidian also avoids rescanning the same unfinished wikilink or embed suffix (#94, #577).

  • Focused Obsidian captures record the observed app and renderer versions separately from the requested version, with hashes binding completed evidence to its input and executed spec (#580).

  • Obsidian keeps the boundary after standalone comments so that heading/list spacing cannot split a native paragraph. Following inline style edits remain available (#357).

  • Setext titles directly after standalone Obsidian comments keep their underlines, since conversion can turn Reading-view paragraph text into a heading. Titles ending in whitespace-separated raw # runs also keep their Setext form, preserving Live Preview's title text (#383).

  • Obsidian keeps list indentation and number width where a preceding nested list affects the painted bullet of a following quoted list. Same-width numbering, delimiter preferences and inline styles remain available (#596).

  • Quoted blocks opened after a Tab keep their literal source where Reading view reads code instead of the parsed list, heading or paragraph. Blank quote rows between consecutive such blocks stay as literal code content too. Independent blocks and ordinary space-only quote margins still format (#597).

  • Obsidian keeps the separator before a list directly following another list's final secondary paragraph or indented code block, preserving Live Preview's paragraph grouping while allowing safe inline and marker preferences (#598).

  • Obsidian preserves list markers and tightness across quote and table continuations, literal table rows after list code fences, adjacent Setext titles that Reading view still reads as paragraph text across Tab lines, and blank lines inside physical list fences hidden by the primary inline parse (#582, #583, #584).

  • Obsidian keeps adjacent display math inside its final list item and retains standalone one-line display widgets when wrapping (#586, #587).

  • Protected separator starts also reject plugin insertions and replacements that add a blank before the existing line break or remove a quote-only marker, while safe terminal inline edits remain available (#590).

  • Rendering comparisons account for omitted terminal line feeds in highlighted GitHub code, generated math response IDs inside raw HTML, and invisible Reading-view whitespace beside Obsidian display math, retaining exact source code, authored attributes, formula content and visible inline spacing (#515, #588, #589).

  • Release-evidence validation runs through linked checkout paths, and the parser builder rejects dependencies resolved outside its checkout consistently across platforms while accepting valid checkout directory names (#574, #575, #578, #579).

  • Parsing uses a portable internal adapter to reduce repeated copying and searching on documents with many containers, inline constructs or unfinished labels. Syntax plugins retain the original attention/strikethrough event behavior. GFM footnote list items have valid source ranges and read correctly as loose or tight (#300, #151, #240, #280, #542).

  • GitHub file-fragment checks include native headings and HTML anchors in dollar-math source, with complete Setext title text and correct duplicate numbering. The target reading is lazy and preserves the YAML selection and formatter's math behavior (#570).

  • GitHub repository-file fragment checks follow YAML preprocessing: mappings and YAML error displays render the body after front matter, while ordinary non-mappings remain Markdown. Unsettled YAML classes retain only anchors shared by both readings, with incomplete checks reported explicitly (#540).

  • GitHub fragment checks and the CommonMark fallback include headings and explicit IDs inside tagfiltered HTML, whose outer tags render as text. Unsupported inline attributes and raw-text tag spellings remain incomplete instead of producing guessed missing fragments (#541).

  • Raw HTML heading fragments retain literal character-reference text split by tags or comments, including the numbering of later duplicate headings (#552).

  • Keep two-space hard breaks inside locally paired multiline code spans, which GitHub can display as literal text after an unmatched longer backtick run. Both wrapping and inline-code joining retain the physical boundary (#335).

  • Preserve GitHub's heading and lazy paragraph boundaries beside dollar display math, including compact hyphen lines and Setext titles. Keep thematic-marker, heading, spacing and wrap changes from splitting those native boundaries (#336).

  • Keep Obsidian list markers consistent when HTML leaves one parsed list and protects a later list's markers, so formatting cannot split one Reading-view list by changing only its earlier bullet (#399).

  • Keep one-column Obsidian table source when missing header or delimiter borders would turn Live Preview text into a table widget, and carry Reading paragraph state across Tab lines when those borders do not form a real table (#568).

  • Keep a list paragraph adjacent to an Obsidian tilde opener whose info contains backticks, preserving its Live Preview continuation while allowing safe list formatting. When its primary closer opens Live Preview code, conservatively preserve the remaining source because later fences can pair differently (#567).

  • Retain Reading paragraph state across Tab lines after a one-column table displayed as text, preserving later literal rows while allowing genuine tables to format ([#398](https://github.com/viell-dev/slo...

Read more