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) Destination Destination page
/docs/guides/solutions/role-based-interfaces /docs/ui/role-based-interfaces missing
/docs/guides/plugin-chatbot-integration /docs/ai/chatbot-integration missing
/docs/concepts/cloud-artifact-api /docs/deployment/cloud-artifact-api missing

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions