Found while reproducing the full gate for PR #5748.
The internal-links (lychee --offline: relative links + anchors) step in .github/workflows/docs-quality.yml passes an explicit file list:
README.md AGENTS.md ASSURANCE.md CONTRIBUTING.md SECURITY.md CHANGELOG.md CLAUDE.md
'./skills/**/*.md' './docs/**/*.md' './crates/**/*.md' './book/**/*.md'
research/** is absent, even though research/ IS inside the markdownlint HARD scope. Design records cross-link each other heavily by relative path (the record in #5748 links odrl-pattern-scoped-targets-2026-07.md and solid-access-control-design.md, plus #section anchors), and a broken relative link or a stale #anchor in research/ ships unchecked. This is the same class of accidental hole that issue #5020 fixed for book/ -- that fix added ./book/**/*.md to BOTH the markdownlint globs and this lychee list; research/ got the markdownlint half only.
Note markdownlint's MD051 only validates fragments pointing WITHIN the same file, so it does not close this gap.
For #5748 specifically I verified the record's outbound links by hand and all of them resolve, so this is a latent gap, not a live break. Adding './research/**/*.md' to the lychee args may surface a pre-existing backlog across the 313 records, so treat it as its own change.
Out of scope for #5748.
🤖 Discovered by the SPARQ worker while implementing #3053. Out-of-scope for that PR; captured as follow-up.
Found while reproducing the full gate for PR #5748.
The
internal-links (lychee --offline: relative links + anchors)step in.github/workflows/docs-quality.ymlpasses an explicit file list:research/**is absent, even thoughresearch/IS inside the markdownlint HARD scope. Design records cross-link each other heavily by relative path (the record in #5748 linksodrl-pattern-scoped-targets-2026-07.mdandsolid-access-control-design.md, plus#sectionanchors), and a broken relative link or a stale#anchorinresearch/ships unchecked. This is the same class of accidental hole that issue #5020 fixed forbook/-- that fix added./book/**/*.mdto BOTH the markdownlint globs and this lychee list;research/got the markdownlint half only.Note markdownlint's MD051 only validates fragments pointing WITHIN the same file, so it does not close this gap.
For #5748 specifically I verified the record's outbound links by hand and all of them resolve, so this is a latent gap, not a live break. Adding
'./research/**/*.md'to the lychee args may surface a pre-existing backlog across the 313 records, so treat it as its own change.Out of scope for #5748.