Skip to content

docs content: links to objectstack-ai/spec — a second stale repository name — survive in two published blog posts and in docs.site.json #12366

Description

@os-zhuang

Measurement

The repository has been renamed at least twice, and links to both former names survive in the tree. All three names resolve to the same repository:

gh api repos/objectstack-ai/framework --jq .id → 1136691870
gh api repos/objectstack-ai/spec --jq .id → 1136691870
gh api repos/objectstack-ai/objectstack --jq .id → 1136691870

framework is being fixed at its single producer in #12354 / PR #12364. spec is a separate, unrelated set of spellings, and it is the one this card is about.

Where objectstack-ai/spec still appears

Renders to visitors today:

filehits
content/blog/protocol-first-development.mdx2
content/blog/metadata-driven-architecture.mdx1

Inert config that spells a name nothing else spellscontent/docs.site.json:

  • line 40 — themeConfig.socials[].url
  • line 63 — page.repoBaseUrl

Both have zero runtime consumers today: the only references to repoBaseUrl anywhere in the repo are gate scripts naming the file as a path-hint fixture. That is precisely why it is worth a card rather than a shrug — inert config carrying a wrong value is what someone wires up later, having reasonably assumed it was maintained.

Also present, and deliberately out of this card's scope unless the maintainer wants them in:CONTRIBUTING.md (3), docs/notes/airtable-dashboard-analysis.mdx, and the link-reference block at the bottom of the root CHANGELOG.md.

Prior art — read this before acting

docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40 already flagged these links and declined to rewrite them. Whoever takes this card should read that entry and either follow its reasoning or say why it no longer applies — ⛔ do not re-litigate it from scratch, and do not silently overturn a recorded decision.

Why it matters

Every one of these costs a 301 today; none is broken. The reason to fix them is that a rename redirect is a signal that decays — GitHub keeps them only while the old name stays unclaimed — and because docs.site.json is a config file whose stale value is invisible until it is used.

Suggested scope

The two blog posts and docs.site.json. CONTRIBUTING.md, docs/notes/** and CHANGELOG.md are a maintainer call: CHANGELOG.md in particular is a historical record, and rewriting URLs inside past entries is not obviously right.

Source

Surfaced by the dev on #12354 while sweeping apps/docs/ for repository-name literals; the sweep was correctly held to apps/docs/ by its dispatch, and these hits are outside it. Every claim above was independently re-measured before filing.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions