Skip to content

[finding] serve.ts cluster-driver load swallows the host-import "undeclared" classification — a missing driver declaration surfaces one plugin later with a message naming the wrong remedy #13463

Description

@baozhoutao

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions