Skip to content

FIX: ISXB-1097 Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design.#2412

Open
ekcoh wants to merge 8 commits intodevelopfrom
isxb-1097-event-suppression-fix
Open

FIX: ISXB-1097 Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design.#2412
ekcoh wants to merge 8 commits intodevelopfrom
isxb-1097-event-suppression-fix

Conversation

@ekcoh
Copy link
Copy Markdown
Collaborator

@ekcoh ekcoh commented Apr 29, 2026

Description

Summary

Fixes ISXB-1097: Setting InputEventPtr.handled = true does not prevent actions from triggering when switching devices.

Root Cause

The default event handled policy (SuppressStateUpdates) discards handled events entirely, including their state updates. This desynchronizes the Input System's internal device state from the actual source state. When the user switches to a different device, the non-handled event arrives while the previous device still has stale state, causing spurious action triggers.

Fix
  • Changed the default policy from SuppressStateUpdates to SuppressActionEventNotifications. Under the new default, handled events still propagate state updates (keeping device state synchronized) but suppress action callback notifications (Started/Performed/Canceled). The pull-based action APIs (WasPressedThisFrame, WasPerformedThisFrame) are also gated by the suppression flag and return false for suppressed events.
  • Deprecated SuppressStateUpdates with [Obsolete] (warning, not error) and an explanatory message. Existing code continues to compile but will receive warnings.
  • Fixed accidental handled flag in ResetDevice: the synthetic reset event used eventId = -1 as a sentinel, which set all bits including the handled flag (bit 31 of eventId). Changed to InputEvent.InvalidEventId so the handled bit is not accidentally set.
  • Fixed RebindingOperation to only override the global event handled policy when the user makes an explicit choice via WithActionEventNotificationsBeingSuppressed(). Previously, the uninitialized field defaulted to SuppressStateUpdates, silently overriding whatever policy was configured globally.
  • Changed event suppression from map-wide to per-action tracking. All WasXxxThisFrame() and WasXxxThisDynamicUpdate() polling APIs now check a per-action Suppressed flag on TriggerState (bit 7 of the existing flags byte) instead of a shared m_Suppressed bool on InputActionState. The flag is stamped when each action's phase changes, so it correctly reflects whether the specific event that triggered that action was handled. This fixes false positives/negatives when multiple events with mixed handled/unhandled states arrive in the same frame. Also fixes WasReleasedThisFrame(), WasCompletedThisFrame(), and their DynamicUpdate variants which previously did not check suppression at all.

Behavioral Changes

Scenario Before (SuppressStateUpdates) After (SuppressActionEventNotifications)
Handled event device state Not updated (discarded) Updated (state propagates)
Handled event action callbacks Not fired (event never processed) Not fired (suppressed by m_Suppressed)
control.isPressed after handled press false true (reflects actual device state)
action.WasPressedThisFrame() after handled press false (no state update) false (gated by IsSuppressed)
action.WasReleasedThisFrame() after handled release false false (now gated by IsSuppressed)
action.WasCompletedThisFrame() after handled event false false (now gated by IsSuppressed)
Device switch after handled event Spurious action triggers (stale state) No spurious triggers (state synchronized)

Migration for Existing Projects

Existing projects are not affected by this change. The event handled policy is serialized as part of InputManager state, so projects that were using the old default (SuppressStateUpdates) will retain it upon deserialization.

To opt in to the new behavior in an existing project, set the policy explicitly:

InputSystem.manager.inputEventHandledPolicy = InputEventHandledPolicy.SuppressActionEventNotifications;

Or equivalently:

InputSystem.manager.inputEventHandledPolicy = InputEventHandledPolicy.Default;

Projects explicitly using SuppressStateUpdates will receive an [Obsolete] compiler warning guiding them to switch.

Open Design Question

When a device is reset (InputSystem.ResetDevice), pass-through actions currently emit both Canceled and Performed(0f) — because pass-through actions fire on any value change, including the reset-to-default. This is consistent with the pass-through contract but inconsistent with button/value actions (which only emit Canceled). If we decide to suppress the Performed(0f) on reset, the synthetic reset event should be explicitly marked as handled rather than relying on sentinel values. See inline design note in CoreTests_Actions.cs.

