Skip to content

build(ffi)!: move to Diplomat 0.16.1-devo.2 - #2165

Merged
irvingouj@Devolutions (irvingoujAtDevolution) merged 1 commit into
masterfrom
ffi/diplomat-0.16.1-devo.2
Oct 26, 2026
Merged

irvingouj@Devolutions (irvingoujAtDevolution) merged 1 commit into
masterfrom
ffi/diplomat-0.16.1-devo.2

Conversation

@irvingoujAtDevolution

@irvingoujAtDevolution irvingouj@Devolutions (irvingoujAtDevolution) commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

The .NET bindings were generated by Diplomat 0.7 from a personal fork, years behind upstream. Move to the protected Devolutions/diplomat tag that IronVNC and picky-rs already use, with the same xtask pinning and install flow.

Rust side:

  • pin diplomat and diplomat-runtime to tag 0.16.1-devo.2 and drop the [patch.crates-io] entry for the old fork; its zero-length slice fix is upstream now, since slice parameters go through DiplomatSlice, which maps a null pointer to an empty slice
  • opaque_mut on the 20 types that are mutated through &mut, named lifetimes on borrowed returns, DiplomatWriteable renamed to DiplomatWrite, and no explicit Clone/Copy on bridge enums
  • move dotnet-interop-conf.toml to the lib_name + [dotnet] layout

Tooling: xtask installs diplomat-tool from the tag with Rust 1.96.0, because the tag does not build with the workspace toolchain. It records the source and version so a tool from another tag is never reused, checks that the tool and the ffi crate use the same tag, and calls the tool by absolute path. The ffi CI job caches those records with the binary, so a cache hit does not reinstall the tool.

The library and examples use properties instead of the removed GetX()/SetX() methods.

ffi/README.md gains a migration section with these steps.

BREAKING CHANGE: for consumers of Devolutions.IronRdp:

  • GetX()/SetX() methods that duplicated a property are removed
  • the &mut getters on ClientConnectorState and CredsspSequenceInitResult are methods only
  • IronRdpErrorKind.IO and WrongOS are now Io and WrongOs
  • Position, MultitransportRequest and NetworkCharacteristics are structs with public fields instead of classes with properties
  • the Devolutions.IronRdp.Raw namespace is internal, and the public AsFFI() methods and raw-pointer constructors are removed
  • DiplomatWriteable, DiplomatOpaqueException and the IronRdpError.ToDisplay(DiplomatWriteable) overload are removed
  • IronRdpException is no longer partial
  • only the ten types listed in ffi/README.md are IDisposable; every other type, such as Config, InclusiveRectangle and ClientConnector, is released by its finalizer and no longer has Dispose()
  • overlapping calls on one native object now throw, such as calling ActiveStage from the PDU loop and an input handler at once, or using a CredsspSequence while its CredsspProcessGenerator is alive

Co-Authored-By: Claude Opus 5.5 (1M context) noreply@anthropic.com

@irvingoujAtDevolution
irvingouj@Devolutions (irvingoujAtDevolution) marked this pull request as ready for review October 20, 2026 19:28
Copilot AI balanced review requested due to automatic review settings October 20, 2026 19:28
@github-actions github-actions Bot added breaking-change Includes a breaking change, and requires special scrutiny at the boundaries risk/high Substantial core public API impact, or fail-closed triage; needs maintainer-level scrutiny scope/cross-cutting Spans multiple architectural boundaries scope/ffi Affects native or .NET bindings scope/tooling Build, CI, release, or developer tooling size/XXL Size: 1300 or more counted lines or 50 or more files triage/overlap Possible overlap with another pull request; advisory only labels Oct 20, 2026
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

This pull request may overlap with #2167.

Both PRs rework the C# FFI bindings around ownership and disposal of the same types: PR 2167 makes DecodedImage, DecodedPointer and ActiveStageOutput disposable and changes their data access, while this PR regenerates the same bindings under a new Diplomat version with new opaque_mut and manually_disposable disposal semantics, touching the same ffi sources, generated classes and the Avalonia example. A human should check whether the intended end state of the binding surface conflicts.

This notice is advisory only. Automated review continues as usual, and how these pull requests relate is for maintainers and authors to decide.

Note

LLM-assisted content (no human feedback).

Copilot AI 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.

🔵 Needs a closer look

The changes require final human review because they are too complex or risky for automated approval.

No open issues 🎉

What changed in this PR

Migrates IronRDP’s Rust/.NET FFI from the legacy Diplomat fork to the shared Devolutions release.

Changes:

  • Pins Diplomat dependencies and tooling; caches installation metadata.
  • Updates bridge mutability, borrowed lifetimes, and generated interop types.
  • Migrates property call sites and documents consumer changes.

No actionable defects identified in the supplied changes. Protocol review was skipped because wire behavior is unchanged. Builds and tests were not run.

File Description
xtask/​src/​bin_version.rs Updated as part of this pull request.
xtask/​Cargo.toml Updated as part of this pull request.
ffi/​src/​session/​image.rs Updated as part of this pull request.
ffi/​src/​pdu.rs Updated as part of this pull request.
ffi/​src/​input.rs Updated as part of this pull request.
ffi/​src/​graphics.rs Updated as part of this pull request.
ffi/​src/​error.rs Updated as part of this pull request.
ffi/​src/​dvc/​mod.rs Updated as part of this pull request.
ffi/​src/​dvc/​dvc_pipe_proxy_message_queue.rs Updated as part of this pull request.
ffi/​src/​credssp/​network.rs Updated as part of this pull request.
ffi/​src/​credssp/​mod.rs Updated as part of this pull request.
ffi/​src/​connector/​state.rs Updated as part of this pull request.
ffi/​src/​connector/​result.rs Updated as part of this pull request.
ffi/​src/​connector/​config.rs Updated as part of this pull request.
ffi/​src/​connector/​activation.rs Updated as part of this pull request.
ffi/​src/​clipboard/​mod.rs Updated as part of this pull request.
ffi/​src/​clipboard/​message.rs Updated as part of this pull request.
ffi/​README.md Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​src/​Framed.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​src/​ConnectionHelpers.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​WrittenType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​Utf8.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RDCleanPathResultType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawWrittenType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawWritten.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawUtilsFfiResultVoidBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawUtilsFfiResultUsizeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawTsRequest.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawStaticChannelSet.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultVoidBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultPositionBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultOptBoxActiveStageOutputIteratorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultNetworkCharacteristicsBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultMultitransportRequestBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxVecU8BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxMonitorLayoutIteratorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxInclusiveRectangleBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxGracefulDisconnectReasonBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxDecodedPointerBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxBytesSliceBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxActiveStageOutputIteratorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSessionFfiResultBoxActiveStageBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawSecurityProtocol.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRDCleanPathResultType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultUsizeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultU16BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultRDCleanPathResultTypeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultBoxVecU8BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultBoxRDCleanPathPduBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawRdcleanpathFfiResultBoxCertificateChainIteratorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPosition.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPixelFormat.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPerformanceFlagsType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPduHint.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPduFfiResultVoidBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawPduFfiResultOptBoxPduInfoBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawOperationType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawOperation.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawNetworkRequestProtocol.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawMultitransportRequest.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawMouseButtonType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawLog.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawLicenseExchangeSequence.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawKeyboardType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawKerberosConfig.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawIronRdpErrorKind.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawInputFfiResultBoxCharBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawInputDatabase.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawGracefulDisconnectReason.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawFormatDataResponse.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawFastPathInputEventIterator.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawFastPathInputEvent.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDvcPipeProxyMessageSink.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDvcPipeProxyMessage.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDvcPipeProxyDescriptor.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDvcDvcPipeProxyMessageQueueFfiResultOptBoxDvcPipeProxyMessageBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDvcDvcPipeProxyMessageQueueFfiResultBoxDvcPipeProxyMessageBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawDrdynvcChannel.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspNetworkFfiResultVoidBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspNetworkFfiResultBoxTsRequestBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspNetworkFfiResultBoxGeneratorStateBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspNetworkFfiResultBoxClientStateBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultOptBoxTsRequestBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultBoxWrittenBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultBoxTsRequestBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultBoxCredsspSequenceInitResultBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultBoxCredsspSequenceBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCredsspFfiResultBoxCredsspProcessGeneratorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorStateFfiResultClientConnectorStateTypeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorStateFfiResultBoxSecurityProtocolBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorStateFfiResultBoxConnectionResultBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorStateFfiResultBoxConnectionActivationSequenceBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorStateFfiResultBoxConnectInitialBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorResultFfiResultU32BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorResultFfiResultU16BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorResultFfiResultBoxDesktopSizeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorResultFfiResultBoolBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultVoidBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultOptBoxPduHintBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoxWrittenBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoxOptionalUsizeBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoxDynStateBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoxClientConnectorStateBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoxClientConnectorBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorFfiResultBoolBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorConfigFfiResultBoxConfigBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorActivationFfiResultOptBoxPduHintBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorActivationFfiResultBoxWrittenBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorActivationFfiResultBoxConnectionActivationStateFinalizedBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectorActivationFfiResultBoxConnectionActivationStateConnectionFinalizationBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectionActivationStateType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectionActivationStateConnectionFinalization.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConnectInitial.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawConfig.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCliprdrBackendFactory.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawCliprdr.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardWindowsFfiResultOptBoxClipboardMessageBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardWindowsFfiResultBoxWinCliprdrBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardWindowsFfiResultBoxCliprdrBackendFactoryBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardWindowsFfiResultBoxClipboardMessageBoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardSvcMessage.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardMessageType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardMessageFfiResultU32BoxIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardFormatIterator.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClipboardFormatId.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawClientConnectorStateType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawChannelConnectionSequence.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawBitmapConfig.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawActiveStageOutputType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​RawAction.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​PixelFormat.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​PerformanceFlagsType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​OperationType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​NetworkRequestProtocol.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​NativeLib.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​MouseButtonType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​KeyboardType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​IronRdpException.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​IronRdpErrorKind.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatSliceU8.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatSliceU32.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatSliceU16.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatSliceMutU8.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatSliceMutU32.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultWrittenIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultWinCliprdrIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultVoidIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultVecU8IronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultUShortIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultUIntIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultTsRequestIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultSecurityProtocolIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultRDCleanPathResultTypeIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultRDCleanPathPduIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultPositionIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultPduInfoIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultPduHintIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultOptionalUsizeIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultNUIntIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultNetworkCharacteristicsIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultMultitransportRequestIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultMonitorLayoutIteratorIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultInclusiveRectangleIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultGracefulDisconnectReasonIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultGeneratorStateIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultDynStateIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultDvcPipeProxyMessageIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultDesktopSizeIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultDecodedPointerIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCredsspSequenceIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCredsspSequenceInitResultIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCredsspProcessGeneratorIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConnectionResultIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConnectionActivationStateFinalizedIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConnectionActivationStateConnectionFinalizationIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConnectionActivationSequenceIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConnectInitialIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultConfigIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCliprdrBackendFactoryIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultClipboardMessageIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultClientStateIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultClientConnectorStateTypeIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultClientConnectorStateIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultClientConnectorIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCharIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultCertificateChainIteratorIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultBytesSliceIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultBoolIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultActiveStageOutputIteratorIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatResultActiveStageIronRdpError.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​DiplomatBool.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​ConnectionActivationStateType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​ClipboardMessageType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​ClientConnectorStateType.cs Updated as part of this pull request.
ffi/​dotnet/​Devolutions.IronRdp/​Generated/​ActiveStageOutputType.cs Updated as part of this pull request.
ffi/​dotnet-interop-conf.toml Updated as part of this pull request.
ffi/​Cargo.toml Updated as part of this pull request.
Cargo.toml Updated as part of this pull request.
.github/​workflows/​ci.yml Updated as part of this pull request.

Review effort: Balanced

@github-actions github-actions 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 2165 migrates the FFI from a personal Diplomat 0.7 fork to the Devolutions/diplomat 0.16.1-devo.2 tag, regenerating the .NET bindings around a RustHandle/BorrowLease borrow-ledger runtime with an internal Raw namespace, removing public Dispose/finalizers from all but ten types, and adding xtask tool pinning plus a README migration section. Independent inspection of pr-head confirms the structure: WinCliprdr is IDisposable with no class finalizer, teardown of undisposed instances runs the Rust destructor via the SafeHandle finalizer (RustHandle.ReleaseHandle) on the finalizer thread, and the README explicitly requires disposing WinCliprdr on its creating thread. The Avalonia example creates _cliprdr (line 131) but contains no Dispose call anywhere, contradicting the disposal rule the same PR documents and undermining the README's use of the example as the reference implementation. The sole specialist candidate is accepted unchanged: a low-severity example/documentation consistency i…

Reduced coverage: optional reviewer code-compressor was unavailable.

  1. [skeptical] Avalonia example never disposes WinCliprdr, contradicting the disposal rule the same PR adds — low 🟡 — ffi/dotnet/Devolutions.IronRdp.AvaloniaExample/MainWindow.axaml.cs
    The new ffi/README.md migration section requires disposing WinCliprdr on its creating thread because only that thread can remove its window subclass, and cites the Avalonia example as the reference for serializing native access. The example creates _cliprdr (head line 131) and consumes NextClipboardMessageBlocking() (head line 334) but contains no Dispose call anywhere. The regeneration also removed the class-level ~WinCliprdr() finalizer, so undisposed instances are destroyed by the RustHandle SafeHandle finalizer on the finalizer thread - the path the README says cannot perform the thread-affine subclass removal. Readers copying the example get the non-deterministic teardown the guide warns against, and per-iteration ClipboardMessage values are likewise never disposed. The example should model the documented rules (dispose WinCliprdr on its creating thread, use ClipboardMessage values in a using) or the README should not present it as the exemplar.

