Validate and update links (STF-557)#1712
Conversation
There was a problem hiding this comment.
Code Review
This pull request configures the Lychee link checker by adding a lychee.toml configuration file, ignoring .lycheecache in .gitignore, and updating several outdated or redirected URLs across the documentation files (CLAUDE.md, README.dev.md, and README.md). The review feedback suggests improving the Lychee configuration by removing 5xx status codes from the accepted list to avoid masking broken links, and adding a start anchor to the login URL pattern for consistency.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| # 429: Too Many Requests | ||
| # 500-599: Server errors (temporary issues shouldn't fail CI) | ||
| # 999: LinkedIn's custom status code | ||
| accept = ["100..=103", "200..=299", "403", "429", "500..=599", "999"] |
There was a problem hiding this comment.
Accepting all 5xx status codes (500..=599) globally can mask permanently broken links or server misconfigurations. While this prevents transient server issues from failing the CI, it is generally better to handle transient errors using lychee's retry mechanism or by excluding specific flaky domains, rather than ignoring all server errors. Consider removing 500..=599 from the accepted status codes list.
| accept = ["100..=103", "200..=299", "403", "429", "500..=599", "999"] | |
| accept = ["100..=103", "200..=299", "403", "429", "999"] |
There was a problem hiding this comment.
Keeping 500..=599 in accept, matching the dev-site and blog-site configs — transient upstream 5xx shouldn't fail link-checking CI.
— Claude (posted on Greg's behalf)
| '^https://sandbox\.maxmind\.com', | ||
| '^https://updates\.maxmind\.com', | ||
| '^https://www\.maxmind\.com/en/accounts/', | ||
| 'https://www\.maxmind\.com/en/account/login', |
There was a problem hiding this comment.
There was a problem hiding this comment.
These exclude entries are matched against full URLs, so a leading ^ is effectively a no-op here. Left as-is to match the dev-site/blog-site config style.
— Claude (posted on Greg's behalf)
c0bf356 to
b92e353
Compare
Adds a lychee configuration and a Links GitHub Actions workflow so that stale or redirecting links are caught automatically going forward. The checker runs on push, pull request, and weekly to catch external link rot. max_redirects is 0 so links that have moved are surfaced and can be updated to their canonical destination. The config is tuned for this Node/TypeScript repo: it scans Markdown, TypeScript sources, and package.json, and excludes generated output (node_modules, dist, build, coverage, docs) and the changelog. Part of STF-557. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Validated all links with lychee and updated those that redirected elsewhere to their canonical destinations: - dev.maxmind.com/geoip/docs/web-services -> .../web-services/ (trailing slash) - dev.maxmind.com/geoip/docs/databases -> .../databases/ (trailing slash) - support.maxmind.com/hc/en-us/requests/new -> support.maxmind.com/knowledge-base/submit-a-support-request - npmjs.com/package/@maxmind/geoip2-node -> www.npmjs.com/package/@maxmind/geoip2-node The package.json repository.url (github.com/...GeoIP2-node.git) 301s to the web UI but is the canonical npm git clone URL, so it is left unchanged and excluded in lychee.toml instead. Historical CHANGELOG.md entries are intentionally left unchanged. Part of STF-557. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Validated all links across Markdown, TypeScript sources, and package.json
with lychee and updated those that were out of
date or redirecting to a canonical destination.
CI setup
lychee.toml(Node/TS tuned: scans./**/*.md,./src/**/*.ts,./package.json;max_redirects = 0; excludes generated output andCHANGELOG.md)..github/workflows/links.yml(runs on push, PR, weekly schedule, andmanual dispatch).
.lycheecache.Link fixes
https://dev.maxmind.com/geoip/docs/databaseshttps://dev.maxmind.com/geoip/docs/databases/https://dev.maxmind.com/geoip/docs/web-serviceshttps://dev.maxmind.com/geoip/docs/web-services/https://support.maxmind.com/hc/en-us/requests/newhttps://support.maxmind.com/knowledge-base/submit-a-support-requesthttps://dev.maxmind.com/geoip/docs/web-serviceshttps://dev.maxmind.com/geoip/docs/web-services/https://npmjs.com/package/@maxmind/geoip2-nodehttps://www.npmjs.com/package/@maxmind/geoip2-nodeNot changed
package.jsonrepository.url(https://github.com/maxmind/GeoIP2-node.git)301s to the web UI but is the canonical npm git clone URL, so it is left as-is
and excluded in
lychee.toml.CHANGELOG.mdhistorical entries are intentionally left unchanged (excluded).Final lychee result:
25 Total, 22 OK, 0 Errors, 3 Excluded.Part of STF-557.
🤖 Generated with Claude Code