Research / Rules
The rule set
Markdown Preflight applies 91 rules across five destinations. Each one is a single claim about what a named publishing editor does to a named Markdown construct, traced to a dated live test. Every rule below has its own page and its own permanent address, so a single claim can be read, linked, and checked on its own.
The same rule data drives the product, these pages, and rules.json. Nothing here is written by hand.
All rules
| Rule | What happens | Result | Destinations | Constructs |
|---|---|---|---|---|
BEE-ANCHOR-01 | Heading anchor links are kept but may be rebound. | Kept | Beehiiv | link_anchor |
BEE-BREAK-01 | Hard breaks add extra vertical space. | Kept | Beehiiv | hard_break |
BEE-CODE-01 | Code is kept, but a long unbroken line may overflow in email. | Kept | Beehiiv | code_long_line |
BEE-EMPH-01 | Inline formatting is kept as Markdown. | Kept | Beehiiv | strong emphasis strikethrough inline_code |
BEE-FM-01 | Front matter is removed from the body. | Manual step | Beehiiv | front_matter |
BEE-FOOT-01 | Footnotes are moved to a checklist. | Manual step | Beehiiv | footnote |
BEE-HEAD-01 | Headings become native headings. | Kept | Beehiiv | heading |
BEE-HTML-01 | Raw HTML is removed; its visible text is kept. | Degraded | Beehiiv | html_raw |
BEE-IMAGE-01 | Remote images import, but alt text is not confirmed. | Kept | Beehiiv | image_remote |
BEE-IMAGE-02 | Local images do not upload. | Manual step | Beehiiv | image_local |
BEE-LINK-01 | Absolute and mailto links are kept. | Kept | Beehiiv | link_absolute link_mailto |
BEE-LINK-02 | Relative and local links are not resolved. | Manual step | Beehiiv | link_relative link_local |
BEE-LIST-01 | Lists and nesting are kept. | Kept | Beehiiv | list |
BEE-MATH-01 | Math is moved to a checklist. | Manual step | Beehiiv | math_inline math_block |
BEE-MERMAID-01 | Mermaid stays as source code; no diagram renders. | Degraded | Beehiiv | mermaid |
BEE-OBS-01 | Obsidian syntax is flattened to ordinary text. | Manual step | Beehiiv | obsidian_wikilink obsidian_embed obsidian_callout obsidian_blockref |
BEE-QUOTE-01 | Quotes and dividers become native blocks. | Kept | Beehiiv | blockquote divider |
BEE-TABLE-01 | Small tables become native tables. | Kept | Beehiiv | table_small |
BEE-TABLE-02 | A wide table wraps tightly in email. | Kept | Beehiiv | table_wide |
BEE-TASK-01 | Task markers stay as text, not checkboxes. | Degraded | Beehiiv | task_item |
CORE-LINK-01 | A link with an unsafe scheme was removed; its text was kept. | Degraded | WordPress, Substack, Beehiiv, X, LinkedIn | link_unsafe |
CORE-LINK-02 | Relative links were rewritten against the site base URL you confirmed. | Changed | WordPress, Substack, Beehiiv, X, LinkedIn | link_resolved |
LI-CODE-01 | Code loses its formatting and gets a Code: label. | Degraded | code inline_code | |
LI-EMPH-01 | Bold, italic, and strike are removed. | Degraded | strong emphasis strikethrough | |
LI-FOOT-01 | Footnotes are moved to a checklist; the marker leaves the post text. | Manual step | footnote | |
LI-HEAD-01 | Heading markers are removed; the first line becomes the opening. | Changed | heading | |
LI-IMAGE-01 | Images do not transfer through a text paste. | Manual step | image_remote image_local | |
LI-LIMIT-01 | The post is counted in UTF-16 code units against a 3,000 limit. | Changed | Whole draft | |
LI-LINK-01 | Links become label: URL and count their full length. | Changed | link_absolute link_mailto link_resolved link_anchor | |
LI-LINK-02 | Relative and local targets do not resolve in a post. | Manual step | link_relative link_local | |
LI-LIST-01 | Lists become bullet or numbered lines; task state becomes words. | Changed | list task_item | |
LI-PARA-01 | Paragraph spacing and hard breaks are preserved. | Kept | hard_break | |
LI-QUOTE-01 | Quotes get a Quote: label. | Changed | blockquote | |
LI-SPECIAL-01 | Math, Mermaid, Obsidian syntax, raw HTML, and heading anchors are not live-verified on LinkedIn. | Unknown | math_inline math_block mermaid html_raw obsidian_wikilink obsidian_embed obsidian_callout obsidian_blockref link_anchor | |
LI-TABLE-01 | Small tables become compact labeled rows. | Degraded | table_small | |
LI-TABLE-02 | A wide table needs a summary and an attachment. | Manual step | table_wide | |
SUB-ANCHOR-01 | Heading anchor links survive but may be rebound. | Kept | Substack | link_anchor |
SUB-BREAK-01 | Hard breaks and paragraphs survive. | Kept | Substack | hard_break |
SUB-CODE-01 | Code survives, but a long unbroken line needs a mobile check. | Kept | Substack | code_long_line |
SUB-EMPH-01 | Inline formatting survives rich paste. | Kept | Substack | strong emphasis strikethrough inline_code |
SUB-FM-01 | Front matter is removed from the body. | Manual step | Substack | front_matter |
SUB-FOOT-01 | Footnotes are moved to a checklist. | Manual step | Substack | footnote |
SUB-HEAD-01 | Heading hierarchy survives rich paste. | Kept | Substack | heading |
SUB-HTML-01 | Raw HTML is removed; its visible text is kept. | Degraded | Substack | html_raw |
SUB-IMAGE-01 | Remote images are imported and rewritten by Substack. | Kept | Substack | image_remote |
SUB-IMAGE-02 | Local images do not upload. | Manual step | Substack | image_local |
SUB-LINK-01 | Absolute and mailto links survive. | Kept | Substack | link_absolute link_mailto |
SUB-LINK-02 | Relative and local links are not resolved. | Manual step | Substack | link_relative link_local |
SUB-LIST-01 | Lists and nesting survive rich paste. | Kept | Substack | list |
SUB-MATH-01 | Math is moved to a checklist. | Manual step | Substack | math_inline math_block |
SUB-MERMAID-01 | Mermaid stays as source code; no diagram renders. | Degraded | Substack | mermaid |
SUB-OBS-01 | Obsidian syntax is flattened to ordinary rich content. | Manual step | Substack | obsidian_wikilink obsidian_embed obsidian_callout obsidian_blockref |
SUB-QUOTE-01 | Quotes and dividers survive. | Kept | Substack | blockquote divider |
SUB-TABLE-01 | Tables become accessible labeled rows. | Degraded | Substack | table_small |
SUB-TABLE-02 | A wide table needs a media plan, not flattened cells. | Manual step | Substack | table_wide |
SUB-TASK-01 | Task state becomes Done: or To do:. | Changed | Substack | task_item |
WP-ANCHOR-01 | In-page anchor links will not resolve. | Manual step | WordPress | link_anchor |
WP-CODE-01 | Code is preserved, but a long unbroken line may overflow. | Kept | WordPress | code_long_line |
WP-EMPH-01 | Inline formatting is preserved. | Kept | WordPress | strong emphasis strikethrough inline_code |
WP-FM-01 | Front matter is removed from the body. | Manual step | WordPress | front_matter |
WP-FOOT-01 | Footnotes are moved to a checklist for Gutenberg paste. | Manual step | WordPress | footnote |
WP-HEAD-01 | Heading levels are preserved. | Kept | WordPress | heading |
WP-HTML-01 | Raw HTML is removed; its visible text is kept. | Degraded | WordPress | html_raw |
WP-IMAGE-01 | Local images do not upload. | Manual step | WordPress | image_local |
WP-IMAGE-02 | Remote images are hotlinked, not imported. | Kept | WordPress | image_remote |
WP-LINK-01 | Relative and local links are not resolved. | Manual step | WordPress | link_relative link_local |
WP-LIST-01 | Lists and nesting are preserved. | Kept | WordPress | list |
WP-MATH-01 | Math is moved to a checklist. | Manual step | WordPress | math_inline math_block |
WP-MERMAID-01 | Mermaid stays as source code; no diagram renders. | Degraded | WordPress | mermaid |
WP-MODE-01 | Two WordPress modes exist: Gutenberg paste and the WordPress.com/Jetpack Markdown Block. | Changed | WordPress | Whole draft |
WP-OBS-01 | Obsidian syntax is flattened to ordinary text. | Manual step | WordPress | obsidian_wikilink obsidian_embed obsidian_callout obsidian_blockref |
WP-TABLE-01 | Small tables become native tables. | Kept | WordPress | table_small |
WP-TABLE-02 | A wide table needs a narrow-screen check. | Kept | WordPress | table_wide |
WP-TASK-01 | Task state becomes explicit words. | Changed | WordPress | task_item |
WP-TITLE-01 | The post title is not filled by pasting. | Manual step | WordPress | heading |
X-CODE-01 | Code loses its formatting and gets a Code: label. | Degraded | X | code inline_code |
X-DIV-01 | Dividers become a simple separator line. | Changed | X | divider |
X-EMPH-01 | Bold, italic, and strike are removed. | Degraded | X | strong emphasis strikethrough |
X-FOOT-01 | Footnotes are moved to a checklist; the marker leaves the post text. | Manual step | X | footnote |
X-HEAD-01 | Heading markers are removed; the text becomes a standalone line. | Changed | X | heading |
X-IMAGE-01 | Images do not transfer through a text copy. | Manual step | X | image_remote image_local |
X-LIMIT-01 | Each post is counted with X weighted rules, not string length. | Changed | X | Whole draft |
X-LINK-01 | Links become label: URL and weigh 23 characters each. | Changed | X | link_absolute link_mailto link_resolved |
X-LINK-02 | Relative, local, and in-page targets do not resolve in a post. | Manual step | X | link_relative link_local link_anchor |
X-LIST-01 | Lists become plain bullet or numbered lines; task state becomes words. | Changed | X | list task_item |
X-PARA-01 | Paragraph spacing and hard breaks are preserved. | Kept | X | hard_break |
X-QUOTE-01 | Quotes get a Quote: label. | Changed | X | blockquote |
X-SPECIAL-01 | Math, Mermaid, Obsidian syntax, and raw HTML are resolved to readable text or a media task. | Manual step | X | math_inline math_block mermaid html_raw obsidian_wikilink obsidian_embed obsidian_callout obsidian_blockref |
X-TABLE-01 | Small tables become labeled rows, keeping every cell value. | Degraded | X | table_small |
X-TABLE-02 | A wide table needs a summary and a media plan. | Manual step | X | table_wide |
X-THREAD-01 | Longer drafts split into a thread at section, paragraph, list, then sentence boundaries. | Changed | X | Whole draft |
How to read a rule
- A rule states what one destination does, on the surface and date named on its page.
- Verified means the behavior was observed in a live editor, not that it survived unchanged.
- Where no live test exists the rule says unknown, rather than guessing from documentation.
- Records are never edited to match later behavior; a change adds a new dated record.