Research / Rules
The rule set
Markdown Preflight applies 93 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, rules.json, and llms.txt. 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-FM-01 | Front matter is removed from the post. | Manual step | front_matter | |
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-FM-01 | Front matter is removed from the post. | Manual step | X | front_matter |
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.
Related
- The same rules indexed by construct, for when you know what is in your draft
- The construct-level matrix from the live tests
- How these tests are run
- Check your own draft against all five