Skip to content

📖🔧:point the handbook's cross-links at pages - #1874

Merged
openinf-commit-queue[bot] merged 1 commit into
livefrom
fix/handbook-cross-links
Aug 31, 2026
Merged

openinf-commit-queue[bot] merged 1 commit into
livefrom
fix/handbook-cross-links

Conversation

@DerekNonGeneric

@DerekNonGeneric DerekNonGeneric commented Aug 31, 2026 •

Copy link
Copy Markdown
Member

Six links in the style handbook are broken in production. Confirmed
against the live site:

/docs/handbook/style/colons/capitalization.md  404
/docs/handbook/style/capitalization/           200

They were written as ./capitalization.md — the file sitting beside
the source. On the built site a page is a directory, so a relative
.md target resolves under the page doing the linking and hits
nothing.

Affected: five definitions in colons.md, one in code-syntax.md.

Why not root-relative URLs

That was my first fix, and it fails the build. remark-validate-links
resolves every link against the filesystem, so /docs/handbook/style/ capitalization/ is looked for at ../../../../docs/handbook/style/ capitalization and reported missing — nps test goes red. The .md
form exists to satisfy that check, and it also keeps the handbook
readable on GitHub.

Absolute URLs satisfy both: the validator does not follow anything off
the disk, and the links stay correct whether the handbook is read on
the site or in the repository. It matches what the handbook already
does elsewhere — [docs-site]: https://open.inf.is.

The trade-off

A cross-reference followed from a deploy preview lands on the published
site rather than on the preview. Rewriting .md targets to URLs at
build time would avoid that and keep the source relative, but it needs
machinery that knows how a source path becomes a URL. Say the word and
I will build it instead — this fix is the small one.

Checked

  • nps test — all verify tasks pass, verify-md included.
  • Every cross-reference resolves to a built page and its anchor
    exists in that page's HTML; all 7 confirmed.
  • A scan of all internal links across the built site reports none
    broken, down from six.

Summary by CodeRabbit

  • Documentation
    • Updated handbook links to use absolute documentation URLs.
    • Fixed references for explaining placeholders and six links in the colons style guide.
    • Improved link reliability when navigating documentation.

Six link definitions in the style handbook named the file beside them,
`./capitalization.md` and the like. On the built site a page is a
directory, so those resolved under the page doing the linking --
`/docs/handbook/style/colons/capitalization.md` -- and returned 404 in
production. Every one of them was broken for a reader.

They were written that way for a reason: `remark-validate-links`
resolves a link against the filesystem, so a site URL fails the check
that a neighboring file passes. Absolute URLs satisfy both, since the
validator does not follow anything off the disk, and they stay correct
when the handbook is read on GitHub rather than on the site.

The cost is that a link followed from a deploy preview lands on the
published site instead of the preview. Rewriting these at build time
would avoid that, at the price of machinery that has to know how a
source path becomes a URL.

Signed-off-by: Derek Lewis <DerekNonGeneric@inf.is>
Assisted-by: Claude-Code:claude-opus-5
@netlify

netlify Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for gh-pages-openinf ready!

Name Link
🔨 Latest commit 0119cad
🔍 Latest deploy log https://app.netlify.com/projects/gh-pages-openinf/deploys/6a95e079eaf05c00089012f4
😎 Deploy Preview https://deploy-preview-1874--gh-pages-openinf.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 0538a5f7-0bd6-42a5-a935-f89aef88f649

📥 Commits

Reviewing files that changed from the base of the PR and between 27ebbcb and 0119cad.

📒 Files selected for processing (2)
  • collections/_docs/handbook/style/code-syntax.md
  • collections/_docs/handbook/style/colons.md

Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

Two style handbook pages now use absolute documentation URLs for internal reference links.

Changes

Documentation link normalization

Layer / File(s) Summary
Absolute documentation links
collections/_docs/handbook/style/code-syntax.md, collections/_docs/handbook/style/colons.md
Updated seven relative Markdown links to absolute https://open.inf.is/docs/... URLs.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk: ⚪ Minimal · up to 0119c

