Skip to content

[do not review] test vehicle: experimental twin of #455 - #456

Draft
popuz wants to merge 2 commits into
experimentalfrom
feat/explorer-ui-events-result-experimental
Draft

[do not review] test vehicle: experimental twin of #455#456
popuz wants to merge 2 commits into
experimentalfrom
feat/explorer-ui-events-result-experimental

Conversation

@popuz

@popuz popuz commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

This is the experimental-based twin of #455, opened solely so CI publishes a testable @dcl/protocol tarball that js-sdk-toolchain and unity-explorer can pin. A main-based tarball is unusable downstream: experimental carries five protos main lacks (common/options.proto, common/quantization_example.proto, pulse/pulse_{client,server,shared}.proto), and unity-explorer generates PulseClient/PulseServer from the Pulse ones, so a main-based pin would silently drop them.

The commit here is a clean cherry-pick of 4763c06 onto origin/experimental — no content differs from #455. Review belongs on #455, not here.

This PR will be closed unmerged once the rolling chore: sync main to experimental PR carries #455 across. The Validate compatibility failure is the same single pre-existing one as on #455 (the check always compares against the main zip).

Adds the PBExplorerUiEventsResult component (ecs_component_id 1220) so
scenes can observe when fullscreen explorer panels open and close, and
relocates the ExplorerUi enum out of the restricted-actions API into
decentraland/sdk/components/common/explorer_ui.proto.

The relocation is required, not cosmetic. js-sdk-toolchain's RPC API
generator (scripts/rpc-api-generation/index.ts:203) hardcodes
decentraland/sdk/components/common/ as the only path whose proto types
collapse to a single nominal TypeScript identity. With the enum left in
restricted_actions.proto a scene would hold two incomparable ExplorerUi
types -- one from ~system/RestrictedActions, one from @dcl/ecs. After the
move, restricted_actions.gen.ts and explorer_ui_events_result.gen.ts both
import ExplorerUi from the same generated module.

The move and the new component must ship together: relocating the enum
without a component proto importing it leaves it ungenerated in @dcl/ecs
and re-declared in apis.d.ts, which is a regression.

Wire compatibility is untouched -- field number 1, values 0-6, and wire
types are all unchanged. buf breaking with WIRE_JSON (the policy
configured in proto/buf.yaml) passes.

Expected red check: validate-compatibility runs
scripts/check-proto-compabitility.sh, which compares fully-qualified type
names textually and is stricter than the repo's configured buf policy. It
reports a source-level break for the `ui` field. The break is real but
has zero consumers -- openExplorerUi merged 2026-07-28 and the latest
stable @dcl/sdk (7.25.0, published 2026-07-27) does not contain the API,
so only next/experimental tarballs are affected. A team override is
requested rather than suppressing the check.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown

Test this pull request on NPM or Yarn

  • The @dcl/protocol package can be tested in scenes by running the following NPM command:
    npm install "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-30567853022.commit-a03c2b0.tgz"
  • The @dcl/protocol package can be tested in scenes by running the following YARN command:
    yarn add "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-30567853022.commit-a03c2b0.tgz"

`ui` and `event` are independent axes, so every pair of the two is
representable. The previous comment invited per-panel feature events into
the same oneof at field 20+, which would have made pairs such as
`ui = EU_MAP` carrying a backpack event perfectly legal, and pushed the
burden of recognising and ignoring them onto every consumer.

State the rule instead: a variant belongs in this oneof only if it is
meaningful for every value of `ui`. Panel-specific events get their own
result component, where the component identity carries the panel and the
contradiction cannot be expressed. That also matches how the rest of the
protocol scales -- PBUiDropdownResult, PBUiInputResult, PBTriggerAreaResult,
PBVideoEvent and PBAudioEvent are separate components rather than variants
of one shared event bus.

Comment-only change; the wire format is untouched.
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