Testing status & QA

Have run editor, playmode and player tests locally to verify functional behaviour essentially verifying:

  • Verify Events_HandledEventsShouldNotTriggerActionsWhenSwitchingDevices passes (direct ISXB-1097 regression test — device switching)
  • Verify Events_HandledPressEdgeInMultiEventFrameShouldNotTriggerActions passes (ISXB-1097 regression test — multi-event frame, e.g. DualSense 600 Hz)
  • Verify Events_AllWasXxxThisFrameAPIsRespectEventSuppression passes (ISXB-1097 regression test — all WasXxx polling APIs gated by per-action suppression)
  • Verify Events_PerActionSuppressionWithMixedHandledEvents passes (ISXB-1097 regression test — mixed handled/unhandled events in same frame, per-action correctness)
  • Verify EventHandledPolicy_ShouldReflectUserSetting passes with updated defaults
  • Verify Actions_InteractiveRebinding_CanSuppressEventsWhileListening passes for both SuppressStateUpdates and SuppressActionEventNotifications policies
  • Verify Actions_ResettingDevice_CancelsOngoingActionsThatAreDrivenByIt passes (pass-through Performed(0f) behavior)
  • Run full action and event test suites to check for regressions

Did basic testing with Rebinding example.

Tested repro case associated with ticket with DualSense remains to be done.

Suggest that before merge we also cover:

  • Simulated touch tooling since it relies on setting events as "handled" and check for regressions.
  • Thorough testing of Rebinding sample.
  • Testing OnScreen controls and VirtualMouse or other virtual or emulated devices.
  • Test upgrade experience for a user already having the previous default event handling behaviour setting.
  • Test experience when creating a new project.
  • Make sure XR, e.g. XRI have verified integration with these changes.

Overall Product Risks

  • Complexity: High - changes are relatively small but affect core behaviour of the system.
  • Halo Effect: High - may potentially have side effects.

Comments to reviewers

Apart from reviewing solution and test cases I also want us to decide on Open Design Question. Not emitting Performed makes much more sense and makes value types consistent in my opinion, but it would imply another behaviour change.

Checklist

Before review:

  • Changelog entry added.
    • Explains the change in Changed, Fixed, Added sections.
    • For API change contains an example snippet and/or migration example.
    • JIRA ticket linked, example (case %%). If it is a private issue, just add the case ID without a link.
    • Jira port for the next release set as "Resolved".
  • Tests added/changed, if applicable.
    • Extended existing tests and added new regression tests: Events_HandledEventsShouldNotTriggerActionsWhenSwitchingDevices, Events_HandledPressEdgeInMultiEventFrameShouldNotTriggerActions, Events_AllWasXxxThisFrameAPIsRespectEventSuppression,
      Events_PerActionSuppressionWithMixedHandledEvents
    • Performance tests.
    • Integration tests.
  • Docs for new/changed API's.
    • Xmldoc cross references are set correctly.
    • Added explanation how the API works.
    • Usage code examples added.
    • The manual is updated, if needed.

During merge:

  • Commit message for squash-merge is prefixed with one of the list:
    • NEW: ___.
    • FIX: ___.
    • DOCS: ___.
    • CHANGE: ___.
    • RELEASE: 1.1.0-preview.3.

@ekcoh ekcoh marked this pull request as ready for review April 29, 2026 19:41
@ekcoh ekcoh added the work in progress Indicates that the PR is work in progress and any review efforts can be post-poned. label Apr 29, 2026
@ekcoh ekcoh changed the title FIX: ISXB-1097 Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design. FIX: ISXB-1097 (WorkInProgress) Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design. Apr 29, 2026
Copy link
Copy Markdown
Contributor

@u-pr u-pr Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great

This review identified a potential logic issue regarding state suppression in multi-event frames and a minor cleanup in obsolete attribute messaging.

🤖 Helpful? 👍/👎

Comment thread Packages/com.unity.inputsystem/InputSystem/Actions/InputAction.cs Outdated
Comment thread Packages/com.unity.inputsystem/InputSystem/Events/InputEventHandledPolicy.cs Outdated
@codecov-proxy.fjygbaifeng.eu.org
Copy link
Copy Markdown

codecov-proxy.fjygbaifeng.eu.org Bot commented Apr 29, 2026

Codecov Report

All modified and coverable lines are covered by tests ✅

@@             Coverage Diff             @@
##           develop    #2412      +/-   ##
===========================================
+ Coverage    78.13%   78.16%   +0.03%     
===========================================
  Files          483      761     +278     
  Lines        98770   139016   +40246     
===========================================
+ Hits         77169   108668   +31499     
- Misses       21601    30348    +8747     
Flag Coverage Δ
inputsystem_MacOS_2022.3_project 75.44% <100.00%> (+0.03%) ⬆️
inputsystem_MacOS_6000.0_project 77.33% <100.00%> (+0.02%) ⬆️
inputsystem_MacOS_6000.3 5.33% <0.00%> (+0.02%) ⬆️
inputsystem_MacOS_6000.3_project 77.32% <100.00%> (+0.05%) ⬆️
inputsystem_MacOS_6000.4 5.34% <0.00%> (+0.02%) ⬆️
inputsystem_MacOS_6000.4_project 77.33% <100.00%> (+0.05%) ⬆️
inputsystem_MacOS_6000.5 5.32% <0.00%> (+0.02%) ⬆️
inputsystem_MacOS_6000.5_project 77.37% <100.00%> (+0.05%) ⬆️
inputsystem_MacOS_6000.6_project 77.36% <100.00%> (+0.05%) ⬆️
inputsystem_Ubuntu_2022.3_project 75.34% <100.00%> (+0.03%) ⬆️
inputsystem_Ubuntu_6000.0 5.34% <0.00%> (+0.02%) ⬆️
inputsystem_Ubuntu_6000.0_project 77.23% <100.00%> (+0.02%) ⬆️
inputsystem_Ubuntu_6000.3 5.34% <0.00%> (+0.02%) ⬆️
inputsystem_Ubuntu_6000.3_project 77.23% <100.00%> (+0.05%) ⬆️
inputsystem_Ubuntu_6000.4 5.34% <0.00%> (+0.02%) ⬆️
inputsystem_Ubuntu_6000.4_project 77.24% <100.00%> (+0.05%) ⬆️
inputsystem_Ubuntu_6000.5 5.33% <0.00%> (+0.02%) ⬆️
inputsystem_Ubuntu_6000.5_project 77.27% <100.00%> (+0.04%) ⬆️
inputsystem_Ubuntu_6000.6_project 77.27% <100.00%> (+0.05%) ⬆️
inputsystem_Windows_2022.3 5.36% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_2022.3_project 75.56% <100.00%> (+0.03%) ⬆️
inputsystem_Windows_6000.0 5.33% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_6000.0_project 77.46% <100.00%> (+0.03%) ⬆️
inputsystem_Windows_6000.3 5.33% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_6000.3_project 77.45% <100.00%> (+0.04%) ⬆️
inputsystem_Windows_6000.4 5.34% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_6000.4_project 77.45% <100.00%> (+0.04%) ⬆️
inputsystem_Windows_6000.5 5.32% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_6000.5_project 77.50% <100.00%> (+0.04%) ⬆️
inputsystem_Windows_6000.6 5.32% <0.00%> (+0.02%) ⬆️
inputsystem_Windows_6000.6_project 77.50% <100.00%> (+0.04%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
Assets/Tests/InputSystem/CoreTests_Actions.cs 98.41% <ø> (ø)
...s/Tests/InputSystem/CoreTests_Actions_Rebinding.cs 97.01% <100.00%> (+0.01%) ⬆️
Assets/Tests/InputSystem/CoreTests_Events.cs 98.62% <100.00%> (+0.12%) ⬆️
...tsystem/InputSystem/Runtime/Actions/InputAction.cs 92.17% <100.00%> (ø)
.../Runtime/Actions/InputActionRebindingExtensions.cs 82.43% <100.00%> (ø)
...em/InputSystem/Runtime/Actions/InputActionState.cs 92.55% <100.00%> (ø)
...ty.inputsystem/InputSystem/Runtime/InputManager.cs 89.00% <100.00%> (ø)

... and 228 files with indirect coverage changes

ℹ️ Need help interpreting these results?

@ekcoh
Copy link
Copy Markdown
Collaborator Author

ekcoh commented Apr 29, 2026

@u-pr Can you check if all previously raised concerns have been addressed in this PR?

@u-pr
Copy link
Copy Markdown
Contributor

u-pr Bot commented Apr 29, 2026

Yes, all previously raised concerns have been successfully addressed in the latest changes:

  1. Per-Action Suppression Tracking: You have moved away from the map-wide IsSuppressed flag to a per-action isSuppressed bit in TriggerState. This correctly handles the "last event wins" scenario by stamping the suppression state at the moment the action phase changes. The polling APIs (WasPressedThisFrame, etc.) now correctly reflect the handled state of the specific event that triggered them.
  2. Obsolete Message: The suggestion for the InputEventHandledPolicy.SuppressStateUpdates obsolete message was adopted exactly as proposed, improving clarity.
  3. Device Reset Side-Effect: I noticed you also addressed the sentinel value issue in InputManager.ResetDevice (changing eventId from -1 to 0), which avoids accidentally marking synthetic reset events as handled.

The new tests in CoreTests_Events.cs (specifically Events_PerActionSuppressionWithMixedHandledEvents) provide good coverage for the fixes.

🤖 Helpful? 👍/👎

// does not cause the action to start back up. For pass-through actions, that is different
// as *any* value change performs the action. So here, we see *both* a cancellation and then
// immediately a performing of the action.
//
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be rephrased into a decision when decision exists after review/discussion.

@ekcoh ekcoh changed the title FIX: ISXB-1097 (WorkInProgress) Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design. FIX: ISXB-1097 Changed default event handled policy and deprecated event handling policy SuppressStateUpdates since broken by design. Apr 29, 2026
@Pauliusd01
Copy link
Copy Markdown
Collaborator

FYI: likely will only have time to take a look at this on the latter half of next week

@ekcoh
Copy link
Copy Markdown
Collaborator Author

ekcoh commented Apr 30, 2026

@Pauliusd01 I can do some more testing myself to smoke this further and reach out to XR. We also have a decision to make which might call for additional changes to this.

@ekcoh ekcoh removed the work in progress Indicates that the PR is work in progress and any review efforts can be post-poned. label Apr 30, 2026
@MorganHoarau
Copy link
Copy Markdown
Collaborator

MorganHoarau commented Apr 30, 2026

When a device is reset (InputSystem.ResetDevice), pass-through actions currently emit both Canceled and Performed(0f) — because pass-through actions fire on any value change, including the reset-to-default. This is consistent with the pass-through contract [...]

I could not find info about that particular case in the doc. Even if it make sense, it's not obvious that "any value" also means system-synthetic event. Might be worth documenting this subtlety.

[...] If we decide to suppress the Performed(0f) on reset, the synthetic reset event should be explicitly marked as handled rather than relying on sentinel values.

I do not think we should change it as some users might be relying on the existing behaviour. It also gives a chance to sync any user-owned state linked to that passthrough action. Though, users could also reset such state through the Canceled callback, because we are now feeding them with synthetic data anyway.

Was that a long standing issue or requested change of behaviour? I might be missing some context here. I'm just having a hard time figuring out the user story behind it.

Even if getting rid of the Performed(0f) sounds appealing, I just do not see real value for the potential risk.

Copy link
Copy Markdown
Collaborator

@MorganHoarau MorganHoarau left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few minor comments.

Good automated test coverage, every time I had ideas to improve a test, the next one was covering it.

I like that approach because it moves the suppression ownership to the appropriate layer (InputActionState.TriggerState) and makes the system more resilient without adding complexity.

northAction.Enable();

// Handle events that press buttonSouth, but let buttonNorth events through.
InputSystem.onEvent += (eventPtr, device) =>
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure to understand why we need to subscribe an empty lambda here...

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, something interesting happened here, will revisit :)

new GamepadState().WithButton(GamepadButton.South)); // new press
InputSystem.Update();

Assert.That(performedCount, Is.EqualTo(1),
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should not be needed because covered by other test in other scenarios, but I would have added the check for Assert.That(action.WasPressedThisFrame(), Is.True); to get the expected symmetry and specific scenario covered.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, good catch, I'll get it added

### Fixed

- Fixed `InputEventPtr.handled` not preventing actions from triggering when switching devices. The default event handled policy has been changed from `SuppressStateUpdates` (now deprecated) to `SuppressActionEventNotifications`, which keeps device state synchronized while suppressing action callbacks for handled events. [ISXB-1097](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-1097)
- Fixed all `InputAction.WasXxxThisFrame()` and `WasXxxThisDynamicUpdate()` polling APIs to use per-action suppression tracking instead of a map-wide flag. Previously, when multiple events arrived in the same frame with mixed handled/unhandled states, the last event's suppression state could incorrectly affect all actions in the map. [ISXB-1097](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-1097)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move to Changed section?

Copy link
Copy Markdown
Collaborator Author

@ekcoh ekcoh May 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed on the first one, the second one seems to instead be a long lasting bug which gave different result deepening on what map and action belonged to.

@Pauliusd01

This comment was marked as off-topic.

@u-pr
Copy link
Copy Markdown
Contributor

u-pr Bot commented May 4, 2026

Test Plan

(Custom_review updated until commit c0924e6)

Updated: 2024-05-14 - Expanded regression scenarios for polling APIs and verified device reset side-effects.

  • Test plan approved by PR author
  • Test execution in progress
  • Test execution complete
  • Ready for merge

Summary of Changes & Risk Assessment

Summary of Changes

This PR resolves ISXB-1097 where handled events failed to suppress actions during device switching. The fix changes the default InputEventHandledPolicy to SuppressActionEventNotifications (allowing state synchronization while blocking callbacks) and migrates suppression tracking from a map-wide flag to a per-action bit in TriggerState. It also cleans up accidental handled-bit setting in ResetDevice and refactors Editor initialization for better stability.

Risk Assessment

  • High Risk Areas: Core event processing pipeline (InputManager.ProcessEventBuffer), Action Phase logic in InputActionState.cs, and all polling APIs (WasPressedThisFrame, etc.).
  • Medium Risk Areas: Interactive Rebinding suppression logic, Editor domain reload stability (due to initialization refactor), and backward compatibility for the now-deprecated SuppressStateUpdates policy.
  • Low Risk Areas: Analytics and Assembly Definition changes.

Test Scenarios

Functional Testing

  • Device Switching Fix: Verify that marking a keyboard event as handled (eventPtr.handled = true) prevents an action bound to both Keyboard and Gamepad from triggering when followed by a gamepad event. Reference: CoreTests_Events.cs:L1541.
  • Polling API Suppression: Validate that WasPressedThisFrame(), WasReleasedThisFrame(), and WasPerformedThisFrame() return false for handled events, even while the raw control state (e.g., button.isPressed) is true. Reference: CoreTests_Events.cs:L1656.
  • [FAIL ] Action Isolation: In a single frame with one handled event (Button A) and one unhandled event (Button B), verify that Action A is suppressed while Action B triggers normally. Reference: CoreTests_Events.cs:L1696.

Regression Testing

  • Device Reset (Sentinel Fix): Ensure InputSystem.ResetDevice still cancels ongoing actions. Verify that PassThrough actions still emit Performed(0f) on reset (consistent with existing quirk) now that the -1 sentinel bit collision is fixed. Reference: InputManager.cs:L1654.
  • Interactive Rebinding: Verify RebindingOperation with WithMatchingEventsBeingSuppressed() correctly blocks UI interaction during the rebind without permanently overriding the global system policy. Reference: CoreTests_Actions_Rebinding.cs:L1148.
  • [FAIL ] Editor Domain Reload: Perform multiple domain reloads (script recompiles) and verify that devices and usage tags (e.g. LeftHand) remain intact, validating the refactored InputSystemEditorInitializer.
🔍 Regression Deep Dive (additional risks identified)
  • [FAIL ] High-Frequency Input: Test a device (e.g. 1000Hz mouse) sending multiple events in one frame. If the first event (press) is handled but a subsequent move is not, ensure the action remains suppressed. Reference: CoreTests_Events.cs:L1590.
  • [? ] Legacy Policy Support: Explicitly set InputSystem.manager.inputEventHandledPolicy to the obsolete SuppressStateUpdates and verify it still discards state updates as per legacy behavior.
  • [FAIL ] Dynamic Updates: Verify that WasPressedThisDynamicUpdate() correctly respects suppression within the current update loop context.

Edge Cases

  • QueueStateEvent: Ensure that state events manually queued via API (not from native) respect the handled flag correctly during the next system update.
  • Pass-Through Actions: Confirm PassThrough actions respect the Suppressed bit in TriggerState even though they typically trigger on every value change.

💡 This test plan updates automatically when /test_plan is run on new commits. If you have any feedback, please reach out in #ai-qa


🤖 Helpful? Please react with 👍/👎 | Questions❓Please reach out in Slack #ask-u-pr

@ekcoh
Copy link
Copy Markdown
Collaborator Author

ekcoh commented May 4, 2026

When a device is reset (InputSystem.ResetDevice), pass-through actions currently emit both Canceled and Performed(0f) — because pass-through actions fire on any value change, including the reset-to-default. This is consistent with the pass-through contract [...]

I could not find info about that particular case in the doc. Even if it make sense, it's not obvious that "any value" also means system-synthetic event. Might be worth documenting this subtlety.

[...] If we decide to suppress the Performed(0f) on reset, the synthetic reset event should be explicitly marked as handled rather than relying on sentinel values.

I do not think we should change it as some users might be relying on the existing behaviour. It also gives a chance to sync any user-owned state linked to that passthrough action. Though, users could also reset such state through the Canceled callback, because we are now feeding them with synthetic data anyway.

Was that a long standing issue or requested change of behaviour? I might be missing some context here. I'm just having a hard time figuring out the user story behind it.

Even if getting rid of the Performed(0f) sounds appealing, I just do not see real value for the potential risk.

Fair point about the fact that projects in the wild could be relying on the side-effect of an additional Performed callback (non-consistent) for Passthrough. That is why I didn't change that part now but ensured its called out in the test. Agree we could potentially also clarify this in the manual or scripting manual since it's undocumented - and honestly not something I was aware of before this PR. Since it is inconsistent I am not sure its intentional or a mistake from the past that it performs differently, personally I suspect the latter since it is called out as a "quirk" in the test case - which made want to raise this to discuss since its also not documented. I am not sure what a user would even though with the additional Performed callback carrying a false synthetic state.

There is no request for change of behavior - I am just calling it out since it makes no sense to me. I am completely fine keeping it as is for now.

@MorganHoarau Did I understand it correctly that you where ok with the bigger behaviour change of this PR I am suggesting - changing the default event consumption mode?

@ekcoh
Copy link
Copy Markdown
Collaborator Author

ekcoh commented May 4, 2026

I notice now this PR looks kind of broken after it was merged with latest changes from develop :/

@ekcoh ekcoh force-pushed the isxb-1097-event-suppression-fix branch from cb8829c to c0924e6 Compare May 4, 2026 10:27
@ekcoh
Copy link
Copy Markdown
Collaborator Author

ekcoh commented May 4, 2026

Fixed previous bad merge, this now ok to review and test again

@Pauliusd01

This comment was marked as off-topic.

@u-pr
Copy link
Copy Markdown
Contributor

u-pr Bot commented May 4, 2026

Persistent custom_review updated to latest commit c0924e6

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