Skip to content

fix(create-objectstack): converge blank template docs links on the canonical host - #10992

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-10321-scaffold-doc-hostnames
Aug 22, 2026
Merged

fix(create-objectstack): converge blank template docs links on the canonical host#10992
os-zhuang merged 1 commit into
mainfrom
claude/issue-10321-scaffold-doc-hostnames

Conversation

@os-elon

@os-elonos-elon commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Fixes#10321

Re-run census at head (not inherited from the filing-time scaffold run)

Root README.md (unchanged by this PR — already canonical):

LineHost
174https://objectstack.ai
203https://objectstack.ai
386https://objectstack.ai (x2, one link + one plain mention)

packages/create-objectstack/src/templates/blank/README.md, before this PR:

LineHost
56https://docs.objectstack.ai
87https://docs.objectstack.ai
125https://docs.objectstack.ai

So at head the inconsistency was still live, just narrower than the filing-time census: root README.md had already converged on objectstack.ai (via #10659/#10935), but the blank scaffold template still shipped three docs.objectstack.ai links — meaning a single npm create objectstack@latest run handed the user two different documentation hostnames (the root README a newcomer reads before scaffolding, plus the generated project's own README).

The objectstack.com occurrence from the original filing (templates/AGENTS.md:99) and two more docs.objectstack.ai occurrences (templates/blank/Dockerfile:10, templates/blank/docker-compose.yml:7) are still on main, but sit outside this card's dispatched file surface (root README.md + templates/blank/README.md only) 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, no docs./www./protocol. prefix). Three independent, already-authoritative sources agree:

  1. Maintainer ruling, 2026-08-21 (quoted verbatim in commits 7bf3fb78cd and 02b3b07394): 「这个仓的文档站规范 URL 是 https://objectstack.ai」
  2. The enforced gate: CANONICAL_DOCS_ORIGIN = 'https://objectstack.ai' in scripts/check-published-readme-links.mjs (docs.objectstack.ai is in its DOCS_HOSTS as an accepted-for-reading alias, never prescribed).
  3. content/docs.site.json's own meta.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.ai is not a dead link — per 02b3b07394's own verified claim it "redirects to https://objectstack.ai path-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 three https://docs.objectstack.ai/docs/... links (Connect an MCP Client, Automation → Flows, Self-Hosted Deployment) → https://objectstack.ai/docs/.... Root README.md needed 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 blocks objectstack.ai and docs.objectstack.ai outright (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 via check-docs-redirects's pageCandidates (assertion 3) rather than a live HTTP request — ran clean (see Tests). packages/create-objectstack/src/templates/blank/README.md is not itself in that gate's population (it's a template resource, not a package's own published README per its files array), 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 fc775c14e7 via node 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 new
  • pnpm check:objectui-changeset✓ objectui-changeset-digest --self-test: all checks passed / ✓ objectui-range --self-test: all checks passed
  • pnpm 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.mjsOK: all 82 declared cross-package glob(s) ... covered
  • node scripts/check-plugin-teardown-shape.mjs✓ ... 0 known-unreached, SHRINK-ONLY, baseline fully burned down
  • node scripts/docs-audit/check-affected-docs.mjs✓ affected-docs self-test: 339 cases pass.
  • pnpm check:test-source-aliascheck-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-resolutioncheck-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 (the check-links.yml lychee job named in the dispatch): its glob is content/**/*.md, content/**/*.mdx, root README.md, ARCHITECTURE.md — it does not scan packages/**/README.md at all, so this diff's only changed file is outside its population; it also runs --offline, so it excludes every https:// link rather than resolving it. Not run locally (advisory lane, lychee binary 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • 1 changed file(s) yielded no anchor (packages/create-objectstack/src/templates/blank/README.md) — pages documenting those are invisible to this run

Coarse fallback — 1 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 047ac86ee902f64f67b5fe5a011ef4f5e63581a8packageMentionDocs.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tooling labels Aug 22, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 22, 2026 03:34
@os-zhuang
os-zhuang added this pull request to the merge queueAug 22, 2026
Merged via the queue into main with commit e85182dAug 22, 2026
37 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10321-scaffold-doc-hostnames branch August 22, 2026 03:47
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 32549385592 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Console Pin Gate — 失败步骤: Build the Console SPA at the pinned objectui SHA

    ✗ Build failed in 5.88s
    

↳ 失败原因 是判读的关键:超时Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

跨 PR 相同签名(24h,按失败测试文件聚合):

  • ⚠️本次没有可用的聚合签名(日志里没有能解析出测试文件名的 FAIL 行)—— 这不是「没有同签名的其他 PR」,是这一轮没测到。跨 PR 聚合本次不可用,请手工比对其他 PR 的同类评论。
  • ⚠️ 24h 评论账本没读完(超过 5 页仍未读到窗口尽头),所以上面的「不同 PR 数」是下界,不是全量。

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 69 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

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

Labels

documentationImprovements or additions to documentationsize/stooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] One scaffold run writes three different documentation hostnames — objectstack.ai, objectstack.com, docs.objectstack.ai

3 participants

@os-elon@os-zhuang@claude