Skip to content

docs(deployment): retire the Vercel and ObjectQL-migration pages, re-point their inbound redirects, and fix the prose links into them - #8947

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-8904-retire-vercel-objectql-docs
Aug 16, 2026
Merged

docs(deployment): retire the Vercel and ObjectQL-migration pages, re-point their inbound redirects, and fix the prose links into them#8947
os-zhuang merged 1 commit into
mainfrom
claude/issue-8904-retire-vercel-objectql-docs

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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

FileChange
content/docs/deployment/vercel.mdxdeleted (195 lines)
content/docs/deployment/migration-from-objectql.mdxdeleted (179 lines)
content/docs/deployment/meta.jsonboth entries dropped from the sidebar
content/docs/deployment/self-hosting.mdxthe two prose links into the Vercel page removed
apps/docs/redirects.mjstwo entries re-pointed, two new exact entries added
.claude/workflows/docs-accuracy-audit.jsregenerated (see below)
scripts/role-word-baseline.jsonratcheted down (see below)
packages/objectql/README.mddangling relative link into the deleted guide removed (see below)

self-hosting.mdx is 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:

before: It complements the platform-specific [Vercel guide](...) and assumes you have read [Deployment Modes](...).
after: It assumes you have read [Deployment Modes](...).

The redirect table — the part no gate checks

Both deleted pages were themselves redirect destinations. apps/docs/redirects.mjs has exactly one consumer (apps/docs/next.config.mjs, which maps it through toNextRedirects() into Next's redirects()); nothing in scripts/ or .github/workflows/ reads it, and Check Documentation Links runs lychee --offline over content/**, root README.md and ARCHITECTURE.md only. 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:

URLhopslands on
/docs/deployment/vercel1content/docs/deployment/self-hosting.mdx
/docs/deployment/migration-from-objectql1content/docs/deployment/index.mdx
/docs/guides/deployment-vercel1content/docs/deployment/self-hosting.mdx
/docs/guides/objectql-migration1content/docs/deployment/index.mdx

One correction to the issue's mechanism. The issue says a supplementary entry "does not rescue" the older URLs. Measured against apps/docs/next.config.mjs and apps/docs/middleware.ts: the config is a plain redirects() 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 whose Location an 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-objectql lands on /docs/deployment

The page documented a one-time @objectql/core to @objectstack/objectql package 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/deployment keeps the reader inside the section their URL named, and matches the table's established idiom for a retired page with no successor (/docs/guides/solutions goes to /docs). The substance a reader actually needs — the import rewrite — survives in packages/objectql/README.md, next to the package itself.

Three changes beyond the issue's file list, each named with its evidence

  1. .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, and pnpm check:docs-audit-scope fails 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.
  2. scripts/role-word-baseline.jsonmigration-from-objectql.mdx was baselined at 2 occurrences, and check:role-word fails 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.
  3. 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.mjs re-derived against the real diff added four more, and all eight pass:

check:docs-audit-scope OK scope in sync, 177 hand-written docs
check:release-notes OK every released major has a curated page
check:role-word OK 43 baselined files, no new occurrences
check:nul-bytes OK 5932 text files, no raw control bytes
check:doc-authoring OK 375 files clean
check:skill-frame-sync OK 12 self-test cases, 4 frame copies isomorphic
check-engine-split-ratio OK (matched only via the objectql README edit)
check:doc-formula-expressions not run — see below

check:doc-formula-expressions is 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 under packages/ 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

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
@vercel

vercelBot commented Aug 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 16, 2026 2:24am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/objectql.

13 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/metadata-lifecycle.mdx(via @objectstack/objectql)
  • content/docs/data-modeling/formulas.mdx(via packages/objectql)
  • content/docs/kernel/contracts/data-engine.mdx(via @objectstack/objectql)
  • content/docs/kernel/runtime-services/examples.mdx(via packages/objectql)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/objectql)
  • content/docs/kernel/services.mdx(via @objectstack/objectql)
  • content/docs/permissions/authentication.mdx(via @objectstack/objectql)
  • content/docs/permissions/system-context.mdx(via packages/objectql)
  • content/docs/plugins/index.mdx(via @objectstack/objectql)
  • content/docs/plugins/packages.mdx(via @objectstack/objectql)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/objectql)
  • content/docs/protocol/objectql/query-syntax.mdx(via packages/objectql)
  • content/docs/protocol/objectql/state-machine.mdx(via @objectstack/objectql)

1 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx(via @objectstack/objectql)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 16, 2026
@os-zhuangos-zhuang added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed documentation Improvements or additions to documentation labels Aug 16, 2026 — with Claude
@os-zhuang
os-zhuang marked this pull request as ready for review August 16, 2026 02:36
@os-zhuang
os-zhuang added this pull request to the merge queueAug 16, 2026
Merged via the queue into main with commit ac3b2e8Aug 16, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-8904-retire-vercel-objectql-docs branch August 16, 2026 02:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(deployment): retire the Vercel and ObjectQL-migration pages — delete, re-point their inbound redirects, and fix the prose links into them

2 participants

@os-zhuang@claude