Skip to content

fix: ab registry manifest fallback case sensitivity + lsd manifest fallback#7956

Open
lorenzo-ranciaffi wants to merge 12 commits intodevfrom
fix/7608-ab-registry-fallback
Open

fix: ab registry manifest fallback case sensitivity + lsd manifest fallback#7956
lorenzo-ranciaffi wants to merge 12 commits intodevfrom
fix/7608-ab-registry-fallback

Conversation

@lorenzo-ranciaffi
Copy link
Copy Markdown
Contributor

@lorenzo-ranciaffi lorenzo-ranciaffi commented Mar 31, 2026

Pull Request Description

Fixes #7608

What does this PR change?

This PR makes sure that AB registry version result is case insensitive: many offchain wearables have capital letters that before weren't matching. E.g.:

urn:decentraland:off-chain:base-avatars:BaseFemale
urn:decentraland:off-chain:base-avatars:BaseMale
urn:decentraland:off-chain:base-avatars:distressed_black_Jeans
urn:decentraland:off-chain:base-avatars:Espadrilles
urn:decentraland:off-chain:base-avatars:Mustache_Short_Beard
urn:decentraland:off-chain:base-avatars:Red_topcoat
urn:decentraland:off-chain:base-avatars:SchoolShoes
urn:decentraland:off-chain:base-avatars:Thunder_earring

Where ever an Emote or Wearable is requested, the AB Registry is used (LSD included) so that the manifest is always present.

On top of that I noticed that when the inventory page had only base emotes, a request to the registry was made with an empty pointers array, causing a 400 log. With an early exit, this is now prevented.

Test Instructions

Test Steps

  1. Login normally, scroll the whole wearable and emote inventory waiting for all pages to load-> verify no AssetBundleManifestFallbackHelper: AB Manifest Fallback requested message is spotted in the log
  2. Start a scene locally and repeat step 1 -> same result of no error logs
  3. Try to both load/kill portable experiences and check the logs -> no error should appear

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 Code Review Standards before submitting.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 31, 2026

@lorenzo-ranciaffi lorenzo-ranciaffi marked this pull request as ready for review March 31, 2026 10:33
@lorenzo-ranciaffi lorenzo-ranciaffi requested review from a team as code owners March 31, 2026 10:33
@github-actions github-actions bot requested a review from anicalbano March 31, 2026 10:33
@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 31, 2026

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


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

The fixes are correct and well-targeted. The case-insensitive dictionary (StringComparer.InvariantCultureIgnoreCase), the AB registry integration in LoadElementsByPointersSystem, and the early-exit for empty pointer arrays all address real bugs cleanly.

Two inline comments posted. One additional finding that couldn't be placed inline:

AssetBundleRegistryVersionHelper.cs (unchanged line ~80): result.versions.Add(element.pointers[0], ...) — if the registry ever returns an entry with an empty pointers array, this throws IndexOutOfRangeException. Pre-existing issue, but easy to guard with if (element.pointers.Length == 0) continue; before the Add.


REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@lorenzo-ranciaffi lorenzo-ranciaffi moved this from Todo to With QA / Awaiting Review in Explorer Alpha Mar 31, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 31, 2026

Claude finished @lorenzo-ranciaffi's task in 3m 13s —— View job


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

The core fixes are solid: case-insensitive dictionary for AB registry matching, AB registry integration in LoadElementsByPointersSystem, early-exit for empty pointer arrays, and the GenericPostArguments reuse across both the registry and content calls is safe since CreateJson stores an immutable string.

One finding:

Constructor visibility — Both LoadWearablesDTOByPointersSystem and LoadEmotesByPointersSystem constructors were changed to private, but the code standard requires internal (CLAUDE.md: "Constructors: Marked internal"). LoadWearablesDTOByPointersSystem was previously correct (internal) and regressed; LoadEmotesByPointersSystem was previously wrong (public) but should become internal, not private. Two inline comments posted.


REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 31, 2026

Claude finished @lorenzo-ranciaffi's task in 1m 52s —— View job


Claude finished @lorenzo-ranciaffi's task —— View job


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings have been addressed:

  • ✅ Constructor visibility: both LoadWearablesDTOByPointersSystem and LoadEmotesByPointersSystem are now internal
  • ✅ Double space before wearableVersions.windows.buildDate fixed in LoadTrimmedElementsByIntentionSystem.cs
  • urlsSource duplication removed from LoadEmotesByPointersSystem — now inherited from base class
  • IndexOutOfRangeException guard added in AssetBundleRegistryVersionHelper.cs (element.pointers.Length == 0 check with LogException)