This localized documentation change corrects broken handbook cross-links, and no actionable merge-blocking risk remains after normal checks and review.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: updating the handbook's cross-links to point to published pages. The emojis add minor noise but do not make the title unclear or unrelated.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (2 skipped: 2 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/handbook-cross-links

Warning

Some tools did not complete. Review the errors below.

🔧 markdownlint-cli2 (0.23.2)
collections/_docs/handbook/style/code-syntax.md

markdownlint-cli2 v0.23.2 (markdownlint v0.41.1)
Finding: :collections/_docs/handbook/style/code-syntax.md :collections/_docs/handbook/style/colons.md !_site/ !node_modules/ !.pnpm-store/ !**/COPYING.md !collections/_docs/code-of-conduct.md !collections/_docs/contributing.md !collections/_docs/security.md !collections/_docs/support.md !collections/_pages/vision.md
AggregateError: Unable to import module 'markdown-it-task-lists'.
at importModule (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:95:11)
at async Promise.all (index 0)
at async Promise.all (index 1)
at async createDirInfos (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:629:3)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:1065:5)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[errors]: [
Error: Cannot find module 'markdown-it-task-lists'
Require

... [truncated 1267 characters] ...

Resolution (node:internal/modules/esm/resolve:271:11)
at moduleResolve (node:internal/modules/esm/resolve:861:10)
at defaultResolve (node:internal/modules/esm/resolve:988:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:697:20)
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:714:38)
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:746:52)
at #resolve (node:internal/modules/esm/loader:679:17)
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:599:35)
at node:internal/modules/esm/loader:628:32
at TracingChannel.tracePromise (node:diagnostics_channel:362:14) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///markdown-it-task-lists'
}
]
}

collections/_docs/handbook/style/colons.md

markdownlint-cli2 v0.23.2 (markdownlint v0.41.1)
Finding: :collections/_docs/handbook/style/code-syntax.md :collections/_docs/handbook/style/colons.md !_site/ !node_modules/ !.pnpm-store/ !**/COPYING.md !collections/_docs/code-of-conduct.md !collections/_docs/contributing.md !collections/_docs/security.md !collections/_docs/support.md !collections/_pages/vision.md
AggregateError: Unable to import module 'markdown-it-task-lists'.
at importModule (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:95:11)
at async Promise.all (index 0)
at async Promise.all (index 1)
at async createDirInfos (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:629:3)
at async main (file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2.mjs:1065:5)
at async file:///usr/local/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs:14:22 {
[errors]: [
Error: Cannot find module 'markdown-it-task-lists'
Require

... [truncated 1267 characters] ...

Resolution (node:internal/modules/esm/resolve:271:11)
at moduleResolve (node:internal/modules/esm/resolve:861:10)
at defaultResolve (node:internal/modules/esm/resolve:988:11)
at #cachedDefaultResolve (node:internal/modules/esm/loader:697:20)
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:714:38)
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:746:52)
at #resolve (node:internal/modules/esm/loader:679:17)
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:599:35)
at node:internal/modules/esm/loader:628:32
at TracingChannel.tracePromise (node:diagnostics_channel:362:14) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///markdown-it-task-lists'
}
]
}


Comment @coderabbitai help to get the list of available commands.

@DerekNonGeneric DerekNonGeneric added the 🚀 Status: Commit Queue Land this pull request when its checks pass label Aug 31, 2026
@openinf-commit-queue
openinf-commit-queue Bot merged commit 07f13ec into live Aug 31, 2026
17 checks passed
@openinf-commit-queue openinf-commit-queue Bot removed the 🚀 Status: Commit Queue Land this pull request when its checks pass label Aug 31, 2026
@DerekNonGeneric
DerekNonGeneric deleted the fix/handbook-cross-links branch September 6, 2026 21:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant