fix: store failed result for emotes to prevent infinite 404 retry loop#8619
Conversation
When emote asset bundles fail to load (404), AssetResults[bodyShape] was left as null, causing CreateAssetBundlePromiseIfRequired to create a new promise every frame — looping indefinitely. Store a failed StreamableLoadingResult on failure, matching the pattern already used by wearables (SetAsFailed). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Windows and Mac build successful in Unity Cloud! You can find a link to the downloadable artifact below. |
|
Thanks for opening this PR! Here's how the review process works: Auto-review is running — this is a For the full review process, labels, and merge requirements, see Branch & PR Standards. |
|
Claude finished @dalkia's task in 2m 17s —— View job Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returns a 404, Does the diff fix the cause or a symptom? ✅ Root cause. The fix stores a non-null No Blocking Issues FoundThe implementation is correct and consistent:
REVIEW_RESULT: PASS ✅ |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
|
Claude finished @dalkia's task in 1m 16s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returns 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Note: the only diff vs my previous review is the merge commit No Blocking Issues Found
REVIEW_RESULT: PASS ✅ |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
|
Claude finished @dalkia's task in 55s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Note: the only diff vs my previous review is the new merge commit No Blocking Issues Found
REVIEW_RESULT: PASS ✅ |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
Ludmilafantaniella
left a comment
There was a problem hiding this comment.
Tested on Windows and macOS ✅
8619-evi2.mp4
8619-evi.mp4
✅Smoke test:
- ✔️ Backpack and wearables in world
- ✔️ Emotes in world and in backpack
- ✔️ Teleport with map/coordinates/Jump In
- Genesis Plaza (scene emotes)
- The Inn (autoEmotes)
- ✔️ Chat and multiplayer
- ✔️ Profile card
- ✔️ Camera
- ✔️ Skybox
|
Claude finished @dalkia's task in 48s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Note: substantive change in No Blocking Issues Found
REVIEW_RESULT: PASS ✅ • Branch: |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
|
Claude finished @dalkia's task in 53s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Note: substantive change in No Blocking Issues Found
REVIEW_RESULT: PASS ✅ • Branch: |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
Tests previously asserted AssetResults[bodyShape] was null on failure, but the retry-loop fix now stores a failed StreamableLoadingResult. Update assertions to verify the result is set and marked as failed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Claude finished @dalkia's task in 1m 8s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Delta vs prior reviews: the new commit No Blocking Issues Found
REVIEW_RESULT: PASS ✅ • Branch: |
|
Claude finished @dalkia's task in 1m 4s —— View job Claude finished reviewing PR #8619 — Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Delta vs prior review: a new merge commit No Blocking Issues Found
REVIEW_RESULT: PASS ✅ |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
|
Claude finished @dalkia's task in 51s —— View job Claude finished reviewing PR #8619 Review
Root-Cause AnalysisProblem: When an emote asset bundle (or GLTF) returned 404, Does the diff fix the cause or a symptom? ✅ Root cause. The new (Delta vs prior review: new merge commit No Blocking Issues Found
REVIEW_RESULT: PASS ✅ • Branch: |
|
🔍 Claude reviewed this PR and found no blocking issues, but assessed it as complex — human DEV review is still required before merging. |
Pull Request Description
What does this PR change?
When emote asset bundles (or GLTFs) fail to load — for example, because the emote does not exist in the
zoneenvironment and returns a 404 —FinalizeEmoteLoadingSystemwas only logging a warning and leavingAssetResults[bodyShape]asnull. This causedCreateAssetBundlePromiseIfRequiredto create a new promise every frame, producing an infinite loop of 404 requests and, in some cases, preventing the avatar from ever loading.This PR cherry-picks the emote-loading portion of #8504 into
dev. That PR was originally merged onto a WebGL branch, so the fix never reacheddevand the issue is still present.The fix stores a failed
StreamableLoadingResulton the failure branch in bothFinalizeAssetBundleLoadingandFinalizeGltfLoading, mirroringSetAsFailedinFinalizeWearableLoadingSystemBase. The non-null result stopsCreateAssetBundlePromiseIfRequiredfrom re-creating the promise every frame, which lets the avatar finish loading.Test Instructions
Prerequisites
zoneenvironmentTest Steps
zone.Additional Testing Notes
SetAsFailedinFinalizeWearableLoadingSystemBase), so behavior should be consistent with how missing wearables are handled today.Quality Checklist
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.