4.3.36: Sharlayan 9.2.1, Screen Capture and App Control crash fixes, providers report start-up failures - #208
Open
logicallysynced wants to merge 6 commits into
Open
4.3.36: Sharlayan 9.2.1, Screen Capture and App Control crash fixes, providers report start-up failures#208logicallysynced wants to merge 6 commits into
logicallysynced wants to merge 6 commits into
Conversation
…4.3.31 -> v4.3.32) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ts stop reporting as errors (v4.3.32 -> v4.3.33) Fixes CHROMATICS-1D Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n, single surface read per tick Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ort instead of loading silently (v4.3.33 -> v4.3.34) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…stop reporting as app errors (v4.3.34 -> v4.3.35) Fixes CHROMATICS-1F Fixes CHROMATICS-1G Fixes CHROMATICS-1H Fixes CHROMATICS-1J Fixes CHROMATICS-1K Fixes CHROMATICS-1M Fixes CHROMATICS-1N Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nce for every toggle, Sharlayan 9.2.1 (v4.3.35 -> v4.3.36) Restores the 4.3.32 changelog heading dropped in 795bd23. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Covers v4.3.32 through v4.3.36 on top of the 4.3.31 release. Nine Sentry issues fixed across two triage rounds.
Sharlayan 9.2.1
The first stable release carrying the FFXIV 7.55 reader work: corrected inventory slot-array pointer reads with an FCS-derived item stride, chat-log index clamps for torn reads, hoisted hotbar chain resolution, direct status parsing, and bulk enmity and condition reads. No public API moved, so the upgrade is the package reference in both projects plus NLog moving to 6.2.0 to meet the new floor.
Screen Capture layer stopped working after the title screen (CHROMATICS-1D)
634 events across 2 users on 4.3.31.
GameControllerdisposes the layer processors every time the player returns to the title or character-select screen, and disposal nulls each processor's cached surface. Every processor clears its_instanceon dispose so the factory rebuilds it, exceptScreenCaptureProcessor, whose instance was astatic readonlyfield that could never be replaced. The factory handed the disposed object back for the rest of the session andAttachthrew against the null surface on every tick. RGB.NET'sAttachextension has no null guard and inlines, which is why the stack pointed atProcesswith no RGB.NET frame.For the user that meant picking Screen Capture as the base layer, logging out to character select once, and losing lighting until restart. The processor now follows the same lazy-singleton pattern as its 33 siblings, and
Processreads the surface once per tick so shutdown disposal on the UI thread cannot null it mid-tick.Windows App Control crashes (CHROMATICS-1F/1G/1H/1K/1M/1N)
Six issues, three users, one cause: App Control blocks the unsigned RGB.NET assemblies by file, while the signed executable runs fine.
Two were real crashes, both from the JIT-load trap behind CHROMATICS-17 and 19.
FirstRunDialog.OnContinuenamedLogitechDeviceProviderin the handler's own body, so the assembly resolved while the handler was being JIT-compiled - before anytryinside it existed - and took the Continue button down.DeviceToggleItemstarts its work fire-and-forget from a property setter, so a blocked DLL faulted a task nobody observed and the finalizer rethrew it. The probe now runs inside a guard lambda, and the toggle task catches, reports, and returns the toggle to its previous position.The other four were the guard working correctly and reporting to Sentry anyway. App Control blocks now reach the console tab only, since they are the machine's policy rather than a fault here. Load failures from any other cause still report, because those could be a packaging mistake. Every toggle now gives the same guidance: the classification moved into
AssemblyLoadGuard.TryReportLoadFailure, called from the toggle catch, so the hand-built toggles (Logitech, OpenRGB, Hue, LIFX and the rest) no longer show a raw loader message. It walks the exception chain, since the fault arrives wrapped in aTargetInvocationExceptionfrom an event handler or anAggregateExceptionfrom an unobserved task.Providers report what went wrong
RGB.NET's
Loadinitializes withthrowExceptions: false, and itsThrow()raises an event and returns rather than rethrowing. A provider whose native SDK was missing or refused to start reported success: the HID scan still listed the hardware, so devices appeared in the Mapping tab and never lit, with nothing in the console tab and nothing returned to the caller. This is what made a Logitech provider with nox64natives look like a toggle that did nothing.LoadProviderWithDiagnosticsreplaces thesurface.Loadcall. It initializes withthrowExceptions: trueand attaches a probe that decides per exception: critical ones abort that provider and return to the caller, non-critical ones name the skipped device and let the load continue, matching what RGB.NET intends when one device of several fails to add. Everything is caught inside the helper, so a failing provider never stops the ones after it. A provider that loads and returns zero devices now says so too.One visible change: with a genuinely dead SDK, devices no longer appear in the Mapping tab, because a critical failure resets the provider instead of leaving a half-initialized one. A listed device that cannot light is what sent us down this path.
Smaller fixes
NetworkFailureHelper. The Yeelight and LIFX discovery sweeps use the same classification, where a firewall blocking broadcast produced identical noise.Notes
dd0a0e15and445282b6- among them the probe reporting working providers as failed, the first-run wizard persisting a blocked provider, and a changelog heading I dropped in795bd238.🤖 Generated with Claude Code