From 45c37380d62db90631b6a449d10000f66080a233 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 12:24:12 +0000 Subject: [PATCH 1/2] fix(cloud-connection): move install-local outside the cloud ternary in 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 Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDj --- packages/cloud-connection/README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/cloud-connection/README.md b/packages/cloud-connection/README.md index 64efb21d7b..db831afee2 100644 --- a/packages/cloud-connection/README.md +++ b/packages/cloud-connection/README.md @@ -27,11 +27,22 @@ import { const cloudUrl = resolveCloudUrl(); // OS_CLOUD_URL, 'off' disables const plugins = [ + // Cloud-gated: these ARE the control-plane client, so a resolved URL is + // their precondition. Skipped entirely when cloud is off. ...(cloudUrl ? [ new MarketplaceProxyPlugin({ controlPlaneUrl: cloudUrl }), - new MarketplaceInstallLocalPlugin({ controlPlaneUrl: cloudUrl }), new CloudConnectionPlugin({ singleEnvironment: true, controlPlaneUrl: cloudUrl }), ] : []), + // NOT cloud-gated: this is the documented air-gapped path, so it mounts + // unconditionally. `cloudUrl || 'off'` — never the bare `cloudUrl` — because + // the constructor re-resolves whatever it is given through + // resolveCloudUrl(), which reads '' as "unset" and substitutes the public + // DEFAULT_CLOUD_URL. 'off' is one of the documented disable sentinels and + // is the value that actually resolves to no cloud. + new MarketplaceInstallLocalPlugin({ controlPlaneUrl: cloudUrl || 'off' }), + // NOT cloud-gated: features.marketplace is derived from what is actually + // mounted, not from this constructor call, so a cloud-less runtime reports + // marketplace: false on its own — there is nothing here to keep in sync. new RuntimeConfigPlugin({ controlPlaneUrl: '', singleEnvironment: true, installLocal: true }), ]; ``` From 3866536c19bfe26a556a1b93aca32174cb272156 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 12:29:30 +0000 Subject: [PATCH 2/2] docs(cloud-connection): explain why RuntimeConfigPlugin keeps '' unlike 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 Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDj --- packages/cloud-connection/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/cloud-connection/README.md b/packages/cloud-connection/README.md index db831afee2..d40d737e08 100644 --- a/packages/cloud-connection/README.md +++ b/packages/cloud-connection/README.md @@ -43,6 +43,9 @@ const plugins = [ // NOT cloud-gated: features.marketplace is derived from what is actually // mounted, not from this constructor call, so a cloud-less runtime reports // marketplace: false on its own — there is nothing here to keep in sync. + // `''` here, unlike its neighbor above, is correct as-is: this plugin does + // NOT re-resolve controlPlaneUrl through resolveCloudUrl(), so '' means + // "stay on this origin" rather than "unset" — do not "fix" it to 'off'. new RuntimeConfigPlugin({ controlPlaneUrl: '', singleEnvironment: true, installLocal: true }), ]; ```