Skip to content

docs(redirects): three entries in apps/docs/redirects.mjs point at pages that do not exist — live URLs 308 into a 404 #8948

Description

@os-zhuang

Found while working #8904 (retiring the Vercel and ObjectQL-migration pages). Pre-existing and unrelated to those two pages — not introduced by #8904's PR, and deliberately left untouched there to respect that card's scope ceiling.

The defect

Three entries in apps/docs/redirects.mjs have destinations with no page behind them. Each is a live URL that answers a permanent redirect (permanent: true, so 308) into a 404:

Source URL (still live)DestinationDestination page
/docs/guides/solutions/role-based-interfaces/docs/ui/role-based-interfacesmissing
/docs/guides/plugin-chatbot-integration/docs/ai/chatbot-integrationmissing
/docs/concepts/cloud-artifact-api/docs/deployment/cloud-artifact-apimissing

Verified against the tree at a8189aef4 by resolving every destination the way Fumadocs routes it (/docs/x to content/docs/x.mdx, .md, or /index.mdx). 92 entries checked, these 3 fail; nothing else in the table is dead or chained.

Why nothing caught it

apps/docs/redirects.mjs is checked by no gate at all. Its only consumer is apps/docs/next.config.mjs; nothing in scripts/ or .github/workflows/ reads it. Check Documentation Links runs lychee --offline over content/**, root README.md and ARCHITECTURE.md — the redirect table is outside that surface, so a destination can rot indefinitely with CI fully green. This is the same blind spot #8904 was raised to handle for its own two pages.

Likely causes, for whoever picks this up

  • role-based-interfacescontent/docs/ui/audience-based-interfaces.mdx exists. The page looks renamed (consistent with the direction check:role-word enforces) without its redirect being updated. Re-pointing at /docs/ui/audience-based-interfaces is the probable fix.
  • chatbot-integration — no near-match under content/docs/ai/. Needs a judgement call on the successor (/docs/ai is the neutral default).
  • cloud-artifact-api — no near-match under content/docs/deployment/. Same judgement call (/docs/deployment).

The first is mechanical; the other two need a destination decision, so this is not a pure chore.

Suggested scope

Fix the three destinations, and consider whether the table deserves a gate — a dependency-free resolver over docsRedirects is roughly the 30-line script used to find this, and would close the blind spot permanently rather than one rotted entry at a time.

⚠️ Serialization note for triage: this edits apps/docs/redirects.mjs, which PR #8947 (for #8904) also edits. Schedule after that merges to avoid a conflict on the same file.

Generated by Claude Code

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions