Heading One
A representative GFM fixture proving Story 2.1 rendering.
Heading Two
Heading Three
This paragraph has bold text and italic text to prove inline emphasis.
Heading Four
Heading Five
Heading Six
Lists
An unordered list:
- First unordered item
- Second unordered item
- Third unordered item
An ordered list:
- First ordered item
- Second ordered item
- Third ordered item
Code
Here is some inline const answer = 42; code.
function greet(name) {
return `Hello, ${name}!`;
}
const aVeryLongUnbreakableIdentifierThatExceedsTheReadingMeasure = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
Quote
A top-level blockquote.
A nested blockquote inside it (AC5 nested left-rule).
Table
| Name | Role | Active |
|---|---|---|
| Alice | Author | yes |
| Bob | Reviewer | no |
GFM Extensions (AC6)
This text is struck through to prove strikethrough.
A task list:
- An unfinished task
- A finished task
A bare autolinked URL: https://themarkdownweb.com
Escaping (AC6)
A literal less-than < and ampersand & must be HTML-escaped.
Inline code with <tags> & ampersand must also escape its angle brackets and ampersand.
Links (AC: 2.3)
Internal .md links (rewritten to page routes at build time):
- A same-dir internal link: guide (->
/gear-guide) - A nested internal link: nested (->
/sub/page) - A cross-file fragment link: other heading (->
/gear-guide#heading-one) - A space-in-filename link: notes space (->
/my-notes) - A percent-encoded link: notes encoded (->
/my-notes) - A mixed-case link: Gear Guide cased (->
/gear-guide) - An index-collapse link: sub index (->
/sub) - A malformed-escape link: malformed (left unrewritten)
- An escape-the-vault link: escape (left unrewritten)
- An encoded leading-slash link: encoded leading slash (left unrewritten, never
//foo) - An encoded interior-slash link: encoded interior slash (left unrewritten, never split into
/a/b) - An encoded path-traversal link: encoded passwd (left unrewritten, never
//etc/passwd) - An empty-basename link: empty basename (left unrewritten, never
/) - A broken internal link: missing (->
/does-not-exist, lands on 404)
Pass-through links (left exactly as authored):
- A same-page anchor: jump to lists
- An external link: the site
- A mailto link: mail us
- A root-absolute link: already a route
- A non-
.mdasset link: a pdf
Media (AC: 2.4)
These media embeds are authored as raw HTML so the relative src/poster
values reach the build-time rehype media rewrite as plain HAST <img>/<video>/
<audio>/<source> element nodes (the same node set a markdown ![]() embed
lowers to), and so a missing-asset reference cannot hard-crash Astro’s image
pipeline. The rewrite is at the HAST stage, so it is syntax-agnostic.
The epic same-dir embed with alt text (AC1/AC4): 
An empty-alt decorative embed (AC4): 
A leading ./ embed collapses (AC2): 
An image carrying title/width/height that must survive the rewrite (AC4): 
Pass-through media, left exactly as authored (AC3):
F1 smuggling guards, left UNREWRITTEN (AC2 / rows 12-14):
A missing-asset embed still rewrites to its would-be served path and 404s, never crashing the build (AC6): 
A raw-HTML video with a relative poster and a nested relative <source> (AC5):
A raw-HTML audio with a relative src (AC5):
The AC1 epic example authored as LITERAL markdown ![]() (not raw HTML) — proves
the markdown image syntax flows through the same rewrite and bypasses Astro’s
astro:assets/_astro optimisation, emitting a plain served <img> (AC1):
