Repository source: docs/concepts/post_body_formatting.md
Post body formatting
Purpose: Let each post say whether its body is Markdown or plain text, so structured posts read well while text written without Markdown in mind is never reinterpreted.
Scenario: An author writes a changelog with headings and lists and posts it; the thread page shows it formatted and the Board preview shows its words without markup. The composer's Markdown box ticked itself as they typed; another author writing a log with stray asterisks sees it stay unticked (or unticks it) and the post shows exactly as typed. Posts written before the choice existed stay plain until their author, or an operator, picks "Show as Markdown" in the post's ··· menu, which signs a separate post format record; the latest such record decides. An operator can switch Markdown display off for the whole site with FORUM_POST_MARKDOWN_ENABLED; stored records do not change.
Sources: record header (Body-Format), post-safe renderer (source unavailable) (renderPost), preview text (source unavailable), body helper (source unavailable) ($renderPostBody, $plainText), syntax reference, renderer tests (source unavailable).
Boundary: Formatting is display only: signatures, record bytes, search and retraction are unchanged. Raw HTML never renders and post links are http(s) only. The public offline snapshot and scripts/publish_text.* do not yet carry the format, so their posts stay plain.
Automatic hashtags in bodies and labels in post metadata link to /tags/{tag}. Header and footer labels always remain linked. Operators can turn off body hashtag links with “Hashtag links in posts” in Feature flags (Site rendering), or override it with FORUM_TAG_LINKS_ENABLED=false. The flag defaults to on and does not affect tag assignment, authored Markdown links or stored content. Regenerate static pages and refresh saved offline reader shells after changing rendering flags.