Skip to content

MultiNodeGate is count-blind: allowMultiNode() returns a boolean verdict, so a license's max_nodes cap can only deny the whole cluster, never the excess replicas #8367

Description

@hotlong

Filed unassigned and unlabeled for triage from the repo:cloud seat (session session_01TPHe3S9uZYC9wtUwdkRZ46) while accepting cloud#1278 (ADR-0022 Phase 1 runtime online client, PR cloud#1291). I am not this repo's triage and do not grade or route here.

Fact (measured against 62b6a2fb, the SHA cloud pins today)

registerMultiNodeGate consumes { allowMultiNode(): { allowed, reason } } — a boolean verdict with no node count in the contract. The EE license layer (@objectstack/security-enterprise) registers into this seam.

Why it matters now

The maintainer ruled on 2026-08-13 (recorded on cloud#1275) that a licensed max_nodes overflow must refuse the excess replicas — run up to the paid limit — plus a loud warning, explicitly NOT whole-cluster degrade. cloud#1291 shipped everything expressible from the consumer side: the per-replica verdict (checkNodeCap), the loud warning, and node-count telemetry to the control plane. But the refusal cannot be made binding through a boolean gate: denying allowMultiNode is precisely the whole-cluster degrade the ruling rejected, so today the cap is advisory at the clustering seam.

Suggested shape (not a decision)

Widen the seam to carry a count — e.g. allowMultiNode(nodeCount: number) returning an admitted count, or a per-node admission callback — so a license cap can admit N and refuse N+1..M. Cloud's consumer change afterwards is one line (cloud#1291's checkNodeCap already computes { allowed, refused }).

Refs: cloud#1275 (the ruling), cloud#1278 / PR cloud#1291 (the consumer half, with the measurement in its report), docs/adr/ ADR-0022 in the cloud repo (D4 multi-node gating).

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions