Filed by the repo:cloud execution seat (objectstack#6026, session session_01EzWYDkwr6WEwDGhMH1Jzuq, R25) from the cloud#1742 verification run. Measured at 1a540e82b (cloud's current pin). Filed unassigned for triage — a diagnostic-quality defect, only observable if a deployment ever reaches the licensed multi-node path.
The gap
packages/cli/src/commands/serve.ts:2363:
try { await importFromHost(`@objectstack/service-cluster-${__clusterDriver}`); } catch { }
The empty catch swallows everything, including the objectstackHostImportFailureKind: 'undeclared' classification the #4719 host-declaration gate goes to some trouble to produce (packages/types/src/node.ts:484-499, message "Cannot find package '…': the host app does not declare it."). clusterConfig is then set unconditionally at :2365, and boot dies later inside ClusterServicePlugin.init with:
Cluster driver "redis" is not registered. Did you forget to import @objectstack/service-cluster-redis...
— a message that points at registerClusterDriver/imports, when the actual cause (measured in the cloud#1742 verification by deleting the declaration from the EE manifest and running the real gate source) is a missing package.json declaration, and the gate had already produced the exact remedy text before the catch discarded it.
The comment justifying the catch ("may already be registered by the loaded config") is legitimate but only covers the case where the driver IS registered by other means — it does not require discarding the failure classification in the case where nothing registers it.
Suggested shape
In the catch: re-throw anything that is not module-not-found; for hostImportFailureKind === 'undeclared', log the gate's own remedy text as a warning before falling through (preserving the "config may have registered it" tolerance). Behaviour for the currently-working paths is unchanged; the failure path stops laundering a manifest problem into a registry problem.
Refs: cloud#1742 (measurement + call chain, serve.ts:2307-2365) · #4719 (host-declaration gate) · #10645/#10769/#11185 (why importFromHost exists here)
Filed by the repo:cloud execution seat (objectstack#6026, session
session_01EzWYDkwr6WEwDGhMH1Jzuq, R25) from the cloud#1742 verification run. Measured at1a540e82b(cloud's current pin). Filed unassigned for triage — a diagnostic-quality defect, only observable if a deployment ever reaches the licensed multi-node path.The gap
packages/cli/src/commands/serve.ts:2363:The empty catch swallows everything, including the
objectstackHostImportFailureKind: 'undeclared'classification the #4719 host-declaration gate goes to some trouble to produce (packages/types/src/node.ts:484-499, message "Cannot find package '…': the host app does not declare it.").clusterConfigis then set unconditionally at :2365, and boot dies later insideClusterServicePlugin.initwith:— a message that points at
registerClusterDriver/imports, when the actual cause (measured in the cloud#1742 verification by deleting the declaration from the EE manifest and running the real gate source) is a missingpackage.jsondeclaration, and the gate had already produced the exact remedy text before the catch discarded it.The comment justifying the catch ("may already be registered by the loaded config") is legitimate but only covers the case where the driver IS registered by other means — it does not require discarding the failure classification in the case where nothing registers it.
Suggested shape
In the catch: re-throw anything that is not module-not-found; for
hostImportFailureKind === 'undeclared', log the gate's own remedy text as a warning before falling through (preserving the "config may have registered it" tolerance). Behaviour for the currently-working paths is unchanged; the failure path stops laundering a manifest problem into a registry problem.Refs: cloud#1742 (measurement + call chain, serve.ts:2307-2365) · #4719 (host-declaration gate) · #10645/#10769/#11185 (why importFromHost exists here)