No new issues found. The CheckAssetBundleManifestFallbackAsync call after the registry check is intentional — it skips the expensive fallback path when the manifest is already set and only runs InjectContent, as documented by the comment. GenericPostArguments reuse is safe (immutable string).


REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 31, 2026

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


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings have been addressed. One minor issue found in this sync:

LoadElementsByPointersSystem.cs line 107// //Could be removed... has a double // prefix, a typo from the edit. Inline suggestion posted.

Everything else is correct:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary (case-insensitive URN matching)
  • EntitiesActiveElements new URL always points to the AB registry (correct — wearable/emote lookups should always use the registry, bypassing the LSD feature flag is intentional here)
  • GenericPostArguments reuse across both registry and content calls is safe (immutable string)
  • ✅ Early exit for empty pointers array prevents spurious 400 responses
  • element.pointers.Length == 0 guard with LogException in AssetBundleRegistryVersionHelper
  • ✅ Constructor visibility (internal) correct on both subclasses
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 31, 2026

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


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings have been addressed and no new issues found in this sync:

  • // // double-prefix comment typo in LoadElementsByPointersSystem.cs is fixed
  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary for case-insensitive URN matching
  • ✅ Early exit for empty pointers array prevents spurious 400 responses
  • element.pointers.Length == 0 guard with LogException in AssetBundleRegistryVersionHelper
  • EntitiesActiveElements URL always points to AB registry, bypassing the feature flag (intentional — wearable/emote lookups must always use the registry regardless of the ASSET_BUNDLE_FALLBACK flag)
  • ✅ Constructor visibility (internal) correct on both subclasses
  • GenericPostArguments reuse across registry + content calls is safe (immutable string)
  • GatewayUrlsSource inherits from DecentralandUrlsSource, so the new enum case is handled automatically

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@github-project-automation github-project-automation bot moved this from With QA / Awaiting Review to In Progress in Explorer Alpha Mar 31, 2026
@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 1, 2026

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


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings have been addressed. No new issues found in this sync.

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary (case-insensitive URN matching for off-chain wearables like BaseFemale, SchoolShoes, etc.)
  • ✅ Early exit in GetABRegistryVersionsByPointersAsync when pointers.Count == 0 prevents spurious 400 responses
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • EntitiesActiveElements URL consistently used across BatchPointersSystemBase, ResolveWearablePromisesSystem, and LoadEmotesByPointersSystem — always routes wearable/emote lookups to the AB registry, bypassing the ASSET_BUNDLE_FALLBACK feature flag (intentional per PR description)
  • ✅ Constructor visibility (internal) correct on both LoadWearablesDTOByPointersSystem and LoadEmotesByPointersSystem
  • GatewayUrlsSource inherits from DecentralandUrlsSource so the new EntitiesActiveElements enum case is handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements
  • ✅ No comment typos, no formatting issues

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 1, 2026

Claude finished @lorenzo-ranciaffi's task in 3m 5s —— View job


Claude finished reviewing


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings remain addressed. No new issues found in this sync.

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary for case-insensitive URN matching
  • ✅ Early exit when pointers.Count == 0 prevents spurious 400 responses
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • EntitiesActiveElements URL always routes wearable/emote lookups to the AB registry, bypassing the ASSET_BUNDLE_FALLBACK feature flag (intentional)
  • ✅ Constructor visibility (internal) correct on both LoadWearablesDTOByPointersSystem and LoadEmotesByPointersSystem
  • ✅ Comment double-// typo fixed in LoadElementsByPointersSystem.cs
  • ✅ Double space in LoadTrimmedElementsByIntentionSystem.cs fixed
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper
  • GatewayUrlsSource inherits from DecentralandUrlsSource, so the new EntitiesActiveElements enum case is handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 1, 2026

Claude finished @lorenzo-ranciaffi's task in 1m 16s —— View job


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings have been addressed. No new issues found in this sync.

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary (case-insensitive URN matching for off-chain wearables like BaseFemale, SchoolShoes, etc.)
  • ✅ Early exit in GetABRegistryVersionsByPointersAsync when pointers.Count == 0 prevents spurious 400 responses — placed before STRING_BUILDER_POOL acquisition, correctly before any async work
  • UniTask.SwitchToMainThread() correctly moved to the second overload (the one that makes the actual web request), not needed in the first overload which only does string construction
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • EntitiesActiveElements URL consistently used across BatchPointersSystemBase, ResolveWearablePromisesSystem, and LoadEmotesByPointersSystem — always routes wearable/emote lookups to the AB registry
  • ✅ Constructor visibility (internal) correct on LoadEmotesByPointersSystem
  • AssetBundlesVersions.versions changed from readonly field to private set property — semantically equivalent, no regression
  • GenericPostArguments reuse across registry + content calls is safe (immutable string)
  • GatewayUrlsSource inherits from DecentralandUrlsSource, new EntitiesActiveElements case handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

