Skip to content

fix: bugsweep dataroom 3 — compounded fixes (24 PRs) - #9828

Open
lorenzo-ranciaffi wants to merge 25 commits into
devfrom
bugsweep/dataroom-3
Open

fix: bugsweep dataroom 3 — compounded fixes (24 PRs)#9828
lorenzo-ranciaffi wants to merge 25 commits into
devfrom
bugsweep/dataroom-3

Conversation

@lorenzo-ranciaffi

Copy link
Copy Markdown
Contributor

Pull Request Description

What does this PR change?

Compounded bugsweep branch (bugsweep/dataroom-3dev) that merges the changes from the following PRs, one commit per PR:

Based on dev:

Based on main (only the PR's own changes were taken):

Test Instructions

Test Steps

  1. Movement stays unlocked after typing (fix: unblock camera/avatar input after paste or Alt-Tab focus loss #9600): open the chat, paste some text into the input, then close the chat. Also Alt-Tab out and back while the chat input is focused. In both cases you can still walk and move the camera afterwards.
  2. Emotes never get stuck (fix: emote play-timeout watchdog never fires, stranding emote intents #9626): in a scene that plays its own emotes (e.g. the Genesis Plaza fishing minigame), interrupt/finish the scene animation, then open your emote wheel and play your own emotes — they all still work.
  3. Emote/backpack thumbnails recover (fix: retry avatar thumbnail loads after a failed attempt instead of rethrowing forever #9790): open the backpack and the emote wheel — all thumbnails load. If one ever fails, closing and reopening the panel loads it instead of leaving a spinner forever.
  4. Chat mentions (fix: send mention wallet strings, not UserId objects, in chat analytics #9793): send a chat message that @mentions another user — the message sends normally with no errors.
  5. Sharp minimap in fullscreen (fix: resize map render texture when screen resolution changes #9803): start the client windowed, then switch to fullscreen — the minimap and the map (navmap satellite view) stay sharp instead of turning pixelated.
  6. Scene UI keeps the right size (fix: report scene UI panel's real pixels-per-point as DevicePixelRatio #9625): visit a scene with on-screen UI — the UI renders at the correct size, and doesn't resize when the window is moved between monitors with different resolutions.
  7. Changing realms/worlds (fix: discard duplicate scene facade for already-cached parcels and serialize realm changes #9807): jump between realms/worlds a few times in quick succession — everything loads normally each time, with no crash or scenes loading twice.
  8. Scene content stays loaded (fix: keep checked-out GLTF clones alive when AssetPreLoadCache clears #9799): teleport between several scenes and back — scene objects keep loading and none silently disappear.
  9. Debug console under load (fix: make debug console log ingestion thread-safe via pending queue #9796): open the debug console in a busy scene that logs a lot — it updates smoothly with no errors.
  10. Private chats in Creator Hub preview (fix: resolve private conversation user state without friends service #9805): create a local scene in the Creator Hub and preview it (this starts the client in local scene development mode, where the friends system is disabled). Once in, open a private conversation with another user — the chat opens and works with no errors, and the call button correctly shows the user as unavailable instead of wrongly appearing callable.

All remaining changes (#9634, #9633, #9632, #9791, #9792, #9794, #9795, #9798, #9801, #9802, #9804, #9806, #9811) are internal fixes not directly experienceable — a general smoke test (log in, walk around, chat, teleport, quit) validates them.

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

🤖 Generated with Claude Code

lorenzo-ranciaffi and others added 5 commits August 21, 2026 10:34
Squashed changes from PR #9634.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ev (#9633)

Squashed changes from PR #9633.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…me (#9632)

Squashed changes from PR #9632.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#9626)

Squashed changes from PR #9626.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#9625)

Squashed changes from PR #9625.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@lorenzo-ranciaffi
lorenzo-ranciaffi requested review from a team as code owners August 21, 2026 08:41
@github-actions
github-actions Bot requested a review from DafGreco August 21, 2026 08:41
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🚦 CI Status

Build

New build in progress, come back later!

Lint

Lint in progress, come back later!

Tests

⚠️ EditMode produced no results — the run likely crashed or timed out before finishing. Check the Unity Test / Test (editmode) job.

TESTS SUITE Result Passed Failed Skipped
EditMode ⚠️ No results
PlayMode ❌ 1 failed 240 1 37
Failed tests (1)
  • [playmode] DCL.SDKComponents.SceneUI.Tests.UICanvasInformationSystemShould.RepublishWhenScenePanelPixelsPerPointChanges

@decentraland-bot
decentraland-bot self-requested a review August 21, 2026 08:41
@lorenzo-ranciaffi
lorenzo-ranciaffi marked this pull request as draft August 21, 2026 08:45
lorenzo-ranciaffi and others added 19 commits August 21, 2026 10:47
…9600)

Squashed changes from PR #9600.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ethrowing forever (#9790)

Squashed changes from PR #9790.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#9791)

Squashed changes from PR #9791.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squashed changes from PR #9792.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…cs (#9793)

Squashed changes from PR #9793.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9794)

Squashed changes from PR #9794.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squashed changes from PR #9795.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9796)

Squashed changes from PR #9796.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squashed changes from PR #9798.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#9799)

Squashed changes from PR #9799.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nnot load (#9801)

Squashed changes from PR #9801.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9802)

Squashed changes from PR #9802. Conflicts with dev resolved keeping dev's existing nullable ?. call style.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squashed changes from PR #9803.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Squashed changes from PR #9804.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9805)

Squashed changes from PR #9805.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9806)

Squashed changes from PR #9806.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rialize realm changes (#9807)

Squashed changes from PR #9807.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…E and abort cache cleanup (#9810)

Squashed changes from PR #9810.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rts (#9811)

Squashed changes from PR #9811.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@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.

Code Review — PR #9828

STEP 1 · Context

Compound PR merging 24 individually-reviewed bug fixes from the Data Room 3 sweep into dev. Changes span ~110 files across auth flow, avatar rendering, chat analytics, CRDT/ECS bridge, asset bundles, scene lifecycle, scene runtime, EventBus, WebSocket, map renderer, multiplayer, notifications, diagnostics/Sentry, debug console, scene loading screens, Web3 signing, KTX texture support, and scene UI canvas. Each sub-PR targets a distinct production bug or performance regression.

STEP 2 · Root-cause check

PASS — every fix addresses the actual root cause:

Sub-PR Root cause addressed
#9626 C# operator precedence (?? vs +) — the arithmetic was grouping 0 + dt inside the fallback
#9634 Oversized scene messages thrown instead of dropped — now fails gracefully
#9795 CRDT rent slot leaked on processing failure — AbortSyncCommandBuffer releases cleanly
#9799 GLTF cache disposed clones still checked out by containers — ownership transferred
#9806 Nethereum returns unsigned-trimmed private key bytes — left-pad to 32
#9807 No serialization of realm changes + duplicate scene facades — semaphore + parcel dedup
#9810 DisposeThumbnail guarded by IsInitialized (true for failed results) instead of Succeeded
#9811 WebSocket ConnectAsync not cancellable — linked CTS unparks the pending await
All others Each similarly addresses the underlying defect, not a symptom

STEP 3 · Design & integration

PASS — no new lifecycle owners were introduced beyond what's needed:

  • CorruptAbCacheEvictor — static utility, zero lifecycle state
  • KtxNativeSupport — lazy static probe, fail-closed, session-permanent
  • CategoryExclusionMatrix — decorator for Sentry scope, scoped to report lifetime
  • PooledContinuation<T> — allocation-free optimization of existing EventBus hop
  • DCLSemaphoreSlim in RealmController — serializes realm changes at the correct scope

No duplicated subsystems; all new types sit at the appropriate abstraction level.

STEP 4 · Member audit

PASS — new public/internal members are well-scoped:

  • ICRDTWorldSynchronizer.AbortSyncCommandBuffer — two call sites (both catch blocks in EngineAPIImplementation), appropriate contract addition
  • KtxNativeSupport.IsSupported / MarkUnsupported — consumed by GetTextureWebRequest, RequestHub, NFTShapePlugin; internal Reset/probeOverride are test-only
  • InterlockedFlag on SceneRuntimeImpl.isDisposing — private, guards concurrent SetIsDisposing entry
  • GenericDownloadHandlerUtils.PopulateInto<T> — internal, consumed by OverwriteFromNewtonsoftJsonAsync

STEP 5 · Line-level review

See inline comments. One P2 finding (defensive guard in LeftPad).

Notable well-executed patterns:

  • SignedFetchWrap: Capturing disposeCts.Token (value type) before the SwitchToMainThread hop correctly prevents the race where the CTS is disposed during the hop. Excellent root-cause fix.
  • PooledContinuation: The copy-to-locals-then-recycle pattern prevents reentrant publish corruption and avoids retaining class-typed payloads in the pool. The double-run guard with typedDelegate is not { } is a clean safety net.
  • CRDT delegated flag: Exactly-one-of-Apply-or-Abort semantics prevent both slot leaks and double-releases. The flag placement (set immediately before the ApplySyncCommandBuffer call) is correct.
  • CommsApiWrap copy-on-write: Volatile array reference with Interlocked.Exchange on mutation is the right lock-free pattern for high-frequency reads on the LiveKit thread.
  • DebugMenuConsoleLogHistory: The pending-queue/main-thread-drain pattern with bounded capacity is correct. The drainBuffer.Clear() is placed before LogsUpdated?.Invoke(), preventing stale entries on subscriber exceptions.

STEP 6 · Complexity

HIGH — 24 distinct bug fixes touching concurrency (CTS races, thread-safe dispose, lock-free data structures), memory management (pool patterns, ownership transfer, rent-slot lifecycle), ECS integration (structural changes during queries, component lifecycle), and native interop (KTX probe, Rust FFI key padding). Each fix is individually well-scoped, but the aggregate surface area is substantial.

STEP 7 · QA assessment

QA_REQUIRED: YES — production bug fixes across core subsystems (auth, rendering, comms, scene lifecycle, Web3 signing). 30+ new test files provide strong unit coverage, but integration-level validation of the compound effect is warranted.

STEP 8 · Warnings

  • CI: Most checks show skipping — expected for compound PRs where individual sub-PRs carried their own CI runs. Build Gate, Merge Eligibility, rsp match, and semantic title checks all pass.
  • No security issues found: No secrets committed, input validation improved (oversized message dropping), private key handling is correctness-only (left-padding, not new exposure), thread-safety improvements reduce race-condition attack surface.

STEP 9 · Verdict

REVIEW_RESULT: PASS
COMPLEXITY: HIGH
COMPLEXITY_REASON: 24 cross-cutting bug fixes spanning concurrency, memory management, ECS lifecycle, native interop, and thread safety across 110+ files
QA_REQUIRED: YES

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


private static byte[] LeftPad(byte[] value, int size)
{
if (value.Length == size)

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.

[P2] Defensive guard: LeftPad crashes on oversized input

If value.Length > size, the Buffer.BlockCopy destination offset (size - value.Length) goes negative, throwing ArgumentOutOfRangeException. While secp256k1 private keys are always ≤ 32 bytes in practice, a >= guard is strictly safer — it lets RustEthSignServer.Initialize reject the oversized key with a meaningful error instead of crashing in LeftPad.

Suggested change
if (value.Length == size)
if (value.Length >= size)

@github-actions

Copy link
Copy Markdown
Contributor

🔍 Jarvis 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 marked this pull request as ready for review August 21, 2026 08:51
@decentraland-bot
decentraland-bot self-requested a review August 21, 2026 08:51

@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 — fix: bugsweep dataroom 3 — compounded fixes (24 PRs)

STEP 2 — Root-cause check: PASS ✅

All 24 sub-PRs address actual root causes rather than symptoms:

  • Operator-precedence bug (CharacterEmoteIntent): ?? binding 0 + dt as the fallback → fixed by parenthesizing (playTimeout?.ElapsedTime ?? 0) + dt.
  • Shared-mutable-state (ChatMessagesBusAnalyticsDecorator): static JArray replaced with per-event local; UserId.Value extracts the string instead of boxing the struct.
  • Thread-safety (DebugMenuConsoleLogHistory): direct list mutation from log callback replaced with a producer queue + main-thread drain.
  • Rent-slot leak (EngineAPIImplementation): CRDT reconciliation wrapped in try/catch to call AbortSyncCommandBuffer on failure, ensuring the single rent slot is always released.
  • Realm race (RealmController): added DCLSemaphoreSlim to serialize SetRealmAsync so parallel realm switches can't corrupt the entity graph.
  • Thumbnail disposal (4 storage classes): changed from IsInitialized: true to Succeeded: true — failed/cancelled results carry default SpriteData that must not have RemoveReference called.
  • Private-key padding (RustEthereumAccount): LeftPad ensures 32-byte big-endian scalar for the ~1/256 of keys whose MSB is zero.
  • Connection parking (DCLWebSocket): connectAbort CTS unparks pending ConnectAsync on close/dispose.
  • Input-block refcount leak (SceneLoadingScreenController): idempotent Block/Unblock with an inputsBlocked flag prevents refcount drift when the outer token is cancelled or the scene never finishes loading.
  • MVC cascade failure (MVCManager): try/catch in dispose loop so one controller's failure doesn't abort disposal of the rest.
  • KTX2 native fallback (KtxNativeSupport): probe + runtime MarkUnsupported() degrades gracefully when the native plugin can't load.
  • Asset ownership (AssetPreLoadCache): removed Copies list — clones are owned by their containers, fixing a double-dispose hazard.
  • CRDT slot leak (CrdtEcsSynchronizer): new AbortSyncCommandBuffer() releases the semaphore for buffers that never reach ApplySyncCommandBuffer.
  • Corrupt AB cache (CorruptAbCacheEvictor + LoadAssetBundleSystem): evicts poisoned Unity Caching entries and retries once.
  • Allocation-free event dispatch (EventBus): PooledContinuation<T> replaces the closure-based thread hop.
  • Allocation-free topic matching (CommsApiWrap): copy-on-write TopicLookupEntry[] with span comparison on the LiveKit thread.

No symptom-only workarounds detected.

STEP 3 — Design & integration: PASS ✅

Owner search results:

  • ControlSceneUpdateLoopSystem.AnyParcelHasLiveScene(): Runs once per entity when ScenePromise resolves — not a per-frame scan. Correct placement at the creation moment.
  • CorruptAbCacheEvictor: Stateless static utility called from LoadAssetBundleSystem; no lifecycle to manage. Correct.
  • CategoryExclusionMatrix: Thin 19-line decorator over ICategorySeverityMatrix; appropriate for the local-scene-dev exclusion. Correct.
  • KtxNativeSupport: Machine-level static capability check; legitimate as a static class. Correct.
  • PooledContinuation<T>: Implementation detail nested inside EventBus. Correct home.
  • SceneLoadingScreenController.inputsBlocked: UI-layer state correctly outside ECS.
  • MVCManager try/catch: Exception routed through ReportHub.LogException, not swallowed. Correct.
  • ISceneTipsProvider async→sync: All 3 implementations and sole caller updated consistently; async was vestigial. Correct.

Teardown trace: Subscriptions, CTS, semaphores, and buffers in the diff all have matching teardown/release paths — one minor note on realmChangeSemaphore disposal below.

Security review: No critical or high findings. Medium: private key bytes in RustEthereumAccount not zeroed after Initialize() (pre-existing pattern, not introduced by this PR). All thread-safety, race-condition, and resource-leak patterns reviewed — no issues found.

STEP 5 — Line-level findings

All findings are P2 (minor). No P0 or P1 issues found.

See inline comments for specific suggestions.

Additional notes (body-only):

  1. [P2 — Security] RustEthereumAccount.cs: The LeftPad copy of the private key bytes (byte[32]) is abandoned to the GC after RustEthSignServer.Initialize(bytes). Pre-existing pattern — consider Array.Clear(bytes, 0, bytes.Length) after Initialize() in a follow-up.

  2. [P2 — Simplification] KtxNativeSupport.cs probe: The eager Probe() with garbage input duplicates the lazy MarkUnsupported() fallback already in GetTextureWebRequest.cs. The probe adds complexity and a harmless-but-expected error log in debug builds. Consider removing the probe in a follow-up, defaulting IsSupported to true, and relying solely on MarkUnsupported().

  3. [P2 — Design] EngineAPIImplementation.cs delegated flag: The ownership-transfer between the caller's delegated boolean and the synchronizer's internal finally release is correct today but comment-linked, not compiler-enforced. A future change to CrdtEcsSynchronizer.ApplySyncCommandBuffer could silently reintroduce a slot leak. Low risk, but worth noting.

STEP 6 — Complexity: COMPLEX

Touches ECS systems, CRDT synchronization, scene lifecycle, networking, asset loading, async/cancellation, memory management, and diagnostics across 110+ files.

STEP 7 — QA: YES

Extensive runtime code changes affecting scenes, avatars, networking, input, loading screens, asset loading, and diagnostics.

STEP 8 — Warnings

No Main.unity changes detected.

STEP 9 — Verdict

Excellent compound PR. 24 root-cause fixes with comprehensive regression tests (~40 new test files). Each sub-PR addresses a real bug with thorough documentation. All findings are P2 minor — no blockers.

REVIEW_RESULT: PASS ✅
COMPLEXITY: COMPLEX
COMPLEXITY_REASON: Touches ECS systems, CRDT synchronization, scene lifecycle, networking, asset loading, async/cancellation, and diagnostics across 110+ files
QA_REQUIRED: YES


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

Comment thread Explorer/Assets/DCL/Infrastructure/Utility/EventBus/EventBus.cs
Comment on lines +86 to +87
ReportHub.LogWarning(GetReportData(), $"Duplicate scene definition for '{definitionComponent.Definition.GetLogSceneName()}': discarding its facade");
scene.DisposeAsync().Forget();

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.

[P2] Detached async disposal (CLAUDE.md §9). scene.DisposeAsync().Forget() silently drops any exception from the rejected facade's disposal. While .Forget() for disposal has codebase precedent, adding SuppressToResultAsync ensures exceptions are logged.

Suggested change
ReportHub.LogWarning(GetReportData(), $"Duplicate scene definition for '{definitionComponent.Definition.GetLogSceneName()}': discarding its facade");
scene.DisposeAsync().Forget();
ReportHub.LogWarning(GetReportData(), $"Duplicate scene definition for '{definitionComponent.Definition.GetLogSceneName()}': discarding its facade");
scene.DisposeAsync().SuppressToResultAsync(ReportCategory.SCENE_LOADING).Forget();

@decentraland-bot

Copy link
Copy Markdown
Contributor

PR #9828, run #32468727655

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

How to read this table
  • Each build is measured 3 times. The values are the median, and (min–max) is the lowest and highest of those runs — a wide range means the metric is noisy and small differences are not trustworthy.
  • Δ is Change minus Baseline (a negative Δ means Change is faster).
  • 🟢 faster / 🔴 slower — a real difference: larger than both 3% and the run-to-run range.
  • ⚪ within noise — the difference is smaller than how much the build varies between its own runs, so it cannot be told apart from random variation. Treat it as no change.
  • Exceptions per run — the average number of exceptions in a run's log; more than the baseline is flagged 🔴 even when frame times look fine. The Exception breakdown under each table groups them by the explorer's report category and exception type (as totals across the runs).
  • A run that logged unusually many exceptions (at least 10 and 5× the median of its build's runs — e.g. a service was down during it) is excluded from all numbers and called out under the table.

Intel Core i5

Metric Baseline Change Δ Result
Samples 2309 (×3) 2380 (×3)
CPU average 38.7 ms (35.5–38.8) 37.4 ms (36.8–38.1) -1.2 ms ⚪ within noise
CPU 1% worst 339.3 ms (269.4–350.7) 303.6 ms (286.0–311.1) -35.7 ms ⚪ within noise
CPU 0.1% worst 358.7 ms (353.5–360.8) 320.4 ms (300.1–325.7) -38.3 ms 🟢 11% faster
GPU average 7.8 ms (7.8–7.9) 8.3 ms (8.2–8.4) 0.5 ms 🔴 6% slower
GPU 1% worst 18.7 ms (18.6–19.0) 19.6 ms (19.4–20.4) 0.8 ms ⚪ within noise
GPU 0.1% worst 19.3 ms (19.1–19.6) 22.0 ms (21.8–22.5) 2.7 ms 🔴 14% slower
Exceptions per run 65 0 -65 🟢 fewer errors
Exception breakdown
Exception Baseline (3 runs) Change (3 runs)
[UI] DllNotFoundException 192 0
[ENGINE] ObjectDisposedException 3 0

Apple M1

Metric Baseline Change Δ Result
Samples 3981 (×3) 3916 (×3)
CPU average 22.5 ms (21.5–22.6) 22.8 ms (22.4–22.9) 0.3 ms ⚪ within noise
CPU 1% worst 208.5 ms (203.9–222.5) 221.0 ms (189.5–226.7) 12.6 ms ⚪ within noise
CPU 0.1% worst 229.7 ms (226.0–229.9) 233.7 ms (229.9–233.8) 4.0 ms ⚪ within noise
GPU average 3.4 ms (2.3–9.1) 6.1 ms (5.5–11.9) 2.7 ms ⚪ within noise
GPU 1% worst 35.9 ms (34.0–36.4) 37.3 ms (36.5–37.7) 1.4 ms ⚪ within noise
GPU 0.1% worst 37.0 ms (35.4–38.4) 40.0 ms (39.4–40.5) 3.1 ms 🔴 8% slower
Exceptions per run 0 0 0 ⚪ none new

This was referenced Aug 21, 2026
Trim the comments this branch added down to their load-bearing facts:
drop Arrange/Act/Assert scaffolding, restated-code narration, and
multi-line essays; keep regression references (issues and Sentry IDs).

Review fixes:
- ControlSceneUpdateLoopSystem: log duplicate-facade disposal failures
  via SuppressToResultAsync instead of a bare Forget
- RustEthereumAccount: LeftPad returns oversized input unchanged so
  RustEthSignServer.Initialize rejects it instead of crashing
- EventBus: justify the default! on the pooled continuation payload
- PrivateConversationUserStateService: drop the file-wide
  InconsistentNaming suppression
@lorenzo-ranciaffi lorenzo-ranciaffi self-assigned this Aug 21, 2026
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.

System.InvalidOperationException: Collection was modified; enumeration operation may not execute. System.InvalidOperationException: Collection was modified; enumeration operation may not execute. System.DllNotFoundException: Unable to load DLL 'ktx_unity'. Tried the load the following dynamic libraries: Unable to load dynamic library 'ktx_unity' because of 'C:\build\output\unity\unity\External\il2cpp\builds\external\baselib\Source\WinApi\Baselib_DynamicLibrary_WinApi.inl.h(... System.DllNotFoundException: Unable to load DLL 'ktx_unity'. Tried the load the following dynamic libraries: Unable to load dynamic library 'ktx_unity' because of 'Failed to open the requested dynamic library (0x06000000) - The specified module could not be found. (WinError:0000007e) System.TimeoutException: Rent Wait Timeout: Couldn't rent command buffer

3 participants