Uh oh!
There was an error while loading. Please reload this page.
docs(deployment): retire the Vercel and ObjectQL-migration pages, re-point their inbound redirects, and fix the prose links into them - #8947
Conversation
Maintainer rulings 2026-08-15: the Vercel guide is no longer needed (Docker is the shipping path) and the `@objectql/core` port guide is 作废. Both pages are deleted, dropped from the section meta.json, and their inbound URLs re-pointed. `apps/docs/redirects.mjs` had both deleted pages as redirect DESTINATIONS. Next matches the table once per request, so those two entries are re-pointed at the final destination rather than supplemented — a chained entry would cost the old URL a second round trip. Two new exact entries cover the retired URLs themselves, placed before the wildcard catch-alls per the file's ordering rule. Mechanically required by the deletion, each printed by its own gate: - `.claude/workflows/docs-accuracy-audit.js` regenerated (check:docs-audit-scope) - `scripts/role-word-baseline.json` ratcheted down (check:role-word) `packages/objectql/README.md` linked into the deleted migration guide by relative path. It sits outside lychee's scan surface, so nothing would have caught it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gLCsJ1sDoJZZruDKMsHH3
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 1 package(s): 13 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 1 release-owned page(s) also reference the affected code. These are read-only:
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8904
Card 01 of the deployment-section restructure. Two pages come out of
content/docs/deployment/, per the maintainer rulings of 2026-08-15: 「https://objectstack.ai/docs/deployment/vercel已经不需要了。平台通常用 docker 发布。」and「migration-from-objectql作废」.Docs-only, no user-visible runtime change, so
skip-changeset.What changed
content/docs/deployment/vercel.mdxcontent/docs/deployment/migration-from-objectql.mdxcontent/docs/deployment/meta.jsoncontent/docs/deployment/self-hosting.mdxapps/docs/redirects.mjs.claude/workflows/docs-accuracy-audit.jsscripts/role-word-baseline.jsonpackages/objectql/README.mdself-hosting.mdxis otherwise untouched — #8911 owns the restructure of that file and remains open. Line 424 was a Related-list bullet and is a straight deletion; line 11 was mid-sentence, so the sentence was rewritten rather than left with a dangling clause:The redirect table — the part no gate checks
Both deleted pages were themselves redirect destinations.
apps/docs/redirects.mjshas exactly one consumer (apps/docs/next.config.mjs, which maps it throughtoNextRedirects()into Next'sredirects()); nothing inscripts/or.github/workflows/reads it, andCheck Documentation Linksrunslychee --offlineovercontent/**, rootREADME.mdandARCHITECTURE.mdonly. Deleting the destinations with the table untouched would have shipped two live URLs redirecting into a 404 with every gate green.Both existing entries are re-pointed (not supplemented), and the two retired URLs get their own exact entries, placed before the wildcard catch-alls per the file's documented ordering rule ("Exact entries come first; wildcard catch-alls for retired sections must stay last").
Verified by resolving every destination in the table against the tree the way Fumadocs routes them:
/docs/deployment/vercelcontent/docs/deployment/self-hosting.mdx/docs/deployment/migration-from-objectqlcontent/docs/deployment/index.mdx/docs/guides/deployment-vercelcontent/docs/deployment/self-hosting.mdx/docs/guides/objectql-migrationcontent/docs/deployment/index.mdxOne correction to the issue's mechanism. The issue says a supplementary entry "does not rescue" the older URLs. Measured against
apps/docs/next.config.mjsandapps/docs/middleware.ts: the config is a plainredirects()with no chain resolution, and the middleware is i18n-only (it never touches these paths), so Next matches the table once per request — correct. But the response is a 308 whoseLocationan HTTP client then re-requests, and that new request re-enters the table. So supplementing alone would have produced a two-hop chain, not a 404 — an extra round trip and a diluted redirect signal rather than a break. Re-pointing is still the right answer, and is what this PR does; the outcome the issue asked for (one hop, everywhere) holds either way.Why
migration-from-objectqllands on/docs/deploymentThe page documented a one-time
@objectql/coreto@objectstack/objectqlpackage port. It has no successor:/docs/protocol/objectql/was the one topical candidate I weighed and rejected, because those pages specify the ObjectQL protocol, not a package migration — landing a migration reader there promises a successor that does not exist./docs/deploymentkeeps the reader inside the section their URL named, and matches the table's established idiom for a retired page with no successor (/docs/guides/solutionsgoes to/docs). The substance a reader actually needs — the import rewrite — survives inpackages/objectql/README.md, next to the package itself.Three changes beyond the issue's file list, each named with its evidence
.claude/workflows/docs-accuracy-audit.js— a generated list of hand-written docs. Deleting the pages left two entries pointing at files that no longer exist, andpnpm check:docs-audit-scopefails on exactly that. Regenerated with the script's own remedy,node scripts/docs-audit/check-audit-scope.mjs --write. Diff is precisely the two removed lines.scripts/role-word-baseline.json—migration-from-objectql.mdxwas baselined at 2 occurrences, andcheck:role-wordfails when a baselined file vanishes ("ratchet DOWN"). Ratcheted with the remedy the gate itself prints,node scripts/check-role-word.mjs --update. That flag rewrites the whole baseline from the tree, so the diff was checked: exactly one removed line, nothing else re-baselined.packages/objectql/README.md— linked into the deleted guide by relative path (../../content/docs/deployment/migration-from-objectql.mdx). This is the same defect class as the card's prose links, and it sits outside lychee's scan surface, so nothing would have caught it. The pointer sentence is replaced with one that does not link out; the self-sufficient import diff immediately below it is untouched, so no information is lost.The first two are mechanically forced by the deletion and each is the remedy its own gate prints. The third was found by a repo-wide grep rather than the issue's
content/ apps/sweep.Gates
Run from the tree at
a34b9e8df, the final commit. The issue named four families;node scripts/pm/dispatch-gates.mjsre-derived against the real diff added four more, and all eight pass:check:doc-formula-expressionsis the one derived family needing a workspace install. Skipping it is evidence-backed rather than assumed: a repo-wide grep confirms no baseline or fixture underpackages/names either deleted page, so the gate cannot be keyed on them, and a docs deletion can only shrink its input. CI runs it regardless.Generated by Claude Code
Generated by Claude Code