ADR-0088 A backtick on the page is a render site, and the check found four in the record that fixed the last one
#Context
ADR-0087 found five separate causes of markdown reaching the docs site as characters and fixed all five, taking 67 affected ADR pages down to two legitimate text nodes. It named the obvious next step in its rejected options and deliberately did not take it:
Add a check that no visible text contains a backtick, and fix whatever it reports. The right end state and not this pass's, because it needs the two legitimate cases designed for rather than excluded by name.
This is that check. The reason it was worth waiting a pass for is the reason it is worth having: every check on this site passed while sixty-seven pages carried the defect, so a sixth cause would have shipped exactly as the first five did.
#The two legitimate cases are marked, not excluded
A backtick legitimately reaches the page in two places, and both are already inside code or pre:
- a fenced code block, which renders its contents verbatim;
- the table that dumps a JSON artifact key by key, which is a data view rather than prose — running markdown over arbitrary values would make an asterisk in a token name into emphasis.
The second was a raw <td> and is now a <code> cell. That is not a concession to the check: a value shown verbatim is verbatim, and marking it so is what the markup is for. It means the check reads the markup rather than a list of pages to forgive, and there is no exception list to go stale.
#Decision
docs:check-site gains a sixteenth check: no visible text node may contain a backtick. It strips script, style, pre and code, then reads what is left. It is static — no browser — so it costs a file read per route.
It is absolute. No allowlist, no pre-existing set, no route exemptions. A backtick that reaches a reader is a render site that inserted markdown-sourced prose raw, or a parser branch that flattened its own contents, and both are defects.
#What it found immediately, which is the case for it
Four failures, all in prose written in the previous two hours, three of them in the record that fixed the original defect.
Double-backtick spans are not supported and were being used. CommonMark escapes a code span containing a backtick by doubling the delimiter, and ADR-0087 used that to quote a code span verbatim. This renderer's code alternative is a single-backtick span, so the outer delimiters rendered as characters. Three instances, in the ADR, the playbook register and the STATUS narrative.
A code span containing a backtick is unrepresentable, and was written anyway. The same record quoted the paragraph-terminator regex, which contains a backtick, inside a single-backtick span. The span closed early and left the rest as text.
And one span was left unbalanced by an earlier automated edit — a scripted replacement whose pattern spanned two delimiters and swallowed the text between them. That edit was reverted and redone by hand; the check is what caught that it had gone wrong at all.
The renderer's limitation is now visible rather than silent, which is the outcome worth having. It supports single-backtick spans and no escape, exactly as §6 permits bold and forbids italic — a small renderer, stated. An author who writes a double-backtick span now fails a check instead of shipping a page with delimiters on it.
#Rejected options
Support double-backtick spans in the renderer. The general fix, and it is a change to the docs stack rather than to a defect. This prose needs to quote a code span verbatim about once per hundred records, and writing the sentence differently costs nothing; a second delimiter form costs a parser branch forever.
Exempt the JSON data table by route or class. One line, and it puts the check's own correctness in a list that nothing maintains. Marking the values as code says the same thing in the artifact rather than in the checker.
Make it a browser check alongside the overflow one. It needs no layout, so it runs in the static half and costs a read rather than a page load — 335 routes at no measurable time.
Report and do not fail. The shape the original docs:check-site exclusion had, and ADR-0086 removed it for the reason that applies here: a finding nobody has to act on is a finding nobody acts on.
#Consequences
docs:check-site is 16 checks, 0 failing, across 335 routes, and it is in CI — so the class ADR-0087 closed cannot reopen silently.
Four defects in this session's own prose were caught before they shipped, three of them inside the record documenting the defect they are instances of. That is the check paying for itself on the pass that added it.
One render site changed shape: the JSON key table's values are code.
No component, no token, no scene, no baseline. A check, a table cell, and four sentences rewritten.
#Measured
pnpm docs:check-sitewith the check added, before fixing what it found: 335 pages, 5 failing —/,/foundations,/getting-started,/support, and/governance/adr/0087-…*(darwin-arm64, this pass)*.- The causes: 3 double-backtick spans (ADR-0087, playbook row 087, STATUS narrative), 1 code span containing a backtick (ADR-0087), and 1 span left unbalanced by a scripted edit, reverted and redone by hand *(disk, this pass)*.
- After: 335 pages, 0 failing; 16 checks run, 0 failing *(darwin-arm64, this pass)*.
pnpm battery— the verdict this pass is measured by.