Skip to content

[DO NOT MERGE] feat(sdk): clients target the authoritative server; registry collisions; players dedupe - #1523

Draft
cyaiox wants to merge 1 commit into
stack/05-codecfrom
stack/06-topology
Draft

[DO NOT MERGE] feat(sdk): clients target the authoritative server; registry collisions; players dedupe#1523
cyaiox wants to merge 1 commit into
stack/05-codecfrom
stack/06-topology

Conversation

@cyaiox

@cyaiox cyaiox commented Aug 5, 2026

Copy link
Copy Markdown
Member

Phase 4 of the authoritative-server network refactor — retiring the
P2P-era wire topology:

  • clients emit CRDT, REQ_CRDT_STATE, and room CUSTOM_EVENTs targeted
    [authoritative-server] instead of broadcasting to every peer (the
    O(N²)→O(N) client-traffic fix, fix: get dcl export working #10); the server's room fan-out stays
    broadcast until AOI; pre-role sends fall back to broadcast, by
    design and documented
  • registerMessages reports re-registration of an existing key and
    enforces the reserved '~sdk/' prefix (skipped, reported) — via
    console.error because the scene runtime console has no warn (fix @dcl/kernel and @dcl/unity-renderer dependencies version #12)
  • players helper: one instance per engine via a WeakMap memo shared by
    the public API and addSyncTransport (removes the duplicate per-frame
    diff system and double-fired callbacks); the diff loop itself is now
    mark-and-sweep in both directions, fixing a real join-miss when one
    player joined and another left in the same frame
  • docs/network-peer-visibility.md: measured evidence for the two
    deferred defects — feat: add to copy images in setup export #11 needs a host roster or a wire-level
    broadcast-except-X primitive (the headless server provably cannot
    know its silent peers); fix: recursive export, now it ignores the files specified in .dclignore #13 needs a component-wide change
    subscription in @dcl/ecs (local same-frame create+delete collapses
    at flush; the wire path notifies per message, so only the
    subscription shape blocks it)

Red suite final state: 11 of 13 defects fixed and green; #11 and #13
stay pinned it.failing with deferral notes. Wire goldens byte-identical.

Claude-Session: https://claude.ai/code/session_01Kzo6zwrn1CA79S4RN1dgsU

🤖 Generated with Claude Code

https://claude.ai/code/session_01Kzo6zwrn1CA79S4RN1dgsU


📚 Stack (splits #1505 — merge top-down within each stack)

Network layer (each PR is one self-contained, independently-green commit):

  1. test(sdk): characterization baseline for the network layer refactor #1518 test harness — characterization baseline + red defect suite (this stack's root)
  2. [DO NOT MERGE] refactor(sdk): network layer foundations — break cycles, single isServer, logging discipline #1519 foundations — cycle break, single isServer, logging discipline
  3. [DO NOT MERGE] feat(sdk): hydration FSM — deterministic late-join and reconnect convergence #1520 hydration FSM — late-join/reconnect correctness
  4. [DO NOT MERGE] feat(sdk): default-deny server validation, fixed correction path, O(1) entity lookup #1521 validator — default-deny, correction path, entity index
  5. [DO NOT MERGE] refactor(sdk): unify CRDT codec into a parse-once pipeline #1522 codec — parse-once pipeline (wire goldens byte-identical)
  6. [DO NOT MERGE] feat(sdk): clients target the authoritative server; registry collisions; players dedupe #1523 topology — targeted sends, registry collisions, players dedupe
  7. [DO NOT MERGE] refactor(sdk): parameterize network boot, document the host contract #1524 boot + host-conformance doc
  8. [DO NOT MERGE] refactor(sdk): ponytail sweep — delete what the refactor no longer needs #1525 simplification sweep (−95 lines)

sdk-commands (independent of the stack above):

After a parent squash-merges, the child needs git rebase --onto origin/auth-server <old-parent> <child> — ping the session and it gets restacked.

…ns reported; players helper deduped

Phase 4 of the authoritative-server network refactor — retiring the
P2P-era wire topology:

- clients emit CRDT, REQ_CRDT_STATE, and room CUSTOM_EVENTs targeted
  [authoritative-server] instead of broadcasting to every peer (the
  O(N²)→O(N) client-traffic fix, #10); the server's room fan-out stays
  broadcast until AOI; pre-role sends fall back to broadcast, by
  design and documented
- registerMessages reports re-registration of an existing key and
  enforces the reserved '~sdk/' prefix (skipped, reported) — via
  console.error because the scene runtime console has no warn (#12)
- players helper: one instance per engine via a WeakMap memo shared by
  the public API and addSyncTransport (removes the duplicate per-frame
  diff system and double-fired callbacks); the diff loop itself is now
  mark-and-sweep in both directions, fixing a real join-miss when one
  player joined and another left in the same frame
- docs/network-peer-visibility.md: measured evidence for the two
  deferred defects — #11 needs a host roster or a wire-level
  broadcast-except-X primitive (the headless server provably cannot
  know its silent peers); #13 needs a component-wide change
  subscription in @dcl/ecs (local same-frame create+delete collapses
  at flush; the wire path notifies per message, so only the
  subscription shape blocks it)

Red suite final state: 11 of 13 defects fixed and green; #11 and #13
stay pinned it.failing with deferral notes. Wire goldens byte-identical.

Claude-Session: https://claude.ai/code/session_01Kzo6zwrn1CA79S4RN1dgsU
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying js-sdk-toolchain with  Cloudflare Pages  Cloudflare Pages

Latest commit: d4dd9e7
Status: ✅  Deploy successful!
Preview URL: https://2bfd47e9.js-sdk-toolchain.pages.dev
Branch Preview URL: https://stack-06-topology.js-sdk-toolchain.pages.dev

View logs

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Test this pull request

  • The @dcl/sdk package can be tested in scenes by running

    npm install "https://sdk-team-cdn.decentraland.org/@dcl/js-sdk-toolchain/branch/stack/06-topology/dcl-sdk-7.25.1-31013699724.commit-893364d.tgz"
  • The @dcl/js-runtime package can be tested in scenes by running

    npm install "https://sdk-team-cdn.decentraland.org/@dcl/js-sdk-toolchain/branch/stack/06-topology/@dcl/js-runtime/dcl-js-runtime-7.25.1-31013699724.commit-893364d.tgz"
  • To test with npx init

    export SDK_COMMANDS="https://sdk-team-cdn.decentraland.org/@dcl/js-sdk-toolchain/branch/stack/06-topology/dcl-sdk-commands-7.25.1-31013699724.commit-893364d.tgz"
    npx $SDK_COMMANDS init
  • The /changerealm command to test test in-world

    /changerealm https://sdk-team-cdn.decentraland.org/ipfs/stack/06-topology-e2e
    
  • You can preview this build entering:
    https://playground.decentraland.org/?sdk-branch=stack/06-topology

@cyaiox cyaiox changed the title feat(sdk): clients target the authoritative server; registry collisions; players dedupe [DO NOT MERGE] feat(sdk): clients target the authoritative server; registry collisions; players dedupe Aug 5, 2026
@cyaiox
cyaiox marked this pull request as draft August 5, 2026 14:25
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.

1 participant