Mistakes Keystone can't catch
Keystone checks your document after Pandoc has read your Markdown into a document tree. A mistake that stops Pandoc from building an element in the first place leaves nothing for Keystone to inspect — so it passes through silently and leaks into your book. Knowing this boundary matters as much as knowing the checks.
Malformed fences
A fenced div needs three or more colons. Type two and it isn't a fence at all — Pandoc sees plain text, no element is created, and the line prints verbatim in your book:
:: vspace size="medium" ::
No warning, no error — the literal text :: vspace size="medium" :: appears on
the page. Keystone never saw a vspace. The rule this breaks — three-or-more
colons, flush left — is on
Markup syntax.
Unclosed spans
The same applies to a bracketed span you forget to close. Pandoc treats the stray
[ as ordinary text; no span is created, nothing is flagged:
Here is [an unclosed span with no closing bracket, so it stays literal.
The correct form — brackets closed, attributes attached with no gap — is on Markup syntax.
Dead cross-references
An internal link resolves only if a heading (or any element with an #id) actually
carries the id it points at. Aim one at an id nothing has — most often because a
heading's derived id isn't the one you typed — and Pandoc still builds a valid
link. It just leads nowhere in the finished book. No warning, no error:
See [the recap](#recap). ← no heading has the id `recap`
Both the remedy — pinning an explicit {#id} on the heading you link to — and the
GitHub id mismatch that trips this most often live on
Markup syntax.
The one that is caught
An unclosed div — an opened ::: with no close — is the
single structural slip Pandoc reports, with a line number. Every other
structural mistake is silent.
What fills the gap
Because these slip through, a few habits do the checking Keystone can't:
- Always close your fences and brackets — every
:::opener needs its closer; every[needs its]. - Pin
{#id}on headings you link to — so a cross-reference targets an id you chose, not one derived from the heading text. - Turn on strict mode before you publish — it turns the mistakes Keystone does catch as warnings into hard stops, so a clean strict build is a real signal.