Split out of #10638, which is now the deploy fix only. Independent of it: this is wrong whether or not the site deploys.
The maintainer's ruling
2026-08-21, verbatim: 「这个仓的文档站规范 URL 是 https://objectstack.ai」
What the tree says instead
| Where | Host it names | Why it matters |
|---|
content/docs.site.json:5 | https://protocol.objectstack.ai | The site's own declared canonical URL. Feeds page metadata, OG tags and whatever consumes meta.url. |
scripts/check-published-readme-links.mjs | docs.objectstack.ai | ⚠️ A gate. It classifies docs.objectstack.ai/docs/... as "the docs site", and its remedy text tells authors to write https://docs.objectstack.ai/docs/<path under content/docs, no extension>. Its self-tests pin that host too. |
docker/Dockerfile (2 comment lines) | docs.objectstack.ai | Points self-hosting readers at that host. |
| maintainer | objectstack.ai | the answer |
Three hosts, one tree. The loudest of them is the gate, because it does not merely record a host — it prescribes one to every author who trips it, and pins that prescription in its own self-test. Every published README link written under its guidance points at a host the maintainer has not ratified.
This is also a plausible contributor to how #10638 was found: a reader following the repo's own site config looks at protocol.objectstack.ai; a reader following the link gate looks at docs.objectstack.ai; the pages were on neither.
What to do
- Establish which hosts actually resolve and what they serve —
objectstack.ai/docs, protocol.objectstack.ai, docs.objectstack.ai. Measure, do not assume. One or more may be aliases or redirects to the same deployment, in which case this is a naming-consistency fix; if they are genuinely different deployments, that is a much larger finding and this card should stop and report rather than paper over it. - Converge every in-repo reference on the ruled canonical host.
check-published-readme-links.mjs is the load-bearing one: its classifier, its remedy strings, and its self-test assertions all encode the host. Change them together — a remedy that prescribes one host while the classifier accepts another is worse than the current state. If the non-canonical hosts must keep working, the classifier should accept them while the remedy prescribes the canonical one; say which you did and why.- Any absolute links already written into published READMEs under the old prescription need sweeping, or an explicit decision not to.
⛔ Non-goals
Split out of #10638, which is now the deploy fix only. Independent of it: this is wrong whether or not the site deploys.
The maintainer's ruling
2026-08-21, verbatim: 「这个仓的文档站规范 URL 是 https://objectstack.ai」
What the tree says instead
content/docs.site.json:5https://protocol.objectstack.aimeta.url.scripts/check-published-readme-links.mjsdocs.objectstack.aidocs.objectstack.ai/docs/...as "the docs site", and its remedy text tells authors to writehttps://docs.objectstack.ai/docs/<path under content/docs, no extension>. Its self-tests pin that host too.docker/Dockerfile(2 comment lines)docs.objectstack.aiobjectstack.aiThree hosts, one tree. The loudest of them is the gate, because it does not merely record a host — it prescribes one to every author who trips it, and pins that prescription in its own self-test. Every published README link written under its guidance points at a host the maintainer has not ratified.
This is also a plausible contributor to how #10638 was found: a reader following the repo's own site config looks at
protocol.objectstack.ai; a reader following the link gate looks atdocs.objectstack.ai; the pages were on neither.What to do
objectstack.ai/docs,protocol.objectstack.ai,docs.objectstack.ai. Measure, do not assume. One or more may be aliases or redirects to the same deployment, in which case this is a naming-consistency fix; if they are genuinely different deployments, that is a much larger finding and this card should stop and report rather than paper over it.check-published-readme-links.mjsis the load-bearing one: its classifier, its remedy strings, and its self-test assertions all encode the host. Change them together — a remedy that prescribes one host while the classifier accepts another is worse than the current state. If the non-canonical hosts must keep working, the classifier should accept them while the remedy prescribes the canonical one; say which you did and why.⛔ Non-goals
apps/docs/next.config.mjs— docs site is not deploying:output: 'standalone'+ Next 16 Turbopack build → ENOENT on next-server.js.nft.json #10638 owns it.