Skip to content

Releases: SoundMatt/RELAY

v2.0.4

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 22:15
810d187

v2.0.4 — bug fix; no semantic change

go.mod still declared github.com/SoundMatt/RELAY after the v2.0 MAJOR bump. Per Go's semantic import versioning rules, a v2+ tagged module with a go.mod file must carry a /v2 path suffix, or it becomes uninstallable via ordinary go install/go get tooling (go install .../RELAY/cmd/relay@v2.0.3 failed with invalid version: module contains a go.mod file, so module path must match major version).

Renamed to github.com/SoundMatt/RELAY/v2; updated all 30 internal package imports, README install/usage snippets, and §13.4/13.6/18.1's module-path guidance.

Closes #70 — independently rediscovered by three downstream repos (rust-RCP, rust-MQTT, go-mqtt), all of which had worked around it with a commit-hash pin instead of a normal version tag; they can now move to a standard github.com/SoundMatt/RELAY/v2 v2.0.4 require.

SpecVersion unchanged (2.0); this is a Go-tooling installability fix, not a wire-format or behavioral change.

v2.0.3

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 21:03
0d471be

Bug fix + doc patch: Router.Run goroutine leak on Subscribe failure (RELAY-15), stale v1.13 version strings (RELAY-01/03), MQTT v5 §15.7.4 doc note (NEW-R-02). Applied from an externally-generated fix-diff register after independent review and verification.

v2.0.2

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 17:19
3344b3d

Doc-correction patch release; no normative spec change (SpecVersion stays 2.0).

  • The rcp.ToMessage doc comment overclaimed lossless round-trip for all Control bits; softened to state exactly which fields round-trip (this predates v2.0.1 and survived it unchanged).
  • Strengthened TestMessageToMessageError to assert the full Control value, so the documented gap stays visible.

Fixes #155 (NEW-R-01, from a 2026-07-30 follow-up re-audit).

v2.0.1

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 16:26
1931171

Bug fix + doc correction release; no normative spec change (SpecVersion stays 2.0).

  • rcp.ToMessage/FromMessage now carry TransactionNum/ReadSizeOrSegment through Meta, closing a gap against §15.7's pre-existing "MUST be lossless for all mandatory fields" rule.
  • §15.7.5 documents the new mapping and ToMessage's always-both-keys behavior.
  • Golden vector spec/vectors/rcp-message.json now exercises the previously-dropped fields.
  • Fixed stale pre-v2.0 RCP references in README.md and the rcp package doc comment.

Fixes #76, #78, #82, #92, and the RCP portion of #100.

v2.0.0 — RCP TC18 canonical types (BREAKING)

Choose a tag to compare

@SoundMatt SoundMatt released this 29 Jul 13:23
93a5624

MAJOR breaking change per §19.3's stability guarantee — canonical types (§15.5) are covered by that contract.

RCP now means the real OPEN Alliance TC18 Remote Control Protocol Specification v0.5.1_RC, not the earlier RELAY-internal placeholder protocol (Zone/Command/Response/Status/Priority/CommandType). No compatibility shim.

Designed against go-RCP, which reached full TC18 conformance cutover (v1.0.0) and explicitly disclosed that RELAY's own RCP schemas/golden vector were stale. See spec/CHANGELOG.md for the full technical breakdown.

v1.14.0

Choose a tag to compare

@SoundMatt SoundMatt released this 28 Jul 19:58
866f076

Expands §13.7.2's module-name registry with canonical names for the new RCP protocol-core concerns (avtp, acf, lifecycle, regmap, discovery, request, fragment) and DDS's already-converged RTPS internals (cdr, spdp, sedp, reliable, persist, transport, guid, locator, wildcard). REQ-RELAY-093. See CHANGELOG for the naming-drift findings that prompted this.

v1.13.0

Choose a tag to compare

@SoundMatt SoundMatt released this 27 Jul 22:57
304bb5d

Deep-audit fix pass — two live CLI conformance-gate bugs, several tooling correctness fixes, and C++/Rust language-binding parity.

