Uh oh!
There was an error while loading. Please reload this page.
docs(deployment): rewrite the section index around the two lifecycles and re-order meta.json (#8913) - #8983
Merged
os-project-manager merged 2 commits intoAug 16, 2026
Conversation
The deployment index forked on venue ("Deployment Modes": local / standalone /
Cloud-managed). Readers arrive with a lifecycle in hand instead: they are either
operating the platform runtime (a Docker image on our release train) or shipping
a metadata app (a compiled artifact in their own catalog). The two are
independent — a deployment can move platform majors without touching its app,
and publish a dozen app versions without moving the platform.
The index now forks on that, and venue (Docker / Compose / Kubernetes / Cloud)
is a detail inside the platform-runtime half rather than a peer of it. The
local-vs-cloud environment-selection content survives as "how many environments
one runtime serves", pointing at the canonical resolution order instead of
carrying a second copy of it. meta.json is re-ordered to match: platform-runtime
pages, then app pages, then the shared reference (cli, environment-variables,
troubleshooting), which belong to neither.
Axis B readers are pointed at /docs/upgrading (a single page in the Build group,
not a directory) — the one cross-group link that makes the split navigable.
Also updated the pointers this rewrite invalidated: the inbound anchor
/docs/deployment#environment-variables (that section is gone; retargeted to the
self-hosting page that carries the same OS_SECRET_KEY guidance) and five "Deployment
Modes" link labels naming the page's old title and old structure.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobmThe latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-project-manager
marked this pull request as ready for review
August 16, 2026 04:02
os-project-manager
enabled auto-merge
August 16, 2026 04:03
Contributor
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31926481115 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 16, 2026
Uh oh!
There was an error while loading. Please reload this page.
… NDJSON note packages/cli/test/cloud-login-json-ndjson.e2e.test.ts pins the #6730 NDJSON exception in three places, one of which is this page: it asserts /NDJSON/, /one\s+per\s+line/i and the /docs/deployment/cli#os-cloud-login link all appear in content/docs/deployment/index.mdx, so a script author meeting `os cloud login` in the publish flow finds the declaration without going to the CLI reference. The index rewrite kept every fact — NDJSON named, the link kept, "parse line by line" kept — but spelled the middle one "one compact JSON document per line", which breaks the adjacency the second regex needs. The sentence now reads "emits NDJSON: compact JSON documents, one per line." Meaning unchanged, framing and placement unchanged, pin satisfied. The test lives in packages/cli, so a docs-only PR's affected-only CI never runs it; this surfaced in the merge queue's full suite. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobm
This was referenced Aug 16, 2026
os-project-manager
enabled auto-merge
August 16, 2026 04:51
Uh oh!
There was an error while loading. Please reload this page.
os-project-manager
deleted the
claude/issue-8913-deployment-index-lifecycles
branch
August 16, 2026 05:12
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#8913
Card 05 — the keystone of the deployment restructure. Per the card, every blocker was
verified merged on
origin/mainby content, not by merge-commit subject, before thefirst edit:
origin/mainvercel.mdx/ ObjectQL-migration page incontent/docs/deployment/(12 files remain)content/docs/upgrading.mdxexists, 206 lines; 0 files undercontent/docs/upgrading/(positive control: 12 undercontent/docs/deployment/)publish-and-preview.mdxis 223 lines and carries## The two ways in## Docker (official image) — the standard pathpresent inself-hosting.mdx; the## Option 1 / 2 / 3peer numbering is goneEvery page name, heading and anchor referenced below was read off that merged tree — the
point of landing this card last.
The rewrite
content/docs/deployment/index.mdxforked on venue ("Deployment Modes": local /standalone / Cloud-managed). It now forks on lifecycle, because that is what a reader
arrives with:
moved on our cadence. Venue (Docker, Compose, Kubernetes, bare Node.js under systemd,
ObjectStack Cloud) is a bullet list inside this half, not a peer of it.
dist/objectstack.json, versioned inyour catalog, shipped on your cadence.
The old content that was not wrong survives, relocated rather than deleted:
## Local runtime## Standalone artifact runtime## Cloud-managed deploymentpublish-and-preview(which now owns them)## Routing precedence/docs/api/environment-routing#resolution-order, which carries the identical six-step list and the control-plane exclusion. The index no longer keeps a second copy that can drift## Environment variables(partial table + two callouts)OS_SECRET_KEYcallout is dropped as a third copy —self-hosting.mdxcarries both halves of it already ("The minimum viable production environment" for the ephemeral-filesystem case, "Scaling beyond one node" for the multi-node refusal-to-boot case)## RelatedNew closing section, "Where the two meet" — the
engines.protocolhandshake, theartifact-source precedence (an operator input that selects an app version), and database
drift. These are the three seams where treating the two lifecycles as one goes wrong.
Title changed
Deployment ModestoDeployment Overview: "Modes" is the venue fork's ownvocabulary. The new name matches this repo's existing section-index convention (
API Overview,AI Overview).meta.jsonRe-ordered to match — platform pages, app pages, then shared reference:
Every assignment was checked against the merged page rather than the card's proposal, and
all ten hold.
cli.mdxstays reference by its own measurement — 1398 lines of which## Commandsspans 68–1283 — and is cross-linked from both halves in the "Sharedreference" table, split by which commands serve which lifecycle. It is not split, and it
did not drift into the platform half.
The cross-group link
/docs/upgrading— a single page in the Build group, not acontent/docs/upgrading/section. The card body's wording is stale here and the correction comment on the card is
right; measured again on the merged tree (0 files under that directory). The index links
its two halves individually:
/docs/upgrading#the-platform-runtimefrom the platform halfand
/docs/upgrading#the-metadata-appfrom the app half, which is the navigable form ofthe split. No directory was created.
Pointer fixes this rewrite forced (named, with evidence)
Five files beyond the two the card names. Each is a pointer that this change made wrong,
each is mechanical, and all are in the same gate family:
content/docs/deployment/environment-variables.mdx— itsOS_SECRET_KEYrow linked/docs/deployment#environment-variables, an anchor this rewrite deletes. Retargeted toself-hosting#the-minimum-viable-production-environment, which carries the sameguidance in the operator's context. Without this
check:doc-anchorsgoes red — it isthe only inbound anchor into the index in the whole corpus (grep over
docs/deployment#).content/docs/deployment/self-hosting.mdx(2 lines) — one link label, and one Relatedentry that described the deleted structure verbatim ("the map of local / standalone /
Cloud").
content/docs/deployment/single-project-mode.mdx(2 places) — one Related label, and asentence sending readers to the index "when you need to publish to an ObjectOS Cloud
control plane", which the index no longer explains; retargeted to
publish-and-previewand
environment-routing.content/docs/deployment/publish-and-preview.mdx(1 line) — Related label.content/docs/api/environment-routing.mdx(1 line) — Related label.After this,
grep -rn 'Deployment Modes' content/returns nothing.Deliberately not swept:
ui/setup-app.mdx,automation/hook-bodies.mdxandkernel/index.mdxlink the index under labels ("Cloud Deployment", "Deployment &Operations") that do not name the old title and are no more wrong after this change than
before it. Pre-existing looseness, not created here — recorded as #8984.
Where I disagree with the card
The card asks me to flag
single-project-modefolding intoself-hostingif the mergedstate strengthens the case. It weakens it. After #8911,
self-hosting.mdxis 436lines that are firmly about production infrastructure (Docker, Compose, Kubernetes,
systemd, TLS, health checks).
single-project-mode.mdxis about the default boot shape —pnpm dev,os dev,createStandaloneStack()— and its real subject after thisrestructure is environment selection: one active
OS_ENVIRONMENT_IDversus a host thatresolves one per request. Folding it into the production page would put local development
inside a production guide. If a follow-up is still wanted, the better shape is a merge with
the environment-routing framing, not with self-hosting. No issue filed — this is the
card's flag-it-in-the-PR path, and the disposition is the PM's.
Round 2 — merge-queue repair (
b40e5fefb)The first head was dequeued on CI_FAILURE:
packages/cli/test/cloud-login-json-ndjson.e2e.test.tspins the #6730 NDJSON exception in this page as well as in the CLI reference, asserting
/NDJSON/,/one\s+per\s+line/iand the/docs/deployment/cli#os-cloud-loginlink allappear in
content/docs/deployment/index.mdx.The rewrite kept every fact the pin protects — NDJSON named, the anchor kept, "parse line
by line" kept — but spelled the middle one "one compact JSON document per line", which
breaks the token adjacency the second regex needs. Repaired by rewording that one clause to
"emits NDJSON: compact JSON documents, one per line." Meaning, framing and placement
unchanged; the rewrite is not reverted.
Verified rather than eyeballed, from the committed state:
NDJSONone per lineHEAD~1restored into the tree (pre-fix wording)b40e5fefb(fix)The pre-fix leg was run by checking the old file out of the committed parent and restored
with
git checkout HEAD -- ..., then proven byte-identical(
git hash-object=git rev-parse HEAD:...=7b1fe377c,git status --porcelainempty).Swept for the rest of the class rather than fixing only the reported one: of the seven files
this PR changes,
content/docs/deployment/index.mdxis the only one any test reads —the other CLI docs pins target
cli.mdx, which this PR does not touch, and no testreferences
self-hosting,single-project-mode,publish-and-preview,environment-variables,environment-routingor the sectionmeta.json.Why PR-side CI could not see it, and the follow-up:
@objectstack/cli#testdeclares nocontent/docsinput glob, andpnpm check:cross-package-test-inputsnevertheless passes —the three CLI tests that read these pages seed their paths with
resolve(fileURLToPath(import.meta.url), '..'), a spelling the detector's published listdoes not carry, so the read is invisible to the gate and to turbo's affected set. Filed as
#8995 (blocked by #8946, which is editing the same declaration block).
Verification
Gate union re-run after the final commit, at
b40e5fefb, clean tree(
git status --porcelainempty), all exit 0:pnpm check:doc-anchors#fragmentlinks across 396 source files all resolve to a real headingpnpm check:role-wordpnpm check:docs-audit-scopepnpm check:nul-bytespnpm check:doc-authoringvitest run test/cloud-login-json-ndjson.e2e.test.ts -t 'documents the exception where the cloud login step is prescribed'Path-derived set (
node scripts/pm/dispatch-gates.mjsover the seven changed paths) ischeck:docs-audit-scope+check:role-word;check:doc-anchors,check:nul-bytesandcheck:doc-authoringwere added on top because this change adds cross-page anchor linksand touches only hand-written docs. The CLI pin is not derivable from either source — it
lives inside a test file's
readFileSync, which is what #8995 is about.Additionally, all six changed
.mdxfiles were compiled through@mdx-js/mdx+remark-gfm(the pipelinefumadocs-mdxuses) at the same commit — all six compile.Anchors were computed with the workspace's own
github-slugger, the same packagefumadocs-coreimports, before being written.Docs-only: no changeset,
skip-changesetapplied.Generated by Claude Code