Uh oh!
There was an error while loading. Please reload this page.
fix(cloud-connection): move install-local outside the cloud ternary in README example - #8419
Conversation
…n README example
The README's air-gapped contract prose ("OS_CLOUD_URL=off disables every
remote call; air-gapped installs keep working via inline manifests handed
to install-local") was contradicted by its own code example a few lines
above: MarketplaceInstallLocalPlugin sat inside the cloudUrl ? ternary, so
OS_CLOUD_URL=off unmounted the very surface the prose promised keeps
working. cloud's apps/objectos-ee/objectstack.config.ts was a faithful
copy of this recipe -- the measured propagation vector for #8343's P1.
- MarketplaceInstallLocalPlugin moves outside the ternary, constructed
with `cloudUrl || 'off'` rather than the bare cloudUrl/''. The
constructor re-resolves whatever it is given through resolveCloudUrl(),
which reads '' as unset and substitutes the public DEFAULT_CLOUD_URL --
'off' is a real disable sentinel and is the value that actually
resolves to no cloud.
- RuntimeConfigPlugin now mounts unconditionally without a caveat: #8387
(merged) derives features.marketplace from what is actually mounted, so
a cloud-less runtime reports marketplace: false on its own.
- The ternary keeps only the genuinely cloud-gated halves
(MarketplaceProxyPlugin, CloudConnectionPlugin).
Fixes#8355
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDjThe latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 1 package(s): 1 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 1 release-owned page(s) also reference the affected code. These are read-only:
|
…ke its neighbor The corrected example now has two spellings of "no cloud" two lines apart with no stated reason: MarketplaceInstallLocalPlugin needs the explicit 'off' sentinel, RuntimeConfigPlugin keeps ''. Unexplained, a reader could "normalise" either direction -- including changing install-local back to '', which reproduces the exact defect this card exists to remove. Add a one-line comment: RuntimeConfigPlugin does not re-resolve controlPlaneUrl through resolveCloudUrl(), so '' means "stay on this origin" here rather than "unset" -- the asymmetry is deliberate, not a leftover copy-trap. Part of #8355 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDj
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8355
packages/cloud-connection/README.mdstated the air-gapped contract correctly in prose— "
OS_CLOUD_URL=offdisables every remote call; air-gapped installs keep working viainline manifests handed to
install-local" — while the code example a few lines abovedid the opposite:
MarketplaceInstallLocalPluginsat inside thecloudUrl ?ternary,so
OS_CLOUD_URL=offunmounted the very surface the prose promised keeps working.cloud'sapps/objectos-ee/objectstack.config.tswas a faithful copy of this recipe —the measured propagation vector for the #8343 P1 (a self-hosted deployment that could
not install a package by any route).
What changed
MarketplaceInstallLocalPluginmoves outside thecloudUrl ?ternary and isconstructed with
cloudUrl || 'off'instead of the barecloudUrl/''. The pluginre-resolves whatever it is handed through
resolveCloudUrl(), which treats''asunset and substitutes the public
DEFAULT_CLOUD_URL— so passing the empty stringthrough would have pointed an air-gapped runtime's catalog branch at the public cloud
instead of disabling it.
'off'is one of the documented disable sentinels(
packages/cloud-connection/src/cloud-url.ts) and is the value that actually resolvesto no cloud. This trap is a property of config resolution, untouched by fix(cloud-connection): derive features.marketplace from what is actually mounted (#8356) #8387.
RuntimeConfigPluginnow mounts unconditionally too (it already sat outside theternary). This was previously a second trap on its own — the plugin used to hardcode
features.marketplace: true, so mounting it on a cloud-less runtime would haveadvertised catalog browse it could not serve. fix(cloud-connection): derive features.marketplace from what is actually mounted (#8356) #8387 (merged) derives
features.marketplacefrom what is actually mounted on the kernel serving theresponse, so a cloud-less runtime now reports
marketplace: falseon its own withnothing for a host config to keep in sync. That trap is retired; the corrected example
reflects it.
MarketplaceProxyPluginandCloudConnectionPlugin, which are the control-planeclient and need a resolved URL as their precondition.
Each line carries an inline comment explaining why it is (or isn't) inside the ternary,
so the recipe doesn't get silently miscopied again.
Verification
Read (not modified) to confirm the corrected shape:
packages/cli/src/commands/serve.ts(Serve.planMarketplaceWiring,Serve.OFFLINE_CONTROL_PLANE) — the OS_CLOUD_URL=off unmounts the air-gapped install-local endpoint — the offline install path is gated on the cloud URL it is designed not to need #8343 reference implementation. It confirmed the'off'-sentinel trap and the disable-sentinel spelling; note serve.ts's ownofflineInstallLocalarm does not yet mountRuntimeConfigPlugin(a separate,already-filed and already-dispatched gap — a worktree for it exists alongside this
one), so this PR's example is the documented recipe the Suggested Shape asked for,
not a byte-for-byte mirror of serve.ts's current CLI wiring branches.
packages/cloud-connection/src/cloud-url.ts—resolveCloudUrl()'s disable sentinels(
off/none/local/disabled) and the''-means-unset behavior.packages/cloud-connection/src/runtime-config-plugin.ts— confirmedfeatures.marketplaceis derived viahasMarketplaceBrowseMount(rawApp)(fix(cloud-connection): derive features.marketplace from what is actually mounted (#8356) #8387,merged
631ddbf36), and thatRuntimeConfigPluginConfig.controlPlaneUrl: ''ishandled as an intentional "stay on this origin" case in this plugin specifically
(different from the two Marketplace plugins'
resolveCloudUrlre-resolution) — so theexisting
controlPlaneUrl: ''onRuntimeConfigPluginwas already correct and isunchanged.
MarketplaceProxyPluginConfig,MarketplaceInstallLocalPluginConfig,CloudConnectionPluginConfig,RuntimeConfigPluginConfig) — confirmedcontrolPlaneUrl/singleEnvironment/installLocalare the real prop names the example uses.packages/cloud-connection/src/as an untracked scratch file importing from./index.js, deleted before this diff was committed) withnpx tsc --noEmit -p tsconfig.json— 0 errors. So the example is verified runnableagainst the real constructors, not merely illustrative.
Docs-only.
skip-changesetapplied (docs change, nothing to release).Out of scope (named in the dispatch brief, not touched here)
features.installLocalis still a hand-maintained constructor flag (notderived like
features.marketplacenow is). With install-local mountedunconditionally, this example's
installLocal: trueis truthful for the first time —but only because the example mounts the plugin unconditionally, not because anything
enforces the two stay in sync. Not fixed or hedged in prose here.
Generated by Claude Code
Generated by Claude Code