You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 189a732
Browse filesBrowse the repository at this point in the historyBrowse files
fix(cli): honour host-wired marketplace plugins on the cloud-connected serve arm (#8357) (#8646)
* fix(cli): honour host-wired marketplace plugins on the cloud-connected serve arm (#8357)
`objectstack serve` auto-wires MarketplaceProxyPlugin,
MarketplaceInstallLocalPlugin, the same-origin cloud-connection surface and
RuntimeConfigPlugin whenever `resolveCloudUrl()` resolves. Those four mounts
were unconditional: the block never asked whether the loaded host config had
already wired any of them.
Each mount is now guarded on its own `Serve.providesCapability` presence check
-- the idiom the offline arm has carried since #8343 -- so CLI auto-wiring is a
fallback for hosts that wire nothing rather than a second opinion about a
surface the host already composed. Two new identity registries
(MARKETPLACE_PROXY_IDENTITIES, CLOUD_CONNECTION_IDENTITIES) join the two the
offline arm already declared, and `planMarketplaceWiring` reports one flag per
surface so a host composing any SUBSET keeps exactly what it wired.
Measured correction to the card's premise: the CLI's block runs several hundred
lines BEFORE `config.plugins` are registered, and `Kernel.use` overwrites by
name, so today the HOST's instance is the survivor -- the CLI's four are
constructed, registered and dropped. This is therefore precedence restoration,
not a live-bug fix: the host winning stops being an accident of block ordering
that nothing states or pins.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDj
* test(cli): pin cloud-arm host precedence against a real ObjectKernel (#8357)
Reads the surviving instance off the kernel rather than trusting the planner
alone, with every host fixture constructed from an argument the CLI cannot
produce so the two instances are distinguishable at all.
Also records a measured gap found while writing the drift guard: esbuild
rewrites a class that references itself by name into `class _X`, so the BUILT
MarketplaceProxyPlugin reports `_MarketplaceProxyPlugin` and the class-name
limb of the identity registry never matches it. The registered-name limb
carries the guard; filed separately rather than fixed here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P7vaLs7bhBPi9m3JyzkhDj
---------
Co-authored-by: Claude <noreply@anthropic.com>
`serve`: the cloud-connected marketplace arm now leaves a host config's own marketplace and cloud plugins alone.
6
+
7
+
`objectstack serve` auto-wires `MarketplaceProxyPlugin`, `MarketplaceInstallLocalPlugin`, the same-origin cloud-connection surface and `RuntimeConfigPlugin` whenever a cloud URL resolves. Each of those four mounts is now guarded on whether the loaded host config already wired that surface — the same presence check the offline arm has carried since the install-local fix — so CLI auto-wiring is a fallback for hosts that wire nothing rather than a second opinion about a surface the host already composed.
8
+
9
+
No behaviour changes for any current deployment: `Kernel.use()` keys plugins by `plugin.name` and the host's registration runs after the CLI's, so the host's instance already won by ordering. What changes is that it now wins by rule instead of by the relative position of two blocks that never referenced each other, and the CLI stops constructing four plugins it was about to discard. It becomes visible the moment a host passes an argument the CLI cannot — a private control plane, a custom install `storageDir`, a credential path, white-label branding.
0 commit comments