1 similar comment
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@AnsisMalins
Copy link
Copy Markdown
Contributor

PR 7956

PR number: 7956
Windows change build
Windows baseline build
macOS change build
macOS baseline build

Intel Core i3

Change samples: 2670
Baseline samples: 2675

Metric Change Baseline Delta Improvement
CPU average 33.7 ms 33.6 ms 0.1 ms -0.2%
CPU 1% worst 59.5 ms 53.6 ms 5.9 ms -11.0% 🔴
CPU 0.1% worst 127.6 ms 138.1 ms -10.5 ms 7.6% 🟢
GPU average 15.3 ms 16.1 ms -0.8 ms 5.3% 🟢
GPU 1% worst 21.9 ms 21.9 ms -0.0 ms 0.1%
GPU 0.1% worst 27.3 ms 25.5 ms 1.9 ms -7.3% 🔴

@lorenzo-ranciaffi lorenzo-ranciaffi enabled auto-merge (squash) April 1, 2026 13:02
@AnsisMalins
Copy link
Copy Markdown
Contributor

PR 7956

PR number: 7956
Windows change build
Windows baseline build
macOS change build
macOS baseline build

Intel Core i3

Change samples: 2672
Baseline samples: 2671

Metric Change Baseline Delta Improvement
CPU average 33.6 ms 33.7 ms -0.0 ms 0.1%
CPU 1% worst 54.8 ms 59.9 ms -5.1 ms 8.6% 🟢
CPU 0.1% worst 120.1 ms 147.1 ms -27.0 ms 18.3% 🟢
GPU average 15.7 ms 15.7 ms 0.0 ms -0.2%
GPU 1% worst 20.8 ms 21.6 ms -0.9 ms 4.0% 🟢
GPU 0.1% worst 22.6 ms 28.6 ms -6.0 ms 21.1% 🟢

@AnsisMalins
Copy link
Copy Markdown
Contributor

PR 7956

PR number: 7956
Windows change build
Windows baseline build
macOS change build
macOS baseline build

Intel Core i3

Change samples: 2668
Baseline samples: 2672

Metric Change Baseline Delta Improvement
CPU average 33.7 ms 33.6 ms 0.0 ms -0.1%
CPU 1% worst 55.2 ms 54.4 ms 0.8 ms -1.4%
CPU 0.1% worst 130.0 ms 119.7 ms 10.3 ms -8.6% 🔴
GPU average 15.4 ms 15.8 ms -0.5 ms 3.1% 🟢
GPU 1% worst 22.5 ms 20.9 ms 1.5 ms -7.3% 🔴
GPU 0.1% worst 24.4 ms 22.7 ms 1.7 ms -7.7% 🔴

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 2, 2026

Claude finished @lorenzo-ranciaffi's task in 1m 20s —— View job


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings remain addressed. No new issues found in this sync (merge of dev into the PR branch).

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary for case-insensitive URN matching (BaseFemale, SchoolShoes, etc.)
  • ✅ Early exit when pointers.Count == 0 prevents spurious 400 responses — placed before STRING_BUILDER_POOL acquisition
  • GetABRegistryVersionsByPointersAsync split into two overloads correctly — UniTask.SwitchToMainThread() only in the second overload that makes the web request
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • EntitiesActiveElements URL always routes wearable/emote lookups to AB registry (bypasses ASSET_BUNDLE_FALLBACK feature flag — intentional)
  • ✅ Constructor visibility (internal) correct on LoadEmotesByPointersSystem
  • AssetBundlesVersions.versions private set property — Create() factory is the only setter, semantically safe
  • GenericPostArguments reuse across registry + content calls is safe (immutable string)
  • GatewayUrlsSource inherits from DecentralandUrlsSource, new EntitiesActiveElements case handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper
  • ✅ Comment style and double-space formatting fixes

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 2, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@AnsisMalins
Copy link
Copy Markdown
Contributor

PR #7956, run #23907720450

