Uh oh!
There was an error while loading. Please reload this page.
fix(docs): point gitConfig at the current repository name - #12364
Merged
Conversation
The docs site declared `gitConfig.repo = 'framework'`, the pre-rename name. `objectstack-ai/framework` and `objectstack-ai/objectstack` return the same repository id (1136691870), so the old name is a rename redirect: every GitHub URL the site emitted resolved, but only after a 301. Three link types are built from this one constant -- the nav bar's GitHub link, the homepage hero's GitHub button, and each doc page's "edit this page" link -- and PR for the JSON-LD work emits `SoftwareSourceCode.codeRepository` from it too, where a stale name is a machine-readable identity claim rather than a link a human clicks through. Measured on a local production build: stale-name occurrences across all prerender artifacts went 3656 -> 0, and all three link types now answer HTTP/2 200 with no `location:` header where they previously answered HTTP/2 301. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 25, 2026
os-zhuang
marked this pull request as ready for review
August 25, 2026 20:17
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12354
Part of the docs-site indexability epic #12243.
What changed
One constant, in
apps/docs/lib/layout.shared.tsx:plus a comment recording why it must stay the current name.
The premise, reproduced
The issue's claim is that
frameworkis the pre-rename name. Reproduced rather than trusted:Same repository id, so
frameworkis a rename redirect and nothing was ever broken — every URL simply cost a 301. Fixing it at the producer corrects the nav link, the hero button, every per-page edit link, and (once #12355 lands)SoftwareSourceCode.codeRepositoryin the JSON-LD, in one edit. A local override in the JSON-LD would have been the consumer-side patch the contract-first directive rejects.How wide the sweep is, and how that was established
A grep for the bare word
frameworkis useless here — it is legitimate prose throughout the repo. The sweep used the URL shape and the constant's own name, overapps/docs/only.Pattern 1 — every
github.comoccurrence underapps/docs/, filesystem-level so untracked files are included:Full return, triaged:
lib/layout.shared.tsx:5—repo: 'framework'lib/layout.shared.tsx:4—user: 'objectstack-ai'lib/layout.shared.tsx:20—`https://github.com/${gitConfig.user}/${gitConfig.repo}`app/[lang]/page.tsx:195— same templateapp/[lang]/docs/[[...slug]]/page.tsx:31—…/blob/${gitConfig.branch}/content/docs/${page.path}vercel.json:3—"framework": "nextjs"app/[lang]/page.tsx:25,51,blog/[[...slug]]/page.tsx:201— "metadata framework for AI-written apps"app/[lang]/page.tsx:406— "7 framework adapters"Pattern 2 — every consumer of the constant, repo-wide (
git ls-files -z | xargs -0 grep -na 'gitConfig'): six lines, all in the three files above.Result: there is no independent repository-name literal anywhere under
apps/docs/. All three link types are pure concatenations of this one constant, so the sweep is exactly one line wide. That is the judgement the card asked for.Verification — local production build, not the live site
Production has not redeployed since ~16:55 (#12333), so the live site is evidence about a stale build only. Everything below is
pnpm --filter @objectstack/docs build+next start -p 3457in this worktree, measured before and after the edit.Rendered hrefs, extracted from the served HTML:
baseOptions().githubUrlgithub.com/objectstack-ai/frameworkgithub.com/objectstack-ai/objectstackapp/[lang]/page.tsx:195github.com/objectstack-ai/frameworkgithub.com/objectstack-ai/objectstackapp/[lang]/docs/[[...slug]]/page.tsx:31…/framework/blob/main/content/docs/ui/views.mdx…/objectstack/blob/main/content/docs/ui/views.mdxcurl -sIon each rendered URL — status codes, not just final URLs:The nav link and the hero button emit the same URL string, so they share one measurement; they were confirmed separately in the rendered HTML of
/docsand/respectively.Whole-site check — every prerender artifact (411
.html, 2048.rsc, 811.body), not just the three pages spot-checked:Repository names still present in rendered pages after the fix, all legitimate:
objectstack-ai/objectstack(1632),objectstack-ai/objectui,objectstack-ai/hotcrm,objectstack-ai/claude-plugin,mycompany/crm(a doc example), plus third-partygoogle/cel-spec,marcbachmann/cel-js,kofrasa/mingo,changesets/changesets. One apparentobjectstack-ai/objechit is an RSC streaming chunk boundary splitting a prose URL across two__next_f.pushcalls, not a truncated link.Gates
Families derived from the real change set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(the script reads the merge base itself), then re-run after the final commit, at06412954e, working tree clean:pnpm check:page-declaration-shapecheck-page-declaration-shape: OK — 34 page entries across 2189 sourcespnpm check:published-files✓ check:published-files — 69 publishable package(s)…pnpm check:test-source-aliascheck-test-source-alias OK — 72 packages with tests scannedpnpm check:type-source-resolutioncheck-type-source-resolution OK — 93 tsc program(s) across 77 packagespnpm check:nul-bytescheck-nul-bytes: OK (scanned 6836 text file(s)… no raw ASCII control bytes)pnpm --filter @objectstack/docs typecheckpnpm lint(full repo,eslint . --no-inline-config)VERDICT command-exit 0typecheckwas confirmed to actually cover the edited file rather than exclude it —tsc --noEmit --listFileslistsapps/docs/lib/layout.shared.tsx(1 hit), so the green is a measurement of this change and not a vacuous pass.pnpm lintfirst aborted with a V8 heap abort (exit 134) at--max-old-space-size=4096while thenext startserver still held memory; that was a resource failure, not a lint finding. Re-run at 8192 with the server stopped: clean, 40s.Declared narrowing — verification ran UNLOCKED. This host is macOS and ships no
flock, soscripts/pm/os-verify-lock.shran in its declared unlocked mode: the shared verify lock was never taken and nothing was serialized. Every run above carriesVERDICT … · UNLOCKED (declared). This is a declared narrowing, not a silent one.No changeset
Docs-site only — this publishes nothing, so there is no
.changeset/*.md. Theskip-changesetlabel is applied to this PR.Out of scope, for the PM to file
The sweep stopped at
apps/docs/as instructed. Two things it surfaced elsewhere, deliberately left untouched:content/docs.site.jsoncarries a second, independent repository-name constant —page.repoBaseUrlandthemeConfig.socials[].urlare bothhttps://github.com/objectstack-ai/spec.objectstack-ai/specis also a stale name:curl -sIreturnsHTTP/2 301withlocation: https://github.com/objectstack-ai/objectstack. It has zero runtime consumers (the only references torepoBaseUrlanywhere in the repo are gate scripts that mention the filename as a path-hint fixture), so it does not reach rendered output today — but it is a second constant spelling a third name, and inert config is exactly what someone wires up later.objectstack-ai/speclinks in published prose:content/blog/metadata-driven-architecture.mdx:586,content/blog/protocol-first-development.mdx:335,851(these two do render — the blog pages are the 4 renderedspechits above), plusCONTRIBUTING.md:38,57,440,docs/notes/airtable-dashboard-analysis.mdx:11, and the link-reference block at the bottom of the rootCHANGELOG.md.docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40already flagged these for human follow-up and declined to rewrite them.Neither was touched —
content/**,CONTRIBUTING.mdandCHANGELOG.mdare other cards' territory.Generated by Claude Code