Push a commit after addressing these findings. If no code change is needed, you may resolve inline threads and comment @github-actions review-ready to request human review.

@github-actions github-actions Bot added ai-reviewed/1 One automated review completed needs-author-action The pull request author is the current next actor labels Oct 20, 2026
@github-actions github-actions Bot removed the needs-author-action The pull request author is the current next actor label Oct 20, 2026
@github-actions github-actions Bot removed the scope/cross-cutting Spans multiple architectural boundaries label Oct 20, 2026

@github-actions github-actions 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 2165 migrates the .NET FFI from a stale Diplomat 0.7 fork to the Devolutions/diplomat 0.16.1-devo.2 tag, regenerating bindings and reworking xtask tool pinning, install, and CI caching. The migration is coherent: the tag is pinned in bin_version.rs (which the CI cache key hashes), the ffi crate pin is cross-checked against the tool pin, and a stale cached tool triggers a reinstall rather than a silent mismatch. Of the four candidates, the cache-key finding rests on a false premise and is rejected; the missing empty-slice regression coverage after deleting the fork's UB patch is accepted as a medium concern; the dedicated 1.96.0 toolchain concern is refined to a documentation ask (workspace is 1.94.1, tool needs 1.96.0, reason unrecorded); and the duplicated installed-and-pinned conjunction in ffi.rs vs bin_install.rs is accepted as a low maintainability nit.

  1. [skeptical] Fork's zero-length slice UB fix dropped without empty-slice FFI regression coverage — medium 🟠 ❓ — Cargo.toml
    The [patch.crates-io] pin to the CBenoit diplomat fork, whose stated purpose was fixing UB in bridge-macro-expanded code for zero-length slices, is removed. Generated C# now passes raw DiplomatSliceU8 { Ptr, Len } structs (e.g. VecU8.FromBytes fixes a possibly-empty array and forwards its raw pointer), so safety on empty slices depends entirely on the 0.16.1-devo.2 tag's Rust-side mapping of null pointer to empty slice, which is not verifiable from this repository. No changed file adds a test or runtime check covering empty-slice marshaling; a regression would be silent memory unsafety. A targeted empty-slice FFI check is warranted before deleting the fix path.
  2. [code-compressor] Installed-and-pinned invariant spelled two ways across build_bindings and cargo_install — low 🟡 — xtask/src/ffi.rs
    build_bindings bails on !is_installed(..) || !is_pin_satisfied(..) while cargo_install (xtask/src/bin_install.rs:54) skips on is_installed(..) && is_pin_satisfied(..). is_pin_satisfied (bin_install.rs:103-113) checks only the .source/.version markers and not binary existence, so both halves are required at both sites and the two spellings must stay in sync; dropping either half silently changes behavior. Export one helper combining both checks in bin_install.rs and use it at both call sites. Behavior is currently correct, so this is a low-cost maintainability cleanup.

