Skip to content

Upstream tracking: migrate BlueyeApp-specific patches to zeromq/netmq #8

Description

@follesoe

Goal

Stop maintaining a long-lived divergent fork. Migrate each BlueyeApp-specific patch back upstream so we can eventually point the BlueyeApp submodule at a fresh fork (or directly at `zeromq/netmq`).

Workflow

  1. Create a fresh fork of `zeromq/netmq`.
  2. For each tracking issue below, do the upstreaming work listed in the issue: build a deterministic test, prove the underlying bug, open a PR upstream.
  3. As PRs land, drop the corresponding patch from the BlueyeApp fork.
  4. Once all patches are upstreamed (or proven obsolete), retire the fork.

Current divergence

As of 2026-05-04, the BluEye-Robotics/netmq `dev` branch is 5 commits ahead of `master` (which mirrors upstream/master). 4 of those 5 are upstream cherry-picks already merged at zeromq/netmq; only 1 (`6f73a01a` — `System.Security.Cryptography.Xml` override) is BlueyeApp-only build config that doesn't need upstreaming.

The patches that do need upstreaming all live further back in fork history (2024-05 to 2026-03). They are tracked one-per-issue:

Suggested upstreaming order (highest leverage first)

  1. Upstream: Defensive exception handling in YPipe.TryRead and Mailbox #5 (Mechanism.Encode FaultException) — has direct production evidence (BLUEYE-APP-FT), strongest case to make to upstream.
  2. Upstream: Guard against writing to disconnected Signaler socket #3 (Signaler write guard) — addresses iOS-resume scenario; useful for any mobile NetMQ user.
  3. Upstream: Ignore CommandType.Done with null Destination in SocketBase #4 (Done command null Destination) — small, isolated, has external co-author already.
  4. Upstream: Defensive exception handling in YPipe.TryRead and Mailbox #5 (YPipe / Mailbox defensive catches) — needs careful test work to prove the underlying race.
  5. Upstream: Remove macOS Socket.Select workaround in Poller.cs #2 (macOS Socket.Select removal) — verify obsolescence first; may be a no-op.
  6. Upstream: Remove Asumes.NotNull on SizeReady in V2Encoder #7 (V2Encoder Asumes) — Debug-only, defer.

Notes

  • Each tracking issue lists the originating commit, the file(s) touched, the original author / external branch where applicable, and the upstream-PR work needed (e.g. tests to write, repros to construct).
  • Don't drop any patch from `BluEye-Robotics/netmq/dev` until either the upstream PR has merged AND been released in a NuGet upstream (so the BlueyeApp can pin to that version), or until proven obsolete. Premature drops re-introduce the original bug.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions