Uh oh!
There was an error while loading. Please reload this page.
docs: relabel the three /docs/deployment index links to the page's own title - #10480
Conversation
…n title
Three pages outside the deployment section linked the section index under
labels naming neither of its two lifecycles. The target page is titled
"Deployment Overview" and forks into "The platform runtime — you operate it"
and "Your metadata app — you build it".
- ui/setup-app.mdx and automation/hook-bodies.mdx said "Cloud Deployment".
The page is not cloud-specific; ObjectStack Cloud is one venue inside the
platform-runtime half. Both now use the page title plus a trailing clause
naming which half the reader is sent to.
- kernel/index.mdx used the section title ("Deployment & Operations", from
content/docs/deployment/meta.json) as the label for the page. Both strings
live in the nav, which is what made the mismatch hard to notice.
Labels only — no link target, heading or page structure changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wtos-zhuang
commented
Aug 21, 2026
PM review — ⭐ accepted. The census is what lifts this above a three-line edit.Reviewed against the diff. You read the target before relabelling, which was the one thing that could have gone quietly wrong. The page is Deployment Overview, forking into "The platform runtime — you operate it" and "Your metadata app — you build it", with Docker/Compose/K8s/Cloud as venues inside the first half. A label chosen without opening that page could easily have named a venue again and repeated the defect in new words. ⭐ And each replacement was fitted to its own clause rather than globally substituted — ⭐ The census changed what the card meansThe card presented three sites. You swept and found 9 links across 8 files — 3 defective, 1 examined and cleared, 5 already correct — and stated the conclusion plainly: "three was what the card noticed, not the count." The five correct ones all say "Deployment Overview", so the repo already had a convention and these three were the outliers, not the pioneers. Using ✅ Positive control before the zero-hit, as asked: the expression was made to return the three known instances first. And the sweep extended outside ⭐ The examined-and-cleared row is the judgement I'd have wanted
Same restraint on #10476: an adjacent wrong-looking label on the very same line you edited ( Verified
Nothing for you to change. Flipping ready and arming once the last check clears. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes: #8984
Three pages outside the deployment section linked the section index under labels naming neither of that index's two lifecycles. This is the relabel the card describes — labels only. No link target, heading, page structure or
meta.jsontitle was touched.The two lifecycles, read off the target page
/docs/deploymentresolves tocontent/docs/deployment/index.mdx, titledDeployment Overview. Its own##headings fork the section in two:ghcr.io/objectstack-ai/objectstack. Moved by moving the image tag and restarting. Docker, Compose, Kubernetes, bare Node.js and ObjectStack Cloud are venues inside this half — the page says so explicitly: "Where it runs … is a detail inside the first of those two, not a third thing alongside them."dist/objectstack.json, versioned by your own catalog. Reaches a running platform by catalog install or artifact-pinned boot.Both replacement labels are checkable against those headings, which is the point: the defect was labels chosen without reference to the target.
The three relabels, in their surrounding clause
1.
content/docs/ui/setup-app.mdx:125— a bullet in## Related, siblings have no trailing period:The old clause promised "how Setup behaves in cloud mode", which the index does not deliver — it has no Setup-specific content, and
cloudappears nowhere else in this page except one table cell. The new clause names the half and corrects the premise that cloud is a separate mode.2.
content/docs/automation/hook-bodies.mdx:346— a bullet in## See also, siblings do end with a period:"How artifacts travel" is squarely the metadata-app half — the index's "How the app reaches a running platform" table (catalog install vs artifact-pinned boot) is exactly what this reader wants.
3.
content/docs/kernel/index.mdx:46— mid-sentence in a prose**Neighbors:**bullet, so only the label changes; the clause "running the kernel in production" already tells the reader which half they are being sent to:Deployment & Operationsis the section title fromcontent/docs/deployment/meta.json; the page isDeployment Overview. Both strings live in the nav, which is what made this one hard to notice.Census: was it exactly three?
The card found three while doing something else and did not claim the census was exhaustive. It was swept.
Positive control first — before trusting any zero-hit, the expression was proven to find the three known instances:
Then the whole tree, with a pattern that matches the index itself and not its subpages —
/docs/deploymentnot followed by/, a word character, or-.The run used
grep -rnPwith a negative lookahead. GitHub's body sanitizer strips the exclamation mark out of that construct, so the literal cannot be carried in this text; the POSIX form below was verified to produce byte-identical output (9 lines each,diffclean) and is the one to copy:9 links across 8 files — 3 defective, 1 examined and cleared, 5 already correct. Nothing outside
content/links the index (the same expression over*.md,*.mdx,*.ts,*.tsx,*.jsonexcludingnode_modulesreturned nothing). There are no trailing-slash (/docs/deployment/) or fragment (/docs/deployment#…) forms.ui/setup-app.mdx:125Cloud Deploymentautomation/hook-bodies.mdx:346Cloud Deploymentkernel/index.mdx:46Deployment & Operationsapi/environment-routing.mdx:128Deployment Overviewindex.mdx:51Cardcomponent,title="Deployment & Operations"deployment/single-project-mode.mdx:113Deployment Overviewdeployment/self-hosting.mdx:14Deployment Overviewdeployment/self-hosting.mdx:436Deployment Overview+ a clause naming both lifecyclesdeployment/publish-and-preview.mdx:221Deployment OverviewWhy row 5 is not a fourth fix
content/docs/index.mdx:51is one card in the## Platform modulesgrid, and that grid uses section titles for section-root links throughout — including where they diverge from the landing page's title:Views & Apps→/docs/uiUI EngineAPI & SDK→/docs/apiAPI OverviewDeployment & Operations→/docs/deploymentDeployment OverviewChanging only the deployment card would break a deliberate, uniform convention across nine cards — and re-titling the grid is a restructure, not a relabel. Left as-is on purpose.
Out-of-scope finding, filed not fixed
The sweep turned up the same shape against a different target, on the very same line as fix 3:
[Plugins & Packages](/docs/plugins)labels a page whose own title isPlugin System. It is not fixed here — different link target, and whether it is even wrong depends on an unmade judgement (section reference vs page reference) that the grid convention above actively argues both ways on. Filed unassigned as #10476 with both readings laid out. Naming it explicitly so the untouched label on an edited line does not read as an oversight.Changeset: none, judged by publish surface
Checked rather than defaulted.
content/sits outside every workspace glob inpnpm-workspace.yaml(packages/*,packages/*/*,apps/*,examples/*); the only consumer isapps/docs, which is"private": trueand publishes nothing. These three files are not a published package surface, so this PR releases nothing and carries theskip-changesetlabel instead.Gates
All of the below were run after the final commit and measured at
6cdb7a9c10with a clean working tree.Gate families derived with
node scripts/pm/dispatch-gates.mjs(no paths passed — it derives its own change set from the merge base), re-derived at the final commit: the same 12 families, no additions. All green, pluscheck:nul-bytes.check:doc-anchors✅ check-doc-anchors: 256 internal #fragment link(s) across 400 source file(s) all resolve to a real headingcheck:docs-redirectscheck-docs-redirects: OK (apps/docs/redirects.mjs: 92 entries -- 89 page destination(s) resolved against content/docs …)check:runtime-services-index✓ check-runtime-services-index: 8 chapter page(s) vs meta.json "pages", 8 chapter-list bullet(s) and 8 kernel/index.mdx table row(s) … all enumerations agreecheck:docs-audit-scope✓ docs-accuracy-audit scope is in sync with content/docs/: 181 hand-written doc(s).check:role-wordcheck-role-word: OK, no new occurrences of the reserved word.check:published-readme-links✓ check:published-readme-links — 152 outbound link(s) across 60 published markdown file(s)check:cross-package-test-inputsnode scripts/check-cross-package-test-inputs.mjs)spec: check:liveness·check:empty-state·check:strictness-ledger·check:variant-docs✓— each echoed@objectstack/spec@17.1.0 check:…, so none was a zero-match--filterno-opcheck:nul-bytescheck-nul-bytes: OK (scanned 6141 text file(s) … no raw ASCII control bytes).lycheelink-checking runs in CI and is not reproducible locally; no link target changed, so no destination moved.Generated by Claude Code