| MDS001 |
line-length |
line |
ready |
Line exceeds maximum length. |
| MDS002 |
heading-style |
heading |
ready |
Heading style must be consistent. |
| MDS003 |
heading-increment |
heading |
ready |
Heading levels should increment by one. No jumping from # to ###. |
| MDS004 |
first-line-heading |
heading |
ready |
First line of the file should be a heading. |
| MDS005 |
no-duplicate-headings |
heading |
ready |
No two headings should have the same text. |
| MDS006 |
no-trailing-spaces |
whitespace |
ready |
No trailing whitespace at the end of lines. |
| MDS007 |
no-hard-tabs |
whitespace |
ready |
No tab characters. Use spaces instead. |
| MDS008 |
no-multiple-blanks |
whitespace |
ready |
No more than one consecutive blank line. |
| MDS009 |
single-trailing-newline |
whitespace |
ready |
File must end with exactly one newline character. |
| MDS010 |
fenced-code-style |
code |
ready |
Fenced code blocks must use a consistent delimiter. |
| MDS011 |
fenced-code-language |
code |
ready |
Fenced code blocks must specify a language. |
| MDS012 |
no-bare-urls |
link |
ready |
URLs must be wrapped in angle brackets or as a link, not left bare. |
| MDS013 |
blank-line-around-headings |
heading |
ready |
Headings must have a blank line before and after. |
| MDS014 |
blank-line-around-lists |
list |
ready |
Lists must have a blank line before and after. |
| MDS015 |
blank-line-around-fenced-code |
code |
ready |
Fenced code blocks must have a blank line before and after. |
| MDS016 |
list-indent |
list |
ready |
List items must use consistent indentation. |
| MDS017 |
no-trailing-punctuation-in-heading |
heading |
ready |
Headings should not end with punctuation. |
| MDS018 |
no-emphasis-as-heading |
heading |
ready |
Don't use bold or emphasis on a standalone line as a heading substitute. |
| MDS019 |
catalog |
directive |
ready |
Catalog content must reflect selected front matter fields from files matching its glob. |
| MDS020 |
required-structure |
structural |
ready |
Document structure and front matter must match its schema. |
| MDS021 |
include |
directive |
ready |
Include section content must match the referenced file. |
| MDS022 |
max-file-length |
structural |
ready |
File must not exceed maximum number of lines. |
| MDS023 |
paragraph-readability |
prose |
ready |
Paragraph readability index must not exceed a threshold. |
| MDS024 |
paragraph-structure |
prose |
ready |
Paragraphs must not exceed sentence and word limits. |
| MDS025 |
table-format |
table |
ready |
Tables must have consistent edge pipes, equal column counts, surrounding blank lines, and prettier-style alignment. |
| MDS026 |
table-readability |
table |
ready |
Tables must stay within readability complexity limits. |
| MDS027 |
cross-file-reference-integrity |
link |
ready |
Links to local files and heading anchors must resolve. |
| MDS028 |
token-budget |
prose |
ready |
File must not exceed a token budget. |
| MDS029 |
conciseness-scoring |
prose |
not-ready |
Paragraph conciseness score must not fall below a threshold. |
| MDS030 |
empty-section-body |
heading |
ready |
Section headings must include meaningful body content. |
| MDS031 |
unclosed-code-block |
code |
ready |
Fenced code blocks must have a closing fence delimiter. |
| MDS032 |
no-empty-alt-text |
accessibility |
ready |
Images must have non-empty alt text for accessibility. |
| MDS033 |
directory-structure |
structural |
ready |
Markdown files must exist only in explicitly allowed directories. |
| MDS034 |
markdown-flavor |
structural |
ready |
Flags Markdown syntax that the declared target flavor does not render. |
| MDS035 |
toc-directive |
directive |
ready |
Flag renderer-specific TOC directives that render as literal text on CommonMark and goldmark. |
| MDS036 |
max-section-length |
heading |
ready |
Section length must not exceed per-level, per-heading, word, or paragraph limits. |
| MDS037 |
duplicated-content |
prose |
ready |
Paragraphs should not repeat verbatim across Markdown files. |
| MDS038 |
toc |
directive |
ready |
Keep toc generated heading lists in sync with document headings. |
| MDS039 |
build |
directive |
ready |
Validate <?build?> directive parameters and keep the section body in sync with the recipe's rendered body-template. |
| MDS040 |
recipe-safety |
directive |
ready |
Validate each build.recipes command for shell-safety at lint time; the rule never executes any binary. |
| MDS041 |
no-inline-html |
structural |
ready |
Raw HTML tags in Markdown are not allowed; use a Markdown construct or an mdsmith directive instead. |
| MDS042 |
emphasis-style |
prose |
ready |
Enforces a single delimiter character for bold and italic emphasis, and optionally forbids cross-delimiter nesting. |
| MDS043 |
no-reference-style |
link |
ready |
Reference-style links and footnotes require global definition resolution; flag them in favor of inline links. |
| MDS044 |
horizontal-rule-style |
whitespace |
ready |
Thematic breaks must use a consistent delimiter style, exact length, and blank-line spacing. |
| MDS045 |
list-marker-style |
list |
ready |
Unordered list items must use the configured bullet marker character. |
| MDS046 |
ordered-list-numbering |
list |
ready |
Ordered list items must be numbered in the configured style. |
| MDS047 |
ambiguous-emphasis |
prose |
ready |
Forbid emphasis sequences whose meaning a human cannot predict at a glance. |
| MDS048 |
git-hook-sync |
structural |
ready |
Git artifacts must match the canonical glob-based template derived from .mdsmith.yml. |
| MDS049 |
no-space-in-link-text |
link |
ready |
Link text and image alt text must not have leading or trailing whitespace inside the brackets. |
| MDS050 |
proper-names |
prose |
ready |
Configured proper names (e.g. JavaScript, GitHub) must appear with their canonical casing. |
| MDS051 |
single-h1 |
heading |
ready |
At most one H1 heading is allowed per file. |
| MDS052 |
no-space-in-code-spans |
whitespace |
ready |
Inline code spans with leading or trailing whitespace inside the backticks are almost always typos; flag them. |
| MDS053 |
no-unused-link-definitions |
link |
ready |
Every [label]: url definition must be consumed by at least one reference-style link or image; duplicate labels are flagged. |
| MDS054 |
no-undefined-reference-labels |
link |
ready |
Reference-style links and images must have a matching link reference definition in the same file. |
| MDS055 |
forbidden-paragraph-starts |
prose |
ready |
Paragraphs must not begin with any configured prefix. |
| MDS056 |
forbidden-text |
prose |
ready |
Paragraphs must not contain any configured substring. |
| MDS057 |
required-text-patterns |
prose |
ready |
Heading-bounded sections must match every configured regex. |
| MDS058 |
required-mentions |
prose |
ready |
Heading-bounded sections must contain every configured substring. |
| MDS059 |
blockquote-whitespace |
whitespace |
ready |
Blockquote markers must not be followed by multiple spaces, and adjacent blockquote blocks must not be separated by blank lines. |
| MDS060 |
occurrence |
prose |
ready |
A scope must contain each configured token or pattern between min and max times (inclusive). Counts prose only; fenced and indented code blocks are excluded. |
| MDS061 |
list-marker-space |
list |
ready |
Each list marker must be followed by the configured number of spaces. |
| MDS062 |
link-validity |
link |
ready |
Links must not use the reversed (text)[url] form, and every link or image must have a non-empty destination; a link must also have visible text. |
| MDS063 |
descriptive-link-text |
prose |
ready |
Link text must be descriptive. Non-descriptive phrases like "click here", "here", "link", and "more" fail screen readers and link-list navigation. |
| MDS064 |
atx-heading-whitespace |
heading |
ready |
ATX heading whitespace and indentation. |
| MDS065 |
code-block-style |
code |
ready |
Code blocks must use a single delimiter — fenced or four-space indented — consistently across the file. |
| MDS066 |
commands-show-output |
code |
ready |
A fenced code block whose every non-blank line begins with $ and shows no output must drop the prompt. |
| MDS067 |
callout-type |
structural |
ready |
Validate Obsidian callout types against an allowed set. |
| MDS068 |
link-style |
link |
ready |
Flag links and images whose path, extension, form, or link-image-style deviates from the project's declared links.style policy. |
| MDS069 |
unique-frontmatter |
structural |
ready |
Every file in the configured glob scope must hold a distinct value in the configured front-matter field. |
| MDS070 |
same-file-anchor |
link |
ready |
Every same-file #fragment link must resolve to a heading present in the same file. |
| MDS071 |
required-frontmatter |
structural |
ready |
Every file in the configured glob scope must declare each named front-matter field with a present, non-empty value. |
| MDS072 |
external-link-check |
link |
ready |
Probe external http and https URLs; flag any returning a transport error or 4xx/5xx response. |
| MDS073 |
slide-structure |
structural |
ready |
Flags Slidev slide-structure errors: unknown layouts, missing or orphaned slot separators, missing layout-required fields, and misspelled per-slide frontmatter keys. |