# docshtmlcheck
`docshtmlcheck` fails CI when Markdown under `docs/` contains invalid inline
HTML that the documentation site's renderer silently drops or mangles. It runs
as `make lint/docs-html` (part of `make lint`).
## What it catches
- **Swallowed angle-bracket placeholders.** An unwrapped placeholder such as
`` or `__` is parsed as an unknown HTML tag and stripped from
the rendered page, so readers see broken text. Wrap placeholders in backticks
so they render as inline code (see
[`docs/about/contributing/documentation.md`](../../docs/about/contributing/documentation.md#placeholders-in-angle-brackets)).
This also covers CLI `--help` strings and Swagger annotations, whose text is
generated into `docs/reference/**`.
- **Void-element end tags** such as ``. Void elements like ` `, ``,
and `` have no end tag.
- **Capitalized or unregistered component tags** such as `` or `
`.
The docs renderer reads a capitalized tag as a component reference and drops
it unless the component is registered (only the lowercase ``
directive is). Any name outside the standard HTML5 element set is reported the
same way.
- **Unclosed container tags**, for example a `
` that is never
closed and leaks its wrapper over the rest of the page.
## How it works
Each file is parsed with [goldmark](https://github.com/yuin/goldmark) and only
raw-HTML nodes are inspected, so angle brackets inside fenced code blocks,
inline code spans, HTML comments, and `` / `` autolinks
are ignored. Each raw-HTML node is tokenized as a whole with
`golang.org/x/net/html`, so a tag whose attributes wrap across lines is not
torn in half. A tag whose raw name is capitalized is reported as a component
reference; otherwise any name outside the standard HTML5 element set (plus the
intentional `` renderer component, which is still balance-checked) is
reported. Inline SVG and MathML are intentionally **not** in the allowed set (no
docs page uses them); add the element to `allowedElements` in `main.go` if that
changes. A finding on a generated page under `docs/reference/**` also prints a
note pointing at the generator source, since edits to the generated file do not
persist.
## Limitations
A few gaps are accepted because no docs page hits them today:
- A placeholder whose name is itself a real HTML element (``, `