Push a commit after addressing these findings. If no code change is needed, you may resolve inline threads and comment @github-actions review-ready to request human review.

Comment thread xtask/src/bin_version.rs

@github-actions github-actions 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 2165 migrates the .NET FFI from a Diplomat 0.7 personal fork to the Devolutions/diplomat tag 0.16.1-devo.2, pinning diplomat/diplomat-runtime via git tag in ffi/Cargo.toml, dropping the [patch.crates-io] entry, regenerating all bindings, and teaching xtask to install diplomat-tool from the tag with Rust 1.96.0 plus pin-marker and ffi-crate consistency checks. The hand-written changes are sound: the pin guard correctly compares the ffi crate dependencies against DIPLOMAT_TOOL's url/tag, the absolute-path tool invocation prevents PATH shadowing, and the CI cache restores the new marker files. Four valid concerns remain: nearly all opaque types lost deterministic disposal in favor of SafeHandle finalizer release with no rationale for leaf types; the documented overlapping-call and dispose-ordering semantics have no visible test coverage; the ffi binary cache key hashes only bin_version.rs and misses marker-format changes in bin_install.rs; and the separate version pin marker duplicate…

  1. [skeptical] Promised overlapping-call and dispose-ordering behavior lacks visible test coverage — low 🟡 ❓ — .github/workflows/ci.yml
    The ffi/README migration section asserts overlapping calls throw InvalidOperationException, CredsspProcessGenerator must be disposed before the next CredsspSequence call, and WinCliprdr must be disposed on its creating thread, yet no changed file adds tests for these paths. The ffi CI job runs Devolutions.IronRdp.Tests (ci.yml line 252), whose SmokeTests.cs exists at head covering connection smoke paths only and is not in the changed set, so its provenance and borrow-ledger coverage are unclear. If untested, the headline breaking behavioral guarantees ship unverified.

Push a commit after addressing these findings. If no code change is needed, you may resolve inline threads and comment @github-actions review-ready to request human review.

Comment thread ffi/README.md
Comment on lines +24 to +25
- Only these types are `IDisposable`: `ActiveStage`, `ActiveStageOutputIterator`, `ClipboardMessage`, `ClipboardSvcMessage`, `CredsspProcessGenerator`, `FfiFileContentsResponse`, `FormatDataResponse`, `VecU8`, `WinCliprdr` and `WriteBuf`.
Every other type is released by its finalizer, so drop `using` and `Dispose()` on it.

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.

[skeptical] All but ten opaque types are now released only by the finalizer, with no rationale for excluding leaf types — medium 🟠 ❓ — Generated wrappers such as DecodedImage and InputDatabase hold only a RustHandle SafeHandle with no Dispose; their Rust destructors run non-deterministically on the finalizer thread. Native allocations do not drive GC, so a consumer that reconnects repeatedly can accumulate native memory (connector state, decoded frames) because the tiny managed wrappers never trigger collection. Parents of retained borrows may force this design, but leaf types appear unconstrained, and the PR gives no rationale or mitigation guidance (e.g., GC.AddMemoryPressure) for them.