P0 bugs fixed

  • relay interop with zero binaries silently PASSed / exit 0 instead of the spec-mandated exit 2
  • relay conform --strict placed after the binary path was silently dropped instead of applied (same failure class as v1.11.1's --format json bug)
  • cmd/relay's toolVersion had drifted behind SpecVersion again — bumped, now guarded by a test so it can't silently recur

P1 fixes

  • Golden error vectors (spec/vectors/errors/*.json) were unreachable through the go:embed-based API — relay interop could never exercise reject-path behavior, only the happy path
  • relay crossbar: correct per-destination converter inference, a genuinely persistent send-sink process (was one subprocess per message, contradicting spec §11.2's streaming contract), back-pressure-honoring subscribe
  • router.Router.AddSpoke/AddRoute now properly synchronized (was a real data race)
  • SOME/IP FromMessage now wraps the spec-mandated ErrMalformedMessage sentinel
  • §17 corrected to accurately state what relay conform (a black-box CLI tool) can and can't verify
  • §18.2/§18.3: added missing C++/Rust HealthProvider/MetricsProvider/Drainer bindings and SubscriberOptions routing-key fields

P2s

relay convert stdin size cap, relay trace orphaned-child-process fix, a duplicate differently-cased BackPressurePolicy removed, stale Dockerfile labels, README/ROADMAP/spec-title currency — with durable drift-guard tests added given staleness recurred across three releases running.

Process

RELAY's own CI now runs relay conform/relay interop against itself for the first time — spec §20.1 requires both of a conformant implementation.

SpecVersion = "1.13" — additive, non-breaking.

Full diff: v1.12.0...v1.13.0

v1.12.0

Choose a tag to compare

@SoundMatt SoundMatt released this 27 Jul 22:19
f9cde20

Add "c" as a valid CLI language value (§12.1) — spec/schemas/cli-version.json, the §13.5 Docker label pattern, and spec/version.json all updated. Corrects REQ-RELAY-047/053, which had gone stale (still said go/cpp/rust only).

Surfaced by a deep audit of c-RCP: it had to misreport itself as "cpp" just to pass relay conform --strict's schema validation, since plain C was never a valid enum value. Additive MINOR — no existing go/cpp/rust implementation is affected.

Full diff: v1.11.1...v1.12.0

v1.11.1

Choose a tag to compare

@SoundMatt SoundMatt released this 27 Jul 15:48
a0ae3bf

Bug fix + documentation currency release. No normative spec change (SpecVersion stays 1.11).

Fixes:

  • P0: relay conform --format json always exited 0, even on FAIL, defeating the §20.1 CI conformance gate for any pipeline gating on JSON output. Both text and json formats now hit the same exit-code check. Added a regression test.
  • cmd/relay's toolVersion bumped from a stale hardcoded 0.1.0 to 1.11.1.
  • README: corrected stale "v0.1 (draft)" status, added missing go install .../cmd/relay@latest instructions, documented all 16 CLI subcommands (was 2).
  • ROADMAP.md: fixed stale "in progress" tags on shipped v0.1–v0.4 milestones.
  • spec/relay-spec.md Appendix A: relabeled as an explicit historical snapshot (frozen at v0.2, 2026-06-16) instead of presenting stale data as current.

Closes #50 #51 #52 #53 #54 #55 #56.

Full diff: v1.11.0...v1.11.1

v1.11.0 — Remove C++ CLI waiver

Choose a tag to compare

@SoundMatt SoundMatt released this 19 Jun 21:23
732674a

§17.7: removes the waiver that let a CLI-less C++ library have its CLI requirements assessed as "not applicable". Every conformant implementation MUST now ship the version/capabilities/status CLI (C++ via -DRELAY_BUILD_CLI=ON). Reconciles §17 with §20 (which gates CI on relay conform --strict against the built CLI). No currently-conformant impl relied on the waiver — affects only CLI-less scaffolds. SpecVersion 1.11.