Builds: Windows change, Windows baseline, macOS change, macOS baseline

Intel Core i3

Metric Change Baseline Delta Improvement
Samples 2655 2672
CPU average 33.8 ms 33.6 ms 0.2 ms -0.6%
CPU 1% worst 68.1 ms 55.8 ms 12.3 ms -22.0% 🔴
CPU 0.1% worst 251.4 ms 132.1 ms 119.3 ms -90.3% 🔴
GPU average 16.2 ms 15.4 ms 0.8 ms -5.2% 🔴
GPU 1% worst 23.6 ms 21.0 ms 2.5 ms -12.1% 🔴
GPU 0.1% worst 28.6 ms 23.2 ms 5.4 ms -23.5% 🔴

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 7, 2026

Claude finished @lorenzo-ranciaffi's task in 1m 51s —— View job


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings remain addressed. No new issues found in this sync.

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary for case-insensitive URN matching (BaseFemale, SchoolShoes, etc.)
  • ✅ Early exit when pointers.Count == 0 prevents spurious 400 responses — placed before STRING_BUILDER_POOL acquisition, correctly before any async work
  • GetABRegistryVersionsByPointersAsync split into two overloads — UniTask.SwitchToMainThread() correctly in the second overload only (the one that makes the web request)
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • AssetBundlesVersions struct object initializer: private set is accessible within Create() (same type) — valid C# 10 pattern
  • EntitiesActiveElements URL always routes wearable/emote lookups to the AB registry, bypassing the ASSET_BUNDLE_FALLBACK feature flag (intentional)
  • ✅ Constructor visibility (internal) correct on LoadEmotesByPointersSystem
  • GenericPostArguments reuse across registry + content calls is safe (immutable string)
  • GatewayUrlsSource inherits from DecentralandUrlsSource, new EntitiesActiveElements case handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper
  • ✅ Comment formatting and double-space fixes

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

@lorenzo-ranciaffi lorenzo-ranciaffi requested a review from dalkia April 7, 2026 13:53
@claude
Copy link
Copy Markdown
Contributor

claude bot commented Apr 7, 2026

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


PR Review

  • Gathering context
  • Reading changed files
  • Analyzing code and posting review

All previous review findings remain addressed. No new issues found in this sync.

Verified clean:

  • StringComparer.InvariantCultureIgnoreCase on the versions dictionary for case-insensitive URN matching (BaseFemale, SchoolShoes, etc.)
  • ✅ Early exit when pointers.Count == 0 prevents spurious 400 responses — correctly placed before STRING_BUILDER_POOL acquisition
  • GetABRegistryVersionsByPointersAsync split into two overloads — bodyBuilder.ToString() creates an immutable string copy before sbScope is disposed, so GenericPostArguments.CreateJson holds a valid reference throughout the second overload's lifetime
  • UniTask.SwitchToMainThread() correctly in the second overload only (the one that calls URLBuilder and makes the web request)
  • element.pointers.Length == 0 guard with ReportHub.LogException in AssetBundleRegistryVersionHelper
  • CreateAssetBundleManifestFallbackAsync (new) correctly skips null/empty check and Sentry breadcrumb for scenes fetched from catalyst — the skip of InjectContent for the LSD path is intentional (local assets don't need manifest content injection)
  • CheckAssetBundleManifestFallbackAsync(EntityDefinitionBase) retains the InjectContent call after the internal check — assetBundleManifestVersion is guaranteed non-null after CheckAssetBundleManifestFallbackInternalAsync (either set to CreateManualManifest, CreateFromFallback, or CreateFailed, or was already non-null/non-empty)
  • EntitiesActiveElements URL always routes wearable/emote lookups to the AB registry, bypassing the ASSET_BUNDLE_FALLBACK feature flag (intentional)
  • ✅ Constructor visibility (internal) correct on LoadEmotesByPointersSystem
  • AssetBundlesVersions.versions private set property — Create() factory is the only setter, semantically safe
  • GatewayUrlsSource inherits from DecentralandUrlsSource, new EntitiesActiveElements case handled automatically
  • ✅ Test in BatchPointersSystemShould.cs updated to stub DecentralandUrl.EntitiesActiveElements
  • ✅ Unused using Sentry and using UnityEngine removed from AssetBundleManifestFallbackHelper
  • ✅ Comment formatting and double-space fixes applied

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
QA_REQUIRED: YES

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 7, 2026

🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

System.Exception: AssetBundleManifestFallbackHelper: AB Manifest Fallback requested

4 participants