Skip to content

feat: add deep link param to force open backpack on client open#9398

Open
davidejensen wants to merge 4 commits into
devfrom
feat/deeplink-param-backpack
Open

feat: add deep link param to force open backpack on client open#9398
davidejensen wants to merge 4 commits into
devfrom
feat/deeplink-param-backpack

Conversation

@davidejensen

@davidejensen davidejensen commented Jul 17, 2026

Copy link
Copy Markdown
Member

Pull Request Description

What does this PR change?

Fix #9379
This PR adds a new parameter that can be passed to the client to force open the backpack as soon as a user loads in world.
Main usage of this will be with the new shop, users will be able to click a "try in world" button for wearables/emotes, with this new param they will immediately see the backpack as soon as they load in

Test Instructions

Test Steps

  1. Launch the client normally
  2. Verify that you can load in world without any issues

_

  1. Launch the client with the parameter --force-open-backpack
  2. Verify that after the loading screen finishes the backpack automatically opens

Additional Testing Notes

  • Note any edge cases to verify
  • Mention specific areas that need careful testing
  • List known limitations or potential issues

Quality Checklist

  • Changes have been tested locally
  • Documentation has been updated (if required)
  • Performance impact has been considered
  • For SDK features: Test scene is included

Code Review Reference

Please review our Branch & PR Standards before submitting. It explains the automated review flow, QA/DEV approval requirements, and what each label does — especially useful for first-time contributors.

@davidejensen davidejensen self-assigned this Jul 17, 2026
@davidejensen
davidejensen requested review from a team as code owners July 17, 2026 07:07
@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

@decentraland-bot decentraland-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Review: feat: add deep link param to force open backpack on client open

STEP 2 — Root-cause check

PASS. New feature — adds a force-open-backpack deep link parameter so the shop's "try in world" flow can open the backpack immediately on landing. No symptom masking or workarounds.

STEP 3 — Design & integration

Owner search:

New logic Natural owner Verdict
Launch-arg → open backpack ExplorePanelPlugin — already owns keyboard-shortcut → open backpack (lines 668-669) ✅ Correct home
Runtime deep link → open backpack DeepLinkHandle — already owns position/realm/community deep link routing ✅ Correct home
Constructor wiring DynamicWorldContainer — single composition-root instantiation point ✅ Acceptable

Observation (P2): ExplorePanelPlugin.ForceOpenBackpackOnLandingAsync and DeepLinkHandle.OpenBackpackWhenLandedAsync have identical method bodies — both await LoadingStatus.LoadingStage.Completed then call mvcManager.ShowAsync(…Backpack…). While the two trigger paths (CLI arg vs runtime deep link) are legitimately distinct, the duplicated implementation is prone to maintenance drift. Consider extracting the shared wait-and-show logic into a small static helper accessible to both call sites (e.g. a BackpackLauncher.OpenOnLoadingCompleteAsync(ILoadingStatus, IMVCManager, CancellationToken) method).

Teardown / consumption trace:

  • ForceOpenBackpackOnLandingAsync — uses the ct from InitializeAsync; cancelled on plugin dispose. No subscriptions to leak. ✅
  • OpenBackpackWhenLandedAsync — uses this.token from the constructor; cancelled when DynamicWorldContainer's CancellationToken fires. No subscriptions to leak. ✅

Constructor widening note: DeepLinkHandle now takes IMVCManager and ILoadingStatus. This follows the existing pattern (cf. CommunityDataService which also triggers UI), and there is a single instantiation point. Acceptable.

PASS.

STEP 4 — Member audit

Member Scope Consumers Verdict
AppArgsFlags.FORCE_OPEN_BACKPACK public const ExplorePanelPlugin, DeepLinkHandle
DeepLinkHandle ctor (widened) public 1 (DynamicWorldContainer)
ForceOpenBackpackOnLandingAsync private 1 (inline call)
OpenBackpackWhenLandedAsync private 1 (inline call)

No single-use public members, no re-derived accessors, no absent-≠-false issues.

STEP 5 — Line-level findings

See inline comments. One P2 formatting issue identified.

STEP 6 — Complexity

SIMPLE. Four files, ~45 lines of additions. Straightforward flag-check → async UI panel show. No ECS system changes, no structural component operations, no complex async flows, no infrastructure modifications.

STEP 7 — QA assessment

QA_REQUIRED: YES. Changes affect runtime behavior — the backpack panel auto-opens on load when the flag is present. Must verify:

  • Normal launch (no flag) — no regressions
  • Launch with --force-open-backpack — backpack opens after loading completes
  • Runtime deep link with force-open-backpack param — backpack opens after loading completes

STEP 8 — Non-blocking warnings

None. No Main.unity scene changes.

Security review

No security issues found. The feature adds a boolean flag presence check that triggers a UI navigation action. No injection surface, no auth changes, no privilege escalation, no data exposure.

REVIEW_RESULT: PASS ✅
COMPLEXITY: SIMPLE
COMPLEXITY_REASON: Adds a boolean deep link flag with straightforward flag-check → async UI panel show; no ECS, structural, or infrastructure changes.
QA_REQUIRED: YES


Reviewed by Jarvis 🤖 · Requested by decentraland-bot via GitHub

Comment thread Explorer/Assets/DCL/Infrastructure/Global/AppArgs/AppArgsFlags.cs
Comment thread Explorer/Assets/DCL/RuntimeDeepLink/DeepLinkHandleImplementation.cs Outdated
Comment thread Explorer/Assets/DCL/PluginSystem/Global/ExplorePanelPlugin.cs Outdated
@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Warnings not reduced: 19087 => 19157 — remove at least one warning to merge.

@DafGreco DafGreco left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✔️ PR reviewed and approved by QA on both platforms following instructions playing both happy and un-happy path

Regressions for this ticket had been performed in order to verify that the normal flow is working as expected:

  • [ ✔️ ] Backpack and wearables in world
  • [ ✔️ ] Emotes in world and in backpack
  • [✔️ ] Teleport with map/coordinates/Jump In
  • [✔️ ] Chat and multiplayer
  • [ ✔️ ] Profile card

Evidence with params and without

20260717-0812-08.6148529.mp4
20260717-0814-51.9736855.mp4

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.

Add new deeplink to open backpack on first launch

4 participants