Skip to content

Doxygen auto-links text inside inline code → unbalanced <tt> breaks docs build (eql-3.0.0-alpha.3) #384

Description

@coderdan

Summary

The docs build (cipherstash/docs) broke on eql-3.0.0-alpha.3 because the generated API.md contains an unbalanced <tt> tag:

./content/stack/reference/eql/index.mdx
2153: Expected a closing tag for `<tt>` before the end of `paragraph`
Turbopack build failed

Root cause

In src/v3/jsonb/operators.sql, the jsonb selector operator's @warning documents a cast:

--!   parameter (`$1`, the Proxy interface) or an explicit cast (`col -> 'sel'::text`).
--!   A bare untyped literal (`col -> 'sel'`) resolves to the NATIVE `jsonb -> text`

Doxygen auto-links the bare word text (it collides with a documented symbol) into a cross-reference — even inside inline code. The XML becomes:

<computeroutput>col -&gt; &apos;sel&apos;<ref refid="lints_8sql_...">text</ref></computeroutput>

i.e. a <ref> link nested inside <computeroutput>. When rendered to Markdown that surfaces as an unbalanced <tt>, and the :: is swallowed (the cast reads 'sel'text). MDX requires every tag to be balanced, so the whole docs deploy fails.

This is version-sensitive: doxygen 1.15.0 masks it, but the CI toolchain emits the broken <tt>. The trigger — the nested <ref> — is present regardless of version.

Fix

PR #: prefix the two text occurrences with Doxygen's % no-autolink marker (::%text, -> %text). Verified locally: the nested <ref> disappears and col -> 'sel'::text renders as clean, balanced inline code (the :: is preserved too).

Alternatives considered

  • AUTOLINK_SUPPORT = NO in the Doxyfile — a global root fix (the Markdown converter already flattens <ref> to plain text, so Markdown impact is minimal), but it removes cross-links from the HTML docs too. A bigger call for maintainers.
  • Converter guard (tasks/docs/generate/xml-to-markdown.py) to never emit a link inside inline code — more general but heavier.

Downstream mitigation

cipherstash/docs#52 makes the docs generator defensively strip <tt> so a malformed upstream doc can't take the build down again. That's a safety net; this issue is the actual source bug.

Metadata

Metadata

Assignees

Labels

EQLbugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions