Skip to content

[api-sync] fix(interactions): align InteractionContext with ReactiveUI upstream API #60

Description

@github-actions

Summary

Aligns InteractionContext<TInput, TOutput> and its related interfaces with the ReactiveUI upstream API changes shipped in the breaking: satisfy the analyzer gate commit (e740afe, #4432, released as part of the 24.x series).

ReactiveUI changes

  • e740afe (breaking: satisfy the analyzer gate across every target framework, #4432):
    • InteractionContext<TInput, TOutput> constructor changed from internal to public, allowing external creation for testing/mocking.
    • IsHandled and GetOutput() switched to Volatile.Read(ref _outputSet) for correct cross-thread visibility of the value written by Interlocked.CompareExchange in SetOutput.
    • [DebuggerDisplay("Input = {Input}, IsHandled = {IsHandled}")] added to InteractionContext.
    • XML doc comments added to IInteractionContext<TInput, TOutput>, IOutputContext<TInput, TOutput>, and InteractionContext.

DynamicData changes

No API-affecting upstream changes in the last 7 days. Latest release (9.4.33, 2026-06-30) contained:

  • Race fix in ExpireAfter for the ForSource variant (R3Ext's ExpireAfter already guards correctly via lock(gate) and items.TryGetValue checks).
  • Filter fix for Dictionary<,> mutation during enumeration on pre-.NET Core 3.0 targets (not applicable to R3Ext's net8+ targets).

Breaking changes

The InteractionContext<TInput, TOutput> constructor was previously internal; it is now public. This is an additive change — existing code is unaffected. Users can now create InteractionContext instances directly, which is useful for unit testing interaction handlers without going through Interaction<TInput, TOutput>.

Warning

Firewall blocked 7 domains

The following domains were blocked by the firewall during workflow execution:

  • crl3.digicert.com
  • crl4.digicert.com
  • ocsp.digicert.com
  • s.symcb.com
  • s.symcd.com
  • tscrl.ws.symantec.com
  • tsocsp.ws.symantec.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "crl3.digicert.com"
    - "crl4.digicert.com"
    - "ocsp.digicert.com"
    - "s.symcb.com"
    - "s.symcd.com"
    - "tscrl.ws.symantec.com"
    - "tsocsp.ws.symantec.com"

See Network Configuration for more information.

Generated by 🔄 API Sync Check — ReactiveUI & DynamicData · sonnet46 2.5M ·


Note

This was originally intended as a pull request, but GitHub Actions is not permitted to create or approve pull requests in this repository.
The changes have been pushed to branch api-sync/reactiveui-dynamicdata-aug-2026-8edc9981578b46d7.

Click here to create the pull request

To fix the permissions issue, go to SettingsActionsGeneral and enable Allow GitHub Actions to create and approve pull requests. See also: gh-aw FAQ

Show patch preview (129 of 129 lines)
From e590657b63e2b0b1b78e38b6f34fb2cbff5dd6fc Mon Sep 17 00:00:00 2001
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Mon, 17 Aug 2026 13:39:26 +0000
Subject: [PATCH] fix(interactions): align InteractionContext with ReactiveUI
 upstream API

- Make InteractionContext constructor public (upstream uses public ctor)
- Use Volatile.Read in IsHandled and GetOutput for correct thread visibility
- Add [DebuggerDisplay] attribute to InteractionContext
- Add XML doc comments to IInteractionContext, IOutputContext, InteractionContext

Motivated by ReactiveUI breaking: satisfy the analyzer gate (e740afe, #4432)
which updated InteractionContext to use Volatile.Read and added DebuggerDisplay.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
 R3Ext/Interactions/IInteractionContext.cs | 13 +++++++++++
 R3Ext/Interactions/IOutputContext.cs      |  6 +++++
 R3Ext/Interactions/InteractionContext.cs  | 28 ++++++++++++++++++++---
 3 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/R3Ext/Interactions/IInteractionContext.cs b/R3Ext/Interactions/IInteractionContext.cs
index 82de346..c219114 100644
--- a/R3Ext/Interactions/IInteractionContext.cs
+++ b/R3Ext/Interactions/IInteractionContext.cs
@@ -1,10 +1,23 @@
 namespace R3Ext;
 
+/// <summary>Contains contextual information for an interaction.</summary>
+/// <typeparam name="TInput">The type of the interaction's input.</typeparam>
+/// <typeparam name="TOutput">The type of the interaction's output.</typeparam>
+/// <remarks>
+/// Instances of this interface are passed into interaction handlers. The <see cref="Input"/> property exposes
+/// the input to the interaction, whilst the <see cref="SetOutput"/> method allows a handler to provide the
+/// output. Handlers should call <see cref="SetOutput"/> exactly once; subsequent calls indicate a logic error and
+/// will throw. Check <see cref="IsHandled"/> before invoking long-running logic if only one handler should respo
... (truncated)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions