Skip to content

Feat: pulse users clustering - #454

Merged
mikhail-dcl merged 10 commits into
mainfrom
feat/pulse-users-clustering
Sep 16, 2026
Merged

mikhail-dcl merged 10 commits into
mainfrom
feat/pulse-users-clustering

Conversation

@mikhail-dcl

@mikhail-dcl mikhail-dcl commented Jul 30, 2026 •

Copy link
Copy Markdown
Contributor

Iteration 1: Pulse cluster/session contract

This PR adds pulse_clusters.proto and its public/comms.proto export. PeerClusterChange retains session, displaced_session and displaced_cluster_id for iteration-1 duplicate-identity and reconnection handling. Pulse #34 produces this contract; Gatekeeper #283 consumes it. Archipelago #128 routes session subject tokens without importing these messages and needs no automatic protocol re-pin.

Iteration separation

Presence originally leaked here via 5395a4a and afb5d1c. Additive removal commit 9e53cec removes pulse_presence.proto and its export while preserving history. Presence and the later session_status/distinct-ban amendment are isolated on codex/protocol-iteration2-presence-control, stacked on this PR.

Compatibility prerequisites

Merge 66f9b48 reconciles current main 688d92c, preserving its TeleportToRequest/restricted_actions and other schema changes unchanged. Commit 830556a replaces the legacy compatibility checker that aborts on valid reserved names with the existing Buf WIRE_JSON checker. These are shared build prerequisites, not additional iteration-1 features. The old compatibility failure is not dismissed as unrelated: current-main definitions are retained and Buf verifies wire compatibility.

Verification and release

Earlier reconciliation passed Buf lint/build/breaking and generation. Fresh split CI snapshot checks and artifact provenance are being collected; old 3ef4c52 snapshot is not a split artifact. No merge, stable npm publication, service deployment or LiveKit Cloud mutation is authorized. Consumer pins require verified actual CI artifact URLs and integrity; source candidates and older staged provenance work remain preserved.

Signed-off-by: Mikhail Agapov <mikhail.agapov@decentraland.org>
PeerClusterChange had no generated TS because the generator only emits for
public/*.proto entry points and none referenced decentraland/pulse/. Comms
Gatekeeper needs this type to subscribe to peer.{addr}.cluster_change.
@github-actions

github-actions Bot commented Jul 30, 2026 •

Copy link
Copy Markdown

Test this pull request

  • The @dcl/protocol package can be tested in scenes by running
    npm install "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-35083916802.commit-136085a.tgz"

mikhail-dcl and others added 5 commits August 3, 2026 18:27
…sence feed

ParcelChangesBatch is published by Pulse on NATS engine.parcel_changes and
becomes the platform's single presence feed (Archipelago => Pulse migration,
iteration 2): first non-null placement = connect, parcel absent = exit, realm
and parcel on every entry, per-server seq with periodic full snapshots.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rypoint

The TypeScript/C# codegen only walks public/*.proto, so without this import the
tarball shipped the .proto but no generated ParcelChangesBatch module.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Adds session, displaced_session and displaced_cluster_id so consumers can address a device session rather than a wallet.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Mikhail Agapov <mikhail.agapov@decentraland.org>
Signed-off-by: Mikhail Agapov <mikhail.agapov@decentraland.org>
@mikhail-dcl
mikhail-dcl merged commit 5810768 into main Sep 16, 2026
3 checks passed
@mikhail-dcl
mikhail-dcl deleted the feat/pulse-users-clustering branch September 16, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants