Skip to content

feat: honor land-on-parcel deep link flag#8997

Open
juanmahidalgo wants to merge 2 commits into
devfrom
feat/deeplink-land-on-parcel
Open

feat: honor land-on-parcel deep link flag#8997
juanmahidalgo wants to merge 2 commits into
devfrom
feat/deeplink-land-on-parcel

Conversation

@juanmahidalgo

Copy link
Copy Markdown
Contributor

Changes

  • Add a land-on-parcel deep-link flag (AppArgsFlags.LAND_ON_PARCEL).
  • DeepLinkHandle parses it and threads landOnParcel through both teleport paths, reusing the already-merged land-on-parcel pipeline:
    • running app: ChatTeleporter.TeleportToParcelAsync (genesis) and TeleportToRealmAsync (world + position)
    • cold start: StartParcelTeleportStartupOperation
  • Fully additive: the flag defaults to false everywhere, so existing deep links, /goto, and normal startup behave exactly as before.

This is the Explorer side only. The senders (decentraland-ui2 deep-link builder + landing-site What's On) come in separate PRs; until then the flag is a no-op (nothing emits it), so this is safe to merge on its own.

Test plan

  • Genesis event deep link decentraland://?position=x,y&land-on-parcel=true lands at the event parcel (running app + cold start).
  • World event deep link ?realm=<world>&position=x,y&land-on-parcel=true lands at the parcel (running app).
  • Without the flag: deep links and /goto still land at the scene spawn point (unchanged).

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

@lorenzo-ranciaffi

Copy link
Copy Markdown
Contributor

@claude review

@claude

claude Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Claude finished @lorenzo-ranciaffi's task in 2m 44s —— View job


PR Review: feat: honor land-on-parcel deep link flag

  • Load project docs and CLAUDE.md
  • Read changed files
  • Analyze PR diff
  • Post review findings

Root-Cause Check

Problem: Deep links have no way to request that the avatar lands at the exact requested parcel rather than the scene's spawn point, which is needed for event-specific jump-in flows.

Fix type: ✅ Genuine additive feature. The landOnParcel infrastructure already exists throughout IRealmNavigator, ITeleportController, and TeleportToSpawnPointOperationBase.InternalExecuteAsync (all pre-merged). This PR adds only the entry point — parsing land-on-parcel from the deep link URL and threading the value down through both the running-app and cold-start paths. No workarounds, no symptom patches.


Blocking Issues

None found.


Non-Blocking Observations

System.StringComparison fully-qualified in LandOnParcelFrom (DeepLinkHandleImplementation.cs:100)

string.Equals(deepLink.ValueOf(AppArgsFlags.LAND_ON_PARCEL), "true", System.StringComparison.OrdinalIgnoreCase);

using System; is absent from this file (only using System.Threading; is present), so the fully-qualified form is technically correct and compiles fine. Consistency with the rest of the file would be a using System; at the top + unqualified StringComparison.OrdinalIgnoreCase — but this is purely stylistic.

LandOnParcel is not reset when ConsumeByTeleportOperation() is called (ITeleportController.cs:57-61)

StartParcel.ConsumeByTeleportOperation() sets consumed = true but leaves LandOnParcel at its last-assigned value. Both callers in TeleportStartupOperation read startParcel.LandOnParcel immediately after the call, so the stale-flag risk is zero in practice. Worth noting in case the class gains more callsites.

landOnParcel silently dropped for realm-only deep links (DeepLinkHandleImplementation.cs:44)

else
    chatTeleporter.TeleportToRealmAsync(realm.Value.Value, token).Forget(); // no position → landOnParcel ignored

Correct and intentional — without a position, there is no parcel to land on. The behaviour is sound; a code comment could make it explicit for future readers, but it is not required.


Summary

The diff is clean and correct. All changes are fully additive (bool landOnParcel = false everywhere), zero regression risk for existing callers. The feature is safely behind a flag that no sender emits yet, consistent with the described rollout strategy. No blocking issues.

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
COMPLEXITY_REASON: Touches 5 files, modifying public async method signatures in ChatTeleporter and StartParcel state used across the startup and deep-link navigation flows.
QA_REQUIRED: YES

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.

3 participants