Rule Directory
Complete list of all mdsmith rules with category, status, and description, generated from rule READMEs.
All mdsmith rules. Each rule links to its full README with parameters, examples, and diagnostics.
| Rule | Name | Category | Status | Description |
|---|---|---|---|---|
| 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. |
| 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. |
# Directive rules
Rules whose nature: directive front matter
marks them as <?...?> directive
implementations. Filtered from the same source as
the table above.
| Rule | Name | Description |
|---|---|---|
| MDS019 | catalog | Catalog content must reflect selected front matter fields from files matching its glob. |
| MDS021 | include | Include section content must match the referenced file. |
| MDS038 | toc | Keep toc generated heading lists in sync with document headings. |
| MDS039 | build | Validate <?build?> directive parameters and keep the section body in sync with the recipe’s rendered body-template. |