{
  "fixture": "markdown-portability-test-v1",
  "ruleCount": 91,
  "notice": "Each rule states what one publishing editor did to one Markdown construct, on the surface and date named in its application. A rule is only as current as its test date.",
  "rules": [
    {
      "id": "BEE-ANCHOR-01",
      "url": "/rules/bee-anchor-01/",
      "constructTypes": [
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Heading anchor links are kept but may be rebound.",
          "reason": "The tested platform rewrote the anchor onto its own draft-preview URL.",
          "action": "Check each in-page link in the preview.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-BREAK-01",
      "url": "/rules/bee-break-01/",
      "constructTypes": [
        "hard_break"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Hard breaks add extra vertical space.",
          "reason": "The tested paste turned one hard break into two line breaks.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-CODE-01",
      "url": "/rules/bee-code-01/",
      "constructTypes": [
        "code_long_line"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Code is kept, but a long unbroken line may overflow in email.",
          "reason": "Fenced code converted natively; long lines needed review in the tested narrow and email previews.",
          "action": "Check the email preview before sending.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-EMPH-01",
      "url": "/rules/bee-emph-01/",
      "constructTypes": [
        "strong",
        "emphasis",
        "strikethrough",
        "inline_code"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Inline formatting is kept as Markdown.",
          "reason": "The tested editor parsed emphasis, strike, and inline code from a plain paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-FM-01",
      "url": "/rules/bee-fm-01/",
      "constructTypes": [
        "front_matter"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Front matter is removed from the body.",
          "reason": "Pasted front-matter fields stayed as visible paragraphs in the tested editor.",
          "action": "Set the title and any other metadata in Beehiiv directly.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-FOOT-01",
      "url": "/rules/bee-foot-01/",
      "constructTypes": [
        "footnote"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Footnotes are moved to a checklist.",
          "reason": "Footnote syntax stayed literal and an indented continuation became a code block.",
          "action": "Recreate each note with the native Footnotes component.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-HEAD-01",
      "url": "/rules/bee-head-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Headings become native headings.",
          "reason": "The tested paste converted H1 through H6 into native blocks.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-HTML-01",
      "url": "/rules/bee-html-01/",
      "constructTypes": [
        "html_raw"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Raw HTML is removed; its visible text is kept.",
          "reason": "Raw paste showed literal markup in the tested editor.",
          "action": "Use the native HTML snippet control if you need the markup.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-IMAGE-01",
      "url": "/rules/bee-image-01/",
      "constructTypes": [
        "image_remote"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Remote images import, but alt text is not confirmed.",
          "reason": "The platform imported the file; the test did not verify that alt text survived.",
          "action": "Re-add alt text in the editor.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-IMAGE-02",
      "url": "/rules/bee-image-02/",
      "constructTypes": [
        "image_local"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Local images do not upload.",
          "reason": "The local path stayed unresolved in the tested paste.",
          "action": "Upload each local file in the Beehiiv editor.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-LINK-01",
      "url": "/rules/bee-link-01/",
      "constructTypes": [
        "link_absolute",
        "link_mailto"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Absolute and mailto links are kept.",
          "reason": "Both survived the tested paste. Preview cards remain destination-controlled.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-LINK-02",
      "url": "/rules/bee-link-02/",
      "constructTypes": [
        "link_relative",
        "link_local"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Relative and local links are not resolved.",
          "reason": "Without a confirmed base URL there is no safe way to know where these point.",
          "action": "Add a base URL in Source context, or fix each link in the editor.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-LIST-01",
      "url": "/rules/bee-list-01/",
      "constructTypes": [
        "list"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Lists and nesting are kept.",
          "reason": "Three tested nesting levels survived the paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-MATH-01",
      "url": "/rules/bee-math-01/",
      "constructTypes": [
        "math_inline",
        "math_block"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Math is moved to a checklist.",
          "reason": "No math or LaTeX control was visible in the tested editor.",
          "action": "Add the formula as an image with a text alternative.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-MERMAID-01",
      "url": "/rules/bee-mermaid-01/",
      "constructTypes": [
        "mermaid"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Mermaid stays as source code; no diagram renders.",
          "reason": "The tested editor showed the fence as a code block.",
          "action": "Export the diagram as an image and add a text summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-OBS-01",
      "url": "/rules/bee-obs-01/",
      "constructTypes": [
        "obsidian_wikilink",
        "obsidian_embed",
        "obsidian_callout",
        "obsidian_blockref"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Obsidian syntax is flattened to ordinary text.",
          "reason": "Wiki links and transclusions stayed literal and callouts became plain quotes.",
          "action": "Check each flattened target still makes sense to a reader.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-QUOTE-01",
      "url": "/rules/bee-quote-01/",
      "constructTypes": [
        "blockquote",
        "divider"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Quotes and dividers become native blocks.",
          "reason": "Both converted in the tested paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-TABLE-01",
      "url": "/rules/bee-table-01/",
      "constructTypes": [
        "table_small"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Small tables become native tables.",
          "reason": "The tested editor built a native table from a pasted GFM table.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-TABLE-02",
      "url": "/rules/bee-table-02/",
      "constructTypes": [
        "table_wide"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "A wide table wraps tightly in email.",
          "reason": "Cells wrapped hard in the tested desktop and mobile email previews.",
          "action": "Check both email previews, or split the table.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "BEE-TASK-01",
      "url": "/rules/bee-task-01/",
      "constructTypes": [
        "task_item"
      ],
      "applications": [
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Task markers stay as text, not checkboxes.",
          "reason": "The tested editor left [x] and [ ] as literal characters.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        }
      ]
    },
    {
      "id": "CORE-LINK-01",
      "url": "/rules/core-link-01/",
      "constructTypes": [
        "link_unsafe"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "degraded",
          "severity": "action",
          "statement": "A link with an unsafe scheme was removed; its text was kept.",
          "reason": "Only http, https, and mailto targets are carried. A javascript:, data:, or protocol-relative target is never copied into a destination editor.",
          "action": "Replace it with an ordinary https link, or delete the text.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        },
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "degraded",
          "severity": "action",
          "statement": "A link with an unsafe scheme was removed; its text was kept.",
          "reason": "Only http, https, and mailto targets are carried. A javascript:, data:, or protocol-relative target is never copied into a destination editor.",
          "action": "Replace it with an ordinary https link, or delete the text.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        },
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "degraded",
          "severity": "action",
          "statement": "A link with an unsafe scheme was removed; its text was kept.",
          "reason": "Only http, https, and mailto targets are carried. A javascript:, data:, or protocol-relative target is never copied into a destination editor.",
          "action": "Replace it with an ordinary https link, or delete the text.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        },
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "action",
          "statement": "A link with an unsafe scheme was removed; its text was kept.",
          "reason": "Only http, https, and mailto targets are carried. A javascript:, data:, or protocol-relative target is never copied into a destination editor.",
          "action": "Replace it with an ordinary https link, or delete the text.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        },
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "action",
          "statement": "A link with an unsafe scheme was removed; its text was kept.",
          "reason": "Only http, https, and mailto targets are carried. A javascript:, data:, or protocol-relative target is never copied into a destination editor.",
          "action": "Replace it with an ordinary https link, or delete the text.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "CORE-LINK-02",
      "url": "/rules/core-link-02/",
      "constructTypes": [
        "link_resolved"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Relative links were rewritten against the site base URL you confirmed.",
          "reason": "Resolution is plain URL resolution against that base; no slug, extension, or redirect is guessed. Local media still needs an upload.",
          "action": "Check each rewritten target opens the page you meant.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        },
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Relative links were rewritten against the site base URL you confirmed.",
          "reason": "Resolution is plain URL resolution against that base; no slug, extension, or redirect is guessed. Local media still needs an upload.",
          "action": "Check each rewritten target opens the page you meant.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        },
        {
          "destination": "beehiiv",
          "surface": "Beehiiv web Visual Editor",
          "mode": "Clean Markdown paste",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Relative links were rewritten against the site base URL you confirmed.",
          "reason": "Resolution is plain URL resolution against that base; no slug, extension, or redirect is guessed. Local media still needs an upload.",
          "action": "Check each rewritten target opens the page you meant.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/beehiiv/"
        },
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Relative links were rewritten against the site base URL you confirmed.",
          "reason": "Resolution is plain URL resolution against that base; no slug, extension, or redirect is guessed. Local media still needs an upload.",
          "action": "Check each rewritten target opens the page you meant.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        },
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Relative links were rewritten against the site base URL you confirmed.",
          "reason": "Resolution is plain URL resolution against that base; no slug, extension, or redirect is guessed. Local media still needs an upload.",
          "action": "Check each rewritten target opens the page you meant.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-CODE-01",
      "url": "/rules/li-code-01/",
      "constructTypes": [
        "code",
        "inline_code"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Code loses its formatting and gets a Code: label.",
          "reason": "Backticks stayed literal and there is no code control.",
          "action": "Shorten long code or attach it as a document.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-EMPH-01",
      "url": "/rules/li-emph-01/",
      "constructTypes": [
        "strong",
        "emphasis",
        "strikethrough"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Bold, italic, and strike are removed.",
          "reason": "The composer exposes no formatting controls. Unicode look-alike fonts stay off by default because they break screen readers and search.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-FOOT-01",
      "url": "/rules/li-foot-01/",
      "constructTypes": [
        "footnote"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Footnotes are moved to a checklist; the marker leaves the post text.",
          "reason": "The composer has no footnote control, so the reference and its definition are lifted out of the payload rather than pasted as literal markers.",
          "action": "Work each note into the post text, or add it as a comment, using the definitions listed below.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-HEAD-01",
      "url": "/rules/li-head-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Heading markers are removed; the first line becomes the opening.",
          "reason": "A feed post is not a document. A deep heading hierarchy reads poorly here.",
          "action": "Check the opening line works as a hook.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-IMAGE-01",
      "url": "/rules/li-image-01/",
      "constructTypes": [
        "image_remote",
        "image_local"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Images do not transfer through a text paste.",
          "reason": "Markdown image syntax stayed literal and nothing was uploaded in the tested composer.",
          "action": "Attach each image using the alt text listed below.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-LIMIT-01",
      "url": "/rules/li-limit-01/",
      "constructTypes": [],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "The post is counted in UTF-16 code units against a 3,000 limit.",
          "reason": "Verified against the live composer, including emoji surrogate pairs and full URL length.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-LINK-01",
      "url": "/rules/li-link-01/",
      "constructTypes": [
        "link_absolute",
        "link_mailto",
        "link_resolved",
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Links become label: URL and count their full length.",
          "reason": "Markdown link syntax stayed literal and made no preview; a bare URL did. LinkedIn counts the whole URL.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-LINK-02",
      "url": "/rules/li-link-02/",
      "constructTypes": [
        "link_relative",
        "link_local"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Relative and local targets do not resolve in a post.",
          "reason": "A feed post is not a page of your site. Without a confirmed site base URL the raw path is pasted as ordinary text and points nowhere.",
          "action": "Add a base URL in Source context, or make each link absolute before copying.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-LIST-01",
      "url": "/rules/li-list-01/",
      "constructTypes": [
        "list",
        "task_item"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Lists become bullet or numbered lines; task state becomes words.",
          "reason": "Markdown list markers stayed as ordinary characters in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-PARA-01",
      "url": "/rules/li-para-01/",
      "constructTypes": [
        "hard_break"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Paragraph spacing and hard breaks are preserved.",
          "reason": "The tested clean output kept its intended spacing.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-QUOTE-01",
      "url": "/rules/li-quote-01/",
      "constructTypes": [
        "blockquote"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Quotes get a Quote: label.",
          "reason": "Markdown quote markers stayed literal in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-SPECIAL-01",
      "url": "/rules/li-special-01/",
      "constructTypes": [
        "math_inline",
        "math_block",
        "mermaid",
        "html_raw",
        "obsidian_wikilink",
        "obsidian_embed",
        "obsidian_callout",
        "obsidian_blockref",
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "unknown",
          "severity": "evidence_gap",
          "statement": "Math, Mermaid, Obsidian syntax, raw HTML, and heading anchors are not live-verified on LinkedIn.",
          "reason": "The focused standard-post test did not isolate these constructs, so no reliable claim exists yet.",
          "action": "Check this part of the output yourself before posting.",
          "confidence": "unknown",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-TABLE-01",
      "url": "/rules/li-table-01/",
      "constructTypes": [
        "table_small"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Small tables become compact labeled rows.",
          "reason": "All pipes and separator characters stayed visible in the tested composer.",
          "action": "Check the labeled rows read correctly.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "LI-TABLE-02",
      "url": "/rules/li-table-02/",
      "constructTypes": [
        "table_wide"
      ],
      "applications": [
        {
          "destination": "linkedin",
          "surface": "LinkedIn desktop web Create post composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "A wide table needs a summary and an attachment.",
          "reason": "Flattening a wide table silently would lose the relationships between cells.",
          "action": "Attach the table as a document or image with a text summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/linkedin/"
        }
      ]
    },
    {
      "id": "SUB-ANCHOR-01",
      "url": "/rules/sub-anchor-01/",
      "constructTypes": [
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Heading anchor links survive but may be rebound.",
          "reason": "Substack rewrote the tested anchor onto its draft URL.",
          "action": "Check each in-page link after pasting.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-BREAK-01",
      "url": "/rules/sub-break-01/",
      "constructTypes": [
        "hard_break"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Hard breaks and paragraphs survive.",
          "reason": "Both survived the tested rich paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-CODE-01",
      "url": "/rules/sub-code-01/",
      "constructTypes": [
        "code_long_line"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Code survives, but a long unbroken line needs a mobile check.",
          "reason": "Code blocks survived; long-line overflow still needs destination review.",
          "action": "Check the mobile preview.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-EMPH-01",
      "url": "/rules/sub-emph-01/",
      "constructTypes": [
        "strong",
        "emphasis",
        "strikethrough",
        "inline_code"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Inline formatting survives rich paste.",
          "reason": "Emphasis, strike, and inline code survived in the tested forms.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-FM-01",
      "url": "/rules/sub-fm-01/",
      "constructTypes": [
        "front_matter"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Front matter is removed from the body.",
          "reason": "A generic renderer turned front matter into a stray heading and divider in the tested paste.",
          "action": "Set the post title and subtitle in Substack directly.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-FOOT-01",
      "url": "/rules/sub-foot-01/",
      "constructTypes": [
        "footnote"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Footnotes are moved to a checklist.",
          "reason": "Footnote syntax stayed literal and no native footnote node was created by paste.",
          "action": "Recreate each note with the native Footnote control.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-HEAD-01",
      "url": "/rules/sub-head-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Heading hierarchy survives rich paste.",
          "reason": "H1 through H6 survived the tested rich paste. The publication title stays a separate decision.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-HTML-01",
      "url": "/rules/sub-html-01/",
      "constructTypes": [
        "html_raw"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Raw HTML is removed; its visible text is kept.",
          "reason": "The tested paste removed details behavior and kept only the visible text.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-IMAGE-01",
      "url": "/rules/sub-image-01/",
      "constructTypes": [
        "image_remote"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Remote images are imported and rewritten by Substack.",
          "reason": "The tested paste showed Substack importing the remote asset onto its own CDN.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-IMAGE-02",
      "url": "/rules/sub-image-02/",
      "constructTypes": [
        "image_local"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Local images do not upload.",
          "reason": "A local relative image became IMAGE NOT FOUND in the tested paste.",
          "action": "Upload each local file in the Substack editor.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-LINK-01",
      "url": "/rules/sub-link-01/",
      "constructTypes": [
        "link_absolute",
        "link_mailto"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Absolute and mailto links survive.",
          "reason": "Both survived the tested rich paste. Preview behavior is outside this contract.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-LINK-02",
      "url": "/rules/sub-link-02/",
      "constructTypes": [
        "link_relative",
        "link_local"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Relative and local links are not resolved.",
          "reason": "Substack rebound tested relative links onto its own publication path.",
          "action": "Add a base URL in Source context, or make each link absolute.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-LIST-01",
      "url": "/rules/sub-list-01/",
      "constructTypes": [
        "list"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Lists and nesting survive rich paste.",
          "reason": "Nested ordered and unordered lists survived the tested paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-MATH-01",
      "url": "/rules/sub-math-01/",
      "constructTypes": [
        "math_inline",
        "math_block"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Math is moved to a checklist.",
          "reason": "Dollar-delimited math stayed literal; the native LaTeX block cannot be written by clipboard.",
          "action": "Recreate each formula with the native LaTeX control.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-MERMAID-01",
      "url": "/rules/sub-mermaid-01/",
      "constructTypes": [
        "mermaid"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Mermaid stays as source code; no diagram renders.",
          "reason": "The source survived as a code block but did not render as a diagram.",
          "action": "Export the diagram as an image and keep a text summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-OBS-01",
      "url": "/rules/sub-obs-01/",
      "constructTypes": [
        "obsidian_wikilink",
        "obsidian_embed",
        "obsidian_callout",
        "obsidian_blockref"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Obsidian syntax is flattened to ordinary rich content.",
          "reason": "Wiki links and transclusions stayed literal and the callout degraded to a quote.",
          "action": "Check each flattened target still makes sense to a reader.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-QUOTE-01",
      "url": "/rules/sub-quote-01/",
      "constructTypes": [
        "blockquote",
        "divider"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Quotes and dividers survive.",
          "reason": "Both survived the tested rich-paste path.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-TABLE-01",
      "url": "/rules/sub-table-01/",
      "constructTypes": [
        "table_small"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Tables become accessible labeled rows.",
          "reason": "Rich paste removed all table structure and no native table control was visible.",
          "action": "Check the labeled rows read correctly, or add the table as an image.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-TABLE-02",
      "url": "/rules/sub-table-02/",
      "constructTypes": [
        "table_wide"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "A wide table needs a media plan, not flattened cells.",
          "reason": "Flattening a complex table silently would lose the relationships between cells.",
          "action": "Add the table as an image with a text summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "SUB-TASK-01",
      "url": "/rules/sub-task-01/",
      "constructTypes": [
        "task_item"
      ],
      "applications": [
        {
          "destination": "substack",
          "surface": "Substack web post editor",
          "mode": "Rich HTML clipboard",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Task state becomes Done: or To do:.",
          "reason": "Rich paste lost checkbox state in the tested editor.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/substack/"
        }
      ]
    },
    {
      "id": "WP-ANCHOR-01",
      "url": "/rules/wp-anchor-01/",
      "constructTypes": [
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "In-page anchor links will not resolve.",
          "reason": "The tested editor kept the href but generated no matching heading IDs.",
          "action": "Add an HTML anchor to each target heading, or remove the link.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-CODE-01",
      "url": "/rules/wp-code-01/",
      "constructTypes": [
        "code_long_line"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Code is preserved, but a long unbroken line may overflow.",
          "reason": "Theme CSS controls overflow; tested long lines exceeded a 390-pixel viewport.",
          "action": "Check the post on a narrow screen.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-EMPH-01",
      "url": "/rules/wp-emph-01/",
      "constructTypes": [
        "strong",
        "emphasis",
        "strikethrough",
        "inline_code"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Inline formatting is preserved.",
          "reason": "Ordinary emphasis, strike, and inline code converted in the tested paste.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-FM-01",
      "url": "/rules/wp-fm-01/",
      "constructTypes": [
        "front_matter"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Front matter is removed from the body.",
          "reason": "Pasted front matter became separators and a stray paragraph in the tested editor.",
          "action": "Copy title, excerpt, slug, tags, and categories into the post fields yourself.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-FOOT-01",
      "url": "/rules/wp-foot-01/",
      "constructTypes": [
        "footnote"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Footnotes are moved to a checklist for Gutenberg paste.",
          "reason": "Gutenberg left footnote syntax literal. The WordPress.com Markdown Block did render them.",
          "action": "Rebuild with the native Footnotes block, or use Markdown Block mode.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-HEAD-01",
      "url": "/rules/wp-head-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Heading levels are preserved.",
          "reason": "H1 through H6 became native heading blocks in both tested modes.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-HTML-01",
      "url": "/rules/wp-html-01/",
      "constructTypes": [
        "html_raw"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Raw HTML is removed; its visible text is kept.",
          "reason": "Gutenberg flattened the details structure and the Markdown Block escaped raw HTML.",
          "action": "Rebuild with a reviewed Details or Custom HTML block if you need the behavior.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-IMAGE-01",
      "url": "/rules/wp-image-01/",
      "constructTypes": [
        "image_local"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Local images do not upload.",
          "reason": "A local relative image became a broken image block in the tested editor.",
          "action": "Upload each file to the Media Library and re-point the block.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-IMAGE-02",
      "url": "/rules/wp-image-02/",
      "constructTypes": [
        "image_remote"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "Remote images are hotlinked, not imported.",
          "reason": "The tested paste linked the external file rather than creating a Media Library asset.",
          "action": "Import the file if you need to control licensing, privacy, or availability.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-LINK-01",
      "url": "/rules/wp-link-01/",
      "constructTypes": [
        "link_relative",
        "link_local"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Relative and local links are not resolved.",
          "reason": "Without a confirmed site base URL there is no safe way to know where these point.",
          "action": "Add a base URL in Source context, or fix each link in the editor.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-LIST-01",
      "url": "/rules/wp-list-01/",
      "constructTypes": [
        "list"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Lists and nesting are preserved.",
          "reason": "Three tested nesting levels became native list blocks.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-MATH-01",
      "url": "/rules/wp-math-01/",
      "constructTypes": [
        "math_inline",
        "math_block"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Math is moved to a checklist.",
          "reason": "Both tested modes left the dollar delimiters as literal text.",
          "action": "Use a math block or an accessible rendered image.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-MERMAID-01",
      "url": "/rules/wp-mermaid-01/",
      "constructTypes": [
        "mermaid"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Mermaid stays as source code; no diagram renders.",
          "reason": "Both tested modes showed the fence as a code block.",
          "action": "Export the diagram as an image and keep a text summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-MODE-01",
      "url": "/rules/wp-mode-01/",
      "constructTypes": [],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Two WordPress modes exist: Gutenberg paste and the WordPress.com/Jetpack Markdown Block.",
          "reason": "Site capabilities differ. The Markdown Block needs that block installed and Markdown enabled.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-OBS-01",
      "url": "/rules/wp-obs-01/",
      "constructTypes": [
        "obsidian_wikilink",
        "obsidian_embed",
        "obsidian_callout",
        "obsidian_blockref"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Obsidian syntax is flattened to ordinary text.",
          "reason": "Wiki links, transclusion, callout markers, and block references stayed literal.",
          "action": "Check each flattened target still makes sense, and resolve any missing vault file.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-TABLE-01",
      "url": "/rules/wp-table-01/",
      "constructTypes": [
        "table_small"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Small tables become native tables.",
          "reason": "Both tested modes rendered the GFM table with header and body cells.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-TABLE-02",
      "url": "/rules/wp-table-02/",
      "constructTypes": [
        "table_wide"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "preserved",
          "severity": "review",
          "statement": "A wide table needs a narrow-screen check.",
          "reason": "Table behavior depends on the theme and viewport, which this tool cannot see.",
          "action": "Preview the post on a phone-width screen.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-TASK-01",
      "url": "/rules/wp-task-01/",
      "constructTypes": [
        "task_item"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "transformed",
          "severity": "review",
          "statement": "Task state becomes explicit words.",
          "reason": "Gutenberg dropped checkbox state and the Markdown Block showed literal markers.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "WP-TITLE-01",
      "url": "/rules/wp-title-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "wordpress",
          "surface": "WordPress.com desktop Block Editor",
          "mode": "Gutenberg paste",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "The post title is not filled by pasting.",
          "reason": "The tested paste left the title field empty and kept the H1 in the body.",
          "action": "Paste the title into the title field, then decide whether to keep the duplicate H1.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/wordpress/"
        }
      ]
    },
    {
      "id": "X-CODE-01",
      "url": "/rules/x-code-01/",
      "constructTypes": [
        "code",
        "inline_code"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Code loses its formatting and gets a Code: label.",
          "reason": "There is no code control in the composer and backticks stay literal.",
          "action": "Summarize long code or link to it instead.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-DIV-01",
      "url": "/rules/x-div-01/",
      "constructTypes": [
        "divider"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Dividers become a simple separator line.",
          "reason": "Markdown dividers have no equivalent in the composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-EMPH-01",
      "url": "/rules/x-emph-01/",
      "constructTypes": [
        "strong",
        "emphasis",
        "strikethrough"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Bold, italic, and strike are removed.",
          "reason": "The composer exposes no formatting controls, and Unicode look-alike fonts hurt screen readers and search.",
          "action": "Carry the emphasis with wording or placement instead.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-FOOT-01",
      "url": "/rules/x-foot-01/",
      "constructTypes": [
        "footnote"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Footnotes are moved to a checklist; the marker leaves the post text.",
          "reason": "The composer has no footnote control and the syntax stays literal, so the reference and its definition are lifted out of the payload instead of shipping broken markers.",
          "action": "Work each note into the post text, or reply with it, using the definitions listed below.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-HEAD-01",
      "url": "/rules/x-head-01/",
      "constructTypes": [
        "heading"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Heading markers are removed; the text becomes a standalone line.",
          "reason": "The composer has no heading control and left # markers literal.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-IMAGE-01",
      "url": "/rules/x-image-01/",
      "constructTypes": [
        "image_remote",
        "image_local"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Images do not transfer through a text copy.",
          "reason": "Markdown image syntax stayed literal and nothing was uploaded in the tested composer.",
          "action": "Attach each image in the composer using the alt text listed below.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-LIMIT-01",
      "url": "/rules/x-limit-01/",
      "constructTypes": [],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Each post is counted with X weighted rules, not string length.",
          "reason": "Emoji and CJK weigh 2 and a detected URL weighs 23, verified against the live composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-LINK-01",
      "url": "/rules/x-link-01/",
      "constructTypes": [
        "link_absolute",
        "link_mailto",
        "link_resolved"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Links become label: URL and weigh 23 characters each.",
          "reason": "A detected URL weighs 23 whatever its length. A preview card is never guaranteed.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-LINK-02",
      "url": "/rules/x-link-02/",
      "constructTypes": [
        "link_relative",
        "link_local",
        "link_anchor"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Relative, local, and in-page targets do not resolve in a post.",
          "reason": "A post is not a page of your site. Without a confirmed site base URL the raw path is pasted as ordinary text and points nowhere.",
          "action": "Add a base URL in Source context, or make each link absolute before copying.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-LIST-01",
      "url": "/rules/x-list-01/",
      "constructTypes": [
        "list",
        "task_item"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Lists become plain bullet or numbered lines; task state becomes words.",
          "reason": "Markdown list markers stayed as ordinary characters in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-PARA-01",
      "url": "/rules/x-para-01/",
      "constructTypes": [
        "hard_break"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "preserved",
          "severity": "info",
          "statement": "Paragraph spacing and hard breaks are preserved.",
          "reason": "Blank lines and line breaks survived in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-QUOTE-01",
      "url": "/rules/x-quote-01/",
      "constructTypes": [
        "blockquote"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Quotes get a Quote: label.",
          "reason": "Markdown quote markers stayed literal in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-SPECIAL-01",
      "url": "/rules/x-special-01/",
      "constructTypes": [
        "math_inline",
        "math_block",
        "mermaid",
        "html_raw",
        "obsidian_wikilink",
        "obsidian_embed",
        "obsidian_callout",
        "obsidian_blockref"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "Math, Mermaid, Obsidian syntax, and raw HTML are resolved to readable text or a media task.",
          "reason": "The composer has no control for any of these and the focused test did not isolate each one.",
          "action": "Check each one reads correctly, or attach it as an image.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-TABLE-01",
      "url": "/rules/x-table-01/",
      "constructTypes": [
        "table_small"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "degraded",
          "severity": "review",
          "statement": "Small tables become labeled rows, keeping every cell value.",
          "reason": "Pipes and separator rows stayed literal in the tested composer.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-TABLE-02",
      "url": "/rules/x-table-02/",
      "constructTypes": [
        "table_wide"
      ],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "manual_action",
          "severity": "action",
          "statement": "A wide table needs a summary and a media plan.",
          "reason": "Raw pipes are not readable output, and flattening a wide table loses cell relationships.",
          "action": "Attach the table as an image and write a one-line summary.",
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    },
    {
      "id": "X-THREAD-01",
      "url": "/rules/x-thread-01/",
      "constructTypes": [],
      "applications": [
        {
          "destination": "x",
          "surface": "X web post and thread composer",
          "mode": "Plain text",
          "outcome": "transformed",
          "severity": "info",
          "statement": "Longer drafts split into a thread at section, paragraph, list, then sentence boundaries.",
          "reason": "Each segment must stand on its own and stay inside the weighted limit.",
          "action": null,
          "confidence": "verified",
          "testDate": "2026-08-24",
          "evidence": "/evidence/x/"
        }
      ]
    }
  ]
}