Uh oh!
There was an error while loading. Please reload this page.
fix(create-objectstack): converge blank template docs links on the canonical host - #10992
Conversation
…nonical host The scaffolded blank template's README.md linked docs.objectstack.ai (an accepted-but-unratified alias) in three places, while the root README.md already used the ruled canonical origin, https://objectstack.ai. One `npm create objectstack@latest` run therefore handed the newcomer two different documentation hostnames. Maintainer ruling, 2026-08-21: 「这个仓的文档站规范 URL 是 https://objectstack.ai」. scripts/check-published-readme-links.mjs's CANONICAL_DOCS_ORIGIN prescribes the same origin, and #10659/#10935 already converged the docs-site build config and the runtime-emitted docsUrl strings onto it — 02b3b07 explicitly deferred the create-objectstack templates to this issue (#10321). Fixes#10321 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019bmVFqoQPq63zhKrxdYG1r
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 1 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32549385592 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Fixes#10321
Re-run census at head (not inherited from the filing-time scaffold run)
Root
README.md(unchanged by this PR — already canonical):https://objectstack.aihttps://objectstack.aihttps://objectstack.ai(x2, one link + one plain mention)packages/create-objectstack/src/templates/blank/README.md, before this PR:https://docs.objectstack.aihttps://docs.objectstack.aihttps://docs.objectstack.aiSo at head the inconsistency was still live, just narrower than the filing-time census: root
README.mdhad already converged onobjectstack.ai(via #10659/#10935), but the blank scaffold template still shipped threedocs.objectstack.ailinks — meaning a singlenpm create objectstack@latestrun handed the user two different documentation hostnames (the root README a newcomer reads before scaffolding, plus the generated project's own README).The
objectstack.comoccurrence from the original filing (templates/AGENTS.md:99) and two moredocs.objectstack.aioccurrences (templates/blank/Dockerfile:10,templates/blank/docker-compose.yml:7) are still onmain, but sit outside this card's dispatched file surface (rootREADME.md+templates/blank/README.mdonly) and outside every other #10264-family card (#10319/#10320/#10322/#10324/#10325 — checked, none touch those three files). Filed separately as #10990 so triage can route it; not fixed here.Which hostname is canonical — read, not invented
https://objectstack.ai(bare apex, nodocs./www./protocol.prefix). Three independent, already-authoritative sources agree:7bf3fb78cdand02b3b07394): 「这个仓的文档站规范 URL 是 https://objectstack.ai」CANONICAL_DOCS_ORIGIN = 'https://objectstack.ai'inscripts/check-published-readme-links.mjs(docs.objectstack.aiis in itsDOCS_HOSTSas an accepted-for-reading alias, never prescribed).content/docs.site.json's ownmeta.url:"https://objectstack.ai"— the docs site's declared origin for itself.Commit
02b3b07394("converge runtime docs URLs on the canonical host") explicitly named "the create-objectstack templates (#10321)" as a deliberate survivor of its repo-wide sweep — i.e. this card was already understood to be the owner of this exact convergence.docs.objectstack.aiis not a dead link — per02b3b07394's own verified claim it "redirects tohttps://objectstack.aipath-preservingly" — but it is the unratified spelling, and this PR moves the template off it onto the prescribed form.Fix
packages/create-objectstack/src/templates/blank/README.md: the threehttps://docs.objectstack.ai/docs/...links (Connect an MCP Client, Automation → Flows, Self-Hosted Deployment) →https://objectstack.ai/docs/.... RootREADME.mdneeded no change — verified already canonical.Link verification
All three linked routes exist under
content/docs:content/docs/ai/connect-mcp.mdx,content/docs/automation/flows.mdx,content/docs/deployment/self-hosting.mdx.Direct live HTTP verification (
curl,WebFetch) was attempted and blocked — this environment's egress proxy blocksobjectstack.aianddocs.objectstack.aioutright (EGRESS_BLOCKED), the same limitation the original audit hit. In its place:pnpm check:published-readme-links— which resolves docs-site destinations against the real Fumadocs route table viacheck-docs-redirects'spageCandidates(assertion 3) rather than a live HTTP request — ran clean (see Tests).packages/create-objectstack/src/templates/blank/README.mdis not itself in that gate's population (it's a template resource, not a package's own published README per itsfilesarray), so its 60-file/173-link census is unaffected either way; it is reported here as corroborating, not as coverage of this diff.Reverse verification
N/A — prose-only hostname substitution, not an ablation. What was run instead: the before/after census above, and the gate run below.
Tests / gates
Gate union derived at final commit
fc775c14e7vianode scripts/pm/dispatch-gates.mjs --changed. Matched families, all run through the shared verify lock, all green:pnpm check:published-readme-links— self-test pass;✓ check:published-readme-links — 173 outbound link(s) across 60 published markdown file(s): 0 root-relative, 0 non-canonical origin(s), 27 docs-site page(s) resolved (0 via redirect), 1 anchor(s) verified, 101/101 relative target(s) found in the tree.pnpm check:template-version-sync—✓ sync-template-versions --self-test: 40 assertions ...pnpm check:slot-lookup—✓ slot-lookup ratchet holds: 107 unswept site(s) in 25 file(s), none newpnpm check:objectui-changeset—✓ objectui-changeset-digest --self-test: all checks passed/✓ objectui-range --self-test: all checks passedpnpm check:changeset-gate-self-tests— all three self-tests pass;✓ check-adr-0087-registration: this PR adds no declared-breaking changeset (1 non-breaking changeset(s) seen).node scripts/check-adr-0087-registration.mjs—✓ This diff introduces no major bump./✓ No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added).node scripts/check-changeset-no-major.mjs,node scripts/check-empty-changeset.mjs— both green (output above)node scripts/check-ci-filter-parity.mjs—OK: all 82 declared cross-package glob(s) ... coverednode scripts/check-plugin-teardown-shape.mjs—✓ ... 0 known-unreached, SHRINK-ONLY, baseline fully burned downnode scripts/docs-audit/check-affected-docs.mjs—✓ affected-docs self-test: 339 cases pass.pnpm check:test-source-alias—check-test-source-alias OK — 72 packages with tests scanned; 61 registered as still resolving a workspace dep through dist/; 45 published subpath(s) resolved through every alias table.pnpm check:type-source-resolution—check-type-source-resolution OK — 76 packages with a tsconfig.json scanned; 51 registered as still resolving a workspace dep's types through dist/.Check Documentation Links(thecheck-links.ymllychee job named in the dispatch): its glob iscontent/**/*.md,content/**/*.mdx, rootREADME.md,ARCHITECTURE.md— it does not scanpackages/**/README.mdat all, so this diff's only changed file is outside its population; it also runs--offline, so it excludes everyhttps://link rather than resolving it. Not run locally (advisory lane,lycheebinary unavailable in this container); its population does not cover this PR's diff either way.No test/typecheck run: this is a prose-only markdown change with no code, no exports, no build surface touched.
Changeset
.changeset/converge-blank-template-docs-host.md— patch,create-objectstack.Generated by Claude Code