Comment thread .github/workflows/ci.yml
Comment on lines +233 to +236
path: |
./.cargo/local_root/bin
./.cargo/local_root/*.source
./.cargo/local_root/*.version

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.

[skeptical] ffi binary cache key does not cover the pin-marker format in bin_install.rs — low 🟡 — The cache now restores ./.cargo/local_root/*.source and *.version, but the key (line 237) hashes only xtask/src/bin_version.rs. The marker file names and the git+url?tag= content format live in xtask/src/bin_install.rs; changing them without touching bin_version.rs keeps the same cache key and restores stale-format markers, so is_pin_satisfied fails and CI silently rebuilds diplomat-tool from the git tag, losing the cache the new paths were added to provide. Failure direction is conservative, but including bin_install.rs in the hash would keep the key honest.

Comment thread xtask/src/bin_install.rs
Comment on lines +67 to +70
sh.write_file(marker_path(package, "source"), source_marker(url, tag))
.with_context(|| format!("record installed {package_name} source"))?;
sh.write_file(marker_path(package, "version"), package_version)
.with_context(|| format!("record installed {package_name} version"))?;

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-compressor] Separate version pin marker duplicates what the source marker already proves — low 🟡 — cargo_install writes two marker files (.source and .version) and is_pin_satisfied requires both to match. For git-tag installs the .source marker records git+{url}?tag={tag}, which fully determines the crate version, so the .version marker adds no discriminating power: any pin-affecting change already flips the source marker and triggers a reinstall, while a version bump without a tag change is a misconfiguration reinstalling cannot fix (the marker is simply rewritten, masking it). Both markers are written together, so they cannot diverge from each other. Dropping the version marker and its is_pin_satisfied clause removes one write and one comparison while preserving the pin guarantee.

@github-actions github-actions Bot added ai-reviewed/3 Final automated review completed needs-author-action The pull request author is the current next actor and removed ai-reviewed/2 Two automated reviews completed labels Oct 20, 2026
@github-actions github-actions Bot added needs-review A human reviewer is the current next actor and removed needs-author-action The pull request author is the current next actor labels Oct 21, 2026
@github-actions github-actions Bot added risk/medium Behavioral change that does not substantially alter a core public API needs-review A human reviewer is the current next actor and removed needs-review A human reviewer is the current next actor risk/high Substantial core public API impact, or fail-closed triage; needs maintainer-level scrutiny labels Oct 21, 2026
Base automatically changed from ffi/diplomat-disposable-attrs to master October 23, 2026 01:51
@github-actions github-actions Bot removed the needs-review A human reviewer is the current next actor label Oct 23, 2026
@github-actions github-actions Bot added scope/cross-cutting Spans multiple architectural boundaries needs-review A human reviewer is the current next actor labels Oct 23, 2026
The .NET bindings were generated by Diplomat 0.7 from a personal fork,
years behind upstream. Move to the protected `Devolutions/diplomat` tag
that IronVNC and picky-rs already use, with the same xtask pinning and
install flow.

Rust side:
- pin `diplomat` and `diplomat-runtime` to tag `0.16.1-devo.2` and drop
  the `[patch.crates-io]` entry for the old fork; its zero-length slice
  fix is upstream now, since slice parameters go through
  `DiplomatSlice`, which maps a null pointer to an empty slice
- `opaque_mut` on the 20 types that are mutated through `&mut`, named
  lifetimes on borrowed returns, `DiplomatWriteable` renamed to
  `DiplomatWrite`, and no explicit `Clone`/`Copy` on bridge enums
- move `dotnet-interop-conf.toml` to the `lib_name` + `[dotnet]` layout

Tooling: xtask installs `diplomat-tool` from the tag with Rust 1.96.0,
because the tag does not build with the workspace toolchain. It
records the source and version so a tool from another tag is never
reused, checks that the tool and the ffi crate use the same tag, and
calls the tool by absolute path. The `ffi` CI job caches those records
with the binary, so a cache hit does not reinstall the tool.

The library and examples use properties instead of the removed
`GetX()`/`SetX()` methods.

`ffi/README.md` gains a migration section with these steps.

BREAKING CHANGE: for consumers of `Devolutions.IronRdp`:
- `GetX()`/`SetX()` methods that duplicated a property are removed
- the `&mut` getters on `ClientConnectorState` and
  `CredsspSequenceInitResult` are methods only
- `IronRdpErrorKind.IO` and `WrongOS` are now `Io` and `WrongOs`
- `Position`, `MultitransportRequest` and `NetworkCharacteristics` are
  structs with public fields instead of classes with properties
- the `Devolutions.IronRdp.Raw` namespace is internal, and the public
  `AsFFI()` methods and raw-pointer constructors are removed
- `DiplomatWriteable`, `DiplomatOpaqueException` and the
  `IronRdpError.ToDisplay(DiplomatWriteable)` overload are removed
- `IronRdpException` is no longer `partial`
- only the ten types listed in `ffi/README.md` are `IDisposable`;
  every other type, such as `Config`, `InclusiveRectangle` and
  `ClientConnector`, is released by its finalizer and no longer has
  `Dispose()`
- overlapping calls on one native object now throw, such as calling
  `ActiveStage` from the PDU loop and an input handler at once, or
  using a `CredsspSequence` while its `CredsspProcessGenerator` is
  alive

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot removed the needs-review A human reviewer is the current next actor label Oct 26, 2026
@irvingoujAtDevolution
irvingouj@Devolutions (irvingoujAtDevolution) merged commit e3affd8 into master Oct 26, 2026
39 of 41 checks passed
@irvingoujAtDevolution
irvingouj@Devolutions (irvingoujAtDevolution) deleted the ffi/diplomat-0.16.1-devo.2 branch October 26, 2026 17:12
Anton Mostovoy (antonmos) added a commit to antonmos/IronRDP that referenced this pull request Oct 26, 2026
…ktop-scale-factor

* upstream/master: (92 commits)
  fix(server): advertise horizontal mouse wheel input (Devolutions#2236)
  fix(pdu): reject RSA moduli below 512 bits (Devolutions#2225)
  ci(ffi): verify generated bindings (Devolutions#2166)
  build(ffi)!: move to Diplomat 0.16.1-devo.2 (Devolutions#2165)
  build: make the client's video, camera and decoder crates publishable (Devolutions#2239)
  ci(release): release the newly published crates (Devolutions#2218)
  perf(graphics): replace the RLGR decoder's bit reader (Devolutions#2150)
  chore(graphics): add RemoteFX decode benchmarks (Devolutions#2149)
  fix(server)!: pass a GfxContext to the GfxServerFactory build methods (Devolutions#2104)
  fix(pdu): check remaining length when skipping padding and reading client core data (Devolutions#2130)
  fix(session): avoid hang on empty QOIZ updates (Devolutions#2147)
  feat(session): expose EGFX compositing (Devolutions#2120)
  fix(server): send RDP as the Demand Active source descriptor (Devolutions#2119)
  feat(activex)!: broaden mstscax compatibility (Devolutions#2211)
  feat(viewer): run RemoteApp programs in native windows (Devolutions#2201)
  fix(graphics): reject RLGR3 values larger than their remainder (Devolutions#2132)
  feat(egfx)!: composite surfaces mapped to RemoteApp windows (Devolutions#2197)
  feat: redirect USB devices over URBDRC with nusb and RemoteFX USB backends (Devolutions#2181)
  build: mark exposed dependencies as public (Devolutions#2213)
  chore(release): prepare for publishing (Devolutions#2212)
  ...

# Conflicts:
#	crates/ironrdp-testsuite-extra/tests/e2e.rs

This branch was previously deployed

1 inactive deployment
llm-providers — 0ae9116e Deployed Oct 26, 2026 by irvingoujAtDevolution via Classify pull request #8274
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-reviewed/3 Final automated review completed breaking-change Includes a breaking change, and requires special scrutiny at the boundaries risk/medium Behavioral change that does not substantially alter a core public API scope/cross-cutting Spans multiple architectural boundaries scope/ffi Affects native or .NET bindings scope/tooling Build, CI, release, or developer tooling size/XXL Size: 1300 or more counted lines or 50 or more files triage/overlap Possible overlap with another pull request; advisory only

Development

Successfully merging this pull request may close these issues.

3 participants