Uh oh!
There was an error while loading. Please reload this page.
docs: replace the retired runtime env contract on the nine pages outside Deploy - #63
Conversation
Nine pages outside `deploy/` still documented environment variables the shipped runtime does not read. `reference/environment-variables.mdx` was the worst of them, because a reference page is the one a reader treats as the contract — and since the Deploy rewrite landed it also *contradicted* a page shipping beside it, describing the cloud-posture variable as a switch for marketplace features while the deployment page states it is coupled to the licence mode with unsupported pairings refused at startup. Every variable in the rewrite was checked against the deployment bundle that ships with the release, and against the runtime and CLI source that reads it. What the evidence showed: - `OS_ARTIFACT_FILE`, `OS_BUSINESS_DB_URL`, `OS_CACHE_DIR` and `OS_PROJECT_ID` are read by nothing at all. A reader who sets one gets the boot they would have got with nothing set, and no error naming the mistake. - `OS_ARTIFACT_PATH` is retired on the runtime image and *refuses* a boot that carries a non-default value, naming its replacement. It was documented as a supported alternative on two pages. - `OS_CLOUD_API_KEY` is not a variable a self-hosted deployment sets. It is the service credential the hosted cloud injects into runtimes it operates, and the CLI's publishing bearer token. A self-hosted deployment authenticates with a token minted when it was bound. Three pages presented it as the deployment's cloud credential; the publishing page, which had it right, gains a note about the collision. - `OS_DATABASE_DRIVER` is NOT retired — it is the live driver override — so it is documented rather than removed. The reference page is rebuilt around the decisions a deployment actually makes: licence and cloud posture as a coupled pair, the walled-posture decisions that refuse to default, multi-node, and artifact selection. It carries a retired-name table so an inherited configuration file can be read and corrected. Variable names stay — they are the contract — but the values a customer copies stay in the release's deploy bundle, where they can be pinned to a version. Rows that could not be confirmed against any shipped artifact are not carried forward on a guess; they are reported for triage rather than restated. Stale translations of every rewritten page are deleted in six locales. Fumadocs falls back to English, measured here rather than assumed: the deleted siblings serve the new English body with localized chrome, while a page whose translation was kept still renders in its own language. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0137TnZzVmkSjXxoSVgPFS6S
os-zhuang
commented
Aug 18, 2026
Review: accept. Marked ready — ⛔ not merged, since merging publishes and this repo has no auto-merge.Verified against branch It contradicted the card in two places, and both corrections are rightI verified each against the shipped source rather than taking them:
Also confirmed independently: ⇒ A card is a hypothesis. Two of its seven claims were wrong, and the right outcome was to correct them on the record instead of implementing them as written. The live contradiction is resolvedThe reference page now says what the deployment page says:
Retired names were kept, not deleted — and that is betterThey moved into a Retired names table, framed as "listed here so that a configuration file you inherited can be read and corrected — not so they can be used", each with what to use instead. Deleting them would have left a reader holding Two pages beyond the card's list were included ( ⭐ How the locale fallback was proved — the transferable bitDeleting a translation is only safe if the site falls back to English, and
Same shape for Build 740/740 static pages, sidebar hrefs match Five open questions — all the same shape, all left for the maintainer
Two judgement calls I agree with: the changelog entry citing a variable name nothing ever read was restated as a capability rather than given an invented name; and Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Two current pages named the same boot shape differently, and the deploy bundle ships one environment template per shape — so a reader who has seen both pages could not tell whether "Config-authored" and "Shipped runtime" were one shape or two, while deploy/index.mdx warns against adapting one template into another. The card guessed deploy/index.mdx's "Shipped runtime" was canonical because it is the newer page. It is not the newer page, and the corpus does not use that name anywhere else: - Three pages carry this table, not two. configure/runtime.mdx:24 also names row one "Config-authored", so the corpus stands 2-1. - The commit order inverts the guess. deploy/index.mdx's table landed in #62 at 13:14; "Config-authored" was written into architecture.mdx and configure/runtime.mdx by #63 at 14:49 — after it, by a pass whose scope was explicitly "outside Deploy" and which reconciled contradictions with the Deploy rewrite. #69 then rewrote architecture.mdx at 17:40 and kept the name. "Shipped runtime" is the oldest of the three writes. - #63 checked its rows "against the deployment bundle that ships with the release, and against the runtime and CLI source that reads it" — the template-mapping authority, and it sits with "Config-authored". - "Artifact-pinned" is the framework's own term (packages/runtime/src/ artifact-reference.ts, packages/cli/src/commands/serve.ts). The paradigm is a past-participle describing where the app came from; "Shipped runtime" is a noun phrase naming the runtime, and is the odd one out even inside its own table. - "the shipped runtime" is already an established generic phrase for the product runtime — three uses upstream, plus environment-variables.mdx:158 ("Nothing in the shipped runtime reads OS_ARTIFACT_FILE"). Promoting it to a proper noun would make the boot-contract reference page use the phrase in two senses at once. Row three differed in substance too, and the evidence settles it rather than contradicting: air-gapped.mdx and the OS_COMPOSED_ARTIFACT_URL entry both state the two claims jointly — the composed shape is the hosted multi-organization shape AND is air-gap-licensed only, enforced at startup. deploy/index.mdx already carried both; architecture.mdx carried only the licence half, so it gains the purpose half and the link to where the refusal is stated. No headings are renamed, so no anchor moves: /docs/architecture#boot-modes still resolves. Fixes#71
Fixes#60
Nine pages outside
deploy/still documented environment variables the shippedruntime does not read.
reference/environment-variables.mdxwas the worst ofthem — a reference page is the one a reader treats as the contract — and since
the Deploy rewrite landed it also contradicted a page shipping beside it:
it described the cloud-posture variable as a switch for marketplace features,
while
deploy/air-gapped.mdxstates it is coupled to the licence mode withunsupported pairings refused at startup.
How each variable was judged
Every name was checked against the deployment bundle that ships with the
release, and against the runtime and CLI source that reads it. Nothing here is
reconstructed from surrounding prose.
OS_ARTIFACT_FILEOS_BUSINESS_DB_URLOS_CACHE_DIRoperate/backup.mdxOS_PROJECT_IDOS_ARTIFACT_PATHOS_CLOUD_API_KEYOS_DATABASE_DRIVEROS_CLOUD_URLkeeps its name and loses its description. It is not amarketplace switch: it decides whether the deployment has a control plane at
all, it is coupled to the licence mode, unset resolves to the public control
plane rather than to "off", and an ordinary licence paired with no control
plane is refused at startup.
What the reference page is now
Rebuilt around the decisions a deployment actually makes — licence and cloud
posture as a coupled pair, the walled-posture decisions that refuse to default,
multi-node, artifact selection — plus a retired-name table so an inherited
configuration file can be read and corrected rather than merely failing.
Variable names stay, because on a reference page the names are the contract.
The values a customer copies do not: those stay in the release's deploy bundle,
where they can be pinned to a version. That is the same boundary the Deploy
rewrite drew, and the reason neither page will rot.
Rows that could not be confirmed against any shipped artifact are not carried
forward on a guess. They are listed as open questions on the issue rather than
restated with a plausible-sounding description.
Pages changed
Seven from the card:
reference/environment-variables.mdx,architecture.mdx,operate/troubleshooting.mdx,operate/production.mdx,configure/runtime.mdx,build/packages.mdx,resources/changelog.mdx.Two found by sweeping the whole content tree rather than stopping at the list:
operate/backup.mdx(OS_CACHE_DIR) andreference/cli.mdx(
OS_ARTIFACT_PATHpresented as a working option).build/packages.mdxwas the one page where the card's premise did not hold —its use of the publishing credentials is correct, so the text is kept and gains
a note about the name collision with the deployment contract.
Two sites were judged historical record rather than current instruction, on
resources/changelog.mdx, and were corrected in place rather than deleted: onerestated without a name nothing ever read, one moved to past tense.
Stale translations of all nine pages are deleted in six locales (54 files).
Verification
Built and driven in a real browser at
e4efd5c, the branch head.npm run type-check— clean.npm run build— 740 static pages generated, no errors.headings and tables render, sidebar order matches
reference/meta.jsonexactly, and a deliberately bad path still 404s.
zh-Hanssibling serves the new English body with localized navigation chrome (17 CJK
characters, all of them sidebar and link text); the control — a page whose
translation was kept — still renders 1215 CJK characters of its own
translated body. Same result for a deleted
jasibling.One pre-existing finding, not caused by this branch: every default-locale
(unprefixed) page throws a React hydration error in the browser console,
including untouched pages and the Deploy pages. Prefixed-locale routes do not.
Filed separately.
Generated by Claude Code
Generated by Claude Code