Repository navigation
Releases: SoundMatt/go-SOMEIP
Release list
v1.2.1 — bump RELAY dependency to v2.0.4 (module-path uplift)
Highlights
go-SOMEIP's RELAY dependency was pinned to github.com/SoundMatt/RELAY v1.11.1 — three-plus spec releases behind (v1.12, v1.13, v1.14, and the breaking v2.0). This release bumps to the real, current github.com/SoundMatt/RELAY/v2 v2.0.4 (RELAY v2.0's own patch line moved the module path to /v2 per Go's semantic import versioning rules — RELAY#70). (#77)
Closes #57 (RELAY pinned three-plus releases behind, spanning a known conformance-gate false-pass bug and a breaking v2.0.0).
What changed
go.mod/go.sum:require github.com/SoundMatt/RELAY/v2 v2.0.4.- All 6 source files importing RELAY updated from
"github.com/SoundMatt/RELAY"to"github.com/SoundMatt/RELAY/v2". SpecVersionbumped1.11→2.0, closing the tracked spec-version-drift gap (go-SOMEIP-03) — go-SOMEIP was misreporting conformance to a spec three-plus releases stale.- CI's
relayCLI pin moved togithub.com/SoundMatt/RELAY/v2/cmd/relay@v2.0.4. README.md/CLAUDE.md/.fusa-reqs.jsonstale "RELAY spec v1.11" references reconciled to v2.0.- CLI
binVersion1.2.0→1.2.1.
Conformance review
Read RELAY's CHANGELOG for v1.12 → v2.0: v1.12 ("c" CLI language) and v1.14 (RCP/DDS module-name registry) are not applicable to SOME/IP; v2.0's breaking RCP canonical-type replacement is RCP-specific and doesn't touch SOME/IP. v1.13's SOME/IP-relevant fix (FromMessage wrapping ErrMalformedMessage on malformed IDs) was already present in go-SOMEIP. v1.13 also fixed a real upstream bug where RELAY's embedded golden error vectors were unreachable, so relay interop had never previously exercised reject-path behavior for any implementation — now fixed upstream.
Built the RELAY v2.0.4 CLI from source and ran both conformance gates for real against the go-someip binary:
relay conform --strict→ PASS (all three §12 schemas)relay interop --strict --protocol SOMEIP→ PASS on both vectors, including the previously-unreachablesomeip-wrong-protocol-versionreject-path vector (now actually exercised for the first time) — go-someip correctly rejects it via the existingErrWrongProtocolVersionsentinel.
No conformance gaps found; no behavioral code changes were required.
Verification
go build ./..., go vet ./..., go test ./..., go test -tags integration ./..., golangci-lint run ./... (0 issues) all green. CI: 14/14 checks passed before merge.
v1.2.0 — SD option-run wire fix, back-pressure, requirement/doc reconciliation
Highlights
Audit fix pass: applies 12 of 15 findings from the 2026-07-30 x-Net audit fix register; 3 advisory items left open (see below). (#76)
Critical: SD entry option-run wire fix (go-SOMEIP-01)
sd.EncodeEntry/DecodeEntry packed the SD entry option-run fields (bytes 2-3) against a non-AUTOSAR layout — NumOpts1 landed in byte2's low nibble instead of byte3, Index2 was truncated from 8 to 4 bits, and NumOpts1 was never written into byte3 at all. Any Offer/Subscribe entry with a real option run was misparsed by a conformant SOME/IP-SD peer (vsomeip, CommonAPI, real ECUs) even though encode→decode round-tripped internally. Fixed to byte1=Index1, byte2=Index2 (full 8 bits), byte3=(NumOpts1<<4)|NumOpts2, matching PRS_SOMEIPServiceDiscoveryProtocol. Independently verified via a hand-derived AUTOSAR byte layout in a standalone program, not just the shipped round-trip test. Added a golden-vector test asserting the exact byte layout (go-SOMEIP-02).
Other fixes
- Back-pressure:
Adapt().Subscribenow honoursrelay.BackPressurePolicy(Block/DropOldest/DropNewest) instead of always blocking (go-SOMEIP-04). - Removed
OptionTypeIPv6Endpoint/OptionTypeIPv4Multicastconstants — no encoder/decoder exists for either (go-SOMEIP-05). - ROADMAP/README reconciled with the shipped tree; README gained a RELAY conformance section, Meta-key table, CLI usage (go-SOMEIP-06/07).
- Documented that
FromMessageis version-normalising (go-SOMEIP-11). codec.ErrShortFrame/ErrLengthMismatchnow wrapsomeip.ErrMalformedMessage(RELAY spec §5.4 conformance); HARA SG-001 text corrected to match (go-SOMEIP-N2-01).- Fixed a stale
sd.Entry.MinorVersiondoc comment (go-SOMEIP-N2-03). - Reconciled
REQ-SPEC-001with the actual exportedSpecVersion("1.11") (go-SOMEIP-N2-04). - SD-carrier UDP handshake frames now set
InterfaceVersion=0x01and a non-zeroSessionIDper AUTOSAR SOME/IP-SD (go-SOMEIP-N2-05). - Replaced dangling spec-v0.3 citations in
adapt.gowith the canonical RELAY spec §14.1 reference (go-SOMEIP-N2-06).
Advisory — left open, no diff applied
- go-SOMEIP-03:
SpecVersionstill reports "1.11" vs governing RELAY v2.0. - go-SOMEIP-08: TARA is still 48 boilerplate entries, not a real ISO 21434 threat model.
- go-SOMEIP-09:
tcp/udp/SD-UDP-daemon tests remain behind//go:build integration.
v1.1.0
go-SOMEIP v1.1.0
Fixes the full open-issue backlog (#43–#50): two real P0/P1 concurrency/
transport bugs, two CLI/doc conformance gaps, and a RELAY spec uplift
from 1.0 to 1.11.
P0/P1 bug fixes
- #47 —
udp.Servernever tracked subscriber addresses, soEmit()
silently sent event notifications to nobody.Service.Subscribenow
registers with the server (a minimal point-to-point SOME/IP-SD
Subscribe/SubscribeAck handshake) before returning success. - #48 — Data race in
udpSubscription.Unsubscribe, which mutated a
shared subscriber slice whiledispatchFrameconcurrently ranged over
it. Reproducing it under-racealso surfaced two adjacent bugs:
sync.Map.CompareAndSwappanicking on concurrentSubscribecalls
(slices aren't comparable), and a send-on-closed-channel window. All
fixed with a mutex-protected, copy-on-write subscriber map, verified
under-race(including 10x repeat runs). - #49 — CLI
capabilitiesJSON now includesprotocol/protocol_int. - #50 — README quickstart examples fixed to match the real
mock/udp/tcpAPI.
RELAY spec uplift (1.0 → 1.11)
- #45 — RELAY adapter (
Adapt,ToMessage,FromMessage) split into
adapt.goper spec §13.7.1's module taxonomy. - #43 —
convert --protocol SOMEIP --format jsondriver for
relay interop. - #44 —
send --format jsonstreaming NDJSON sink forrelay crossbar. - #46 — CI now runs the full x-FuSa lifecycle (check, 100% requirement
traceability, cybersecurity analysis, dependency vulnerability scan, tool
qualification) plusrelay conform --strictandrelay interopon every
push/PR. Added a HARA; release automation now also regenerates TARA, the
vulnerability scan, and the qualification report.
Full details in PR #51.
v1.0.0 — RELAY spec v1.0 (stable)
First stable release of go-SOMEIP, aligned with RELAY spec v1.0.
Depends on github.com/SoundMatt/RELAY v1.0.0. RELAY's canonical types (§15), application interfaces (§10), error sentinels (§5), and CLI document schemas (§12) are now stable — breaking changes require a major (v2.0) increment.
Since v0.7.0
- Dependency
RELAY v0.8.0 → v1.0.0;SpecVersion → "1.0"(tracksrelay.SpecVersion, drift-checked in tests). RELAY v1.0 introduced no normative changes from v0.3, so no source-logic changes were required. - CLI reports binary version
1.0.0. relay-conformCI gate pinned torelay@v1.0.0;relay conform --strictpasses §12.1/12.2/12.3.
Conformance surface (stable)
- Lossless
someip.Message↔relay.Messagemapping (§15.7.6). Adapt(Service) relay.CallerwithWithEventID-driven Subscribe (§10.3).- Sentinels wrap the mandatory relay errors;
ErrWrongProtocolVersion+Message.Validate(). - §12-conformant
version/capabilities/statusCLI documents. - 114 atomic go-FuSa requirements (ISO 26262, ASIL-B).
Full Changelog: v0.7.0...v1.0.0
v0.7.0 — RELAY spec v0.3 conformance (lossless SOME/IP mapping)
Adopts RELAY spec v0.3. Depends on github.com/SoundMatt/RELAY v0.8.0.
⚠️ Breaking changes (spec v0.3 §15.7.6 / §4.3)
The someip.Message ↔ relay.Message conversion is now lossless (hazard H-002):
Meta["someip.msg_type"]now carries the numericMessageType; the human-readable label moved toMeta["someip.msg_type_name"](diagnostic only, ignored byFromMessage).ToMessage()now also emitssomeip.client_idandsomeip.session_id.FromMessage()restoresClientID,SessionID,MessageType,ReturnCode, andInterfaceVersion.
Other changes
SpecVersion→"0.3".Adapt().Subscribereadsrelay.WithEventIDto subscribe to a SOME/IP event group (resolves SoundMatt/RELAY#12).- New standalone
ErrWrongProtocolVersionsentinel +Message.Validate();codec.Decoderejects wrong-version frames with it. cmd/go-someipCLI output conforms to the §12 schemas; verified byrelay conform --strict(newrelay-conformCI gate).- Golden + error reference vectors vendored under
testdata/vectors/. - FuSa: 114 atomic requirements.
Full Changelog: v0.6.1...v0.7.0
v0.6.1 — codec round-trip + release workflow fixes
Patch release fixing two CI failures discovered after v0.6.0.
Fixes
- codec:
Encodenow always emits the canonical SOME/IPProtocolVersion(0x01) on the wire, so its output is unconditionally decodable. Previously a caller-set non-0x01version was preserved and then rejected byDecode's new protocol-version check (REQ-PROTO-001), breaking theEncode → Decoderound-trip. Found byFuzzEncodeRoundTrip. - ci(release): the Release workflow now force-adds (
git add -f) the go-FuSa safety artifacts, which are.gitignored for local development but committed on each release.
Full Changelog: v0.6.0...v0.6.1
v0.6.0 — RELAY spec v0.2 conformance
What's new
Full conformance with RELAY spec v0.2 across all three priority tiers.
P0 — Breaking renames
MessageTypeconstants now use theMsgTypeprefix:MsgTypeRequest,MsgTypeResponse,MsgTypeNotification,MsgTypeError,MsgTypeRequestNoReturn, and all TP variantsReturnCodeconstants now use theRetprefix:RetOK,RetNotOK,RetUnknownService, etc.SubscribeConfig/Option/ApplySubscribeOptsrenamed toSubscriberConfig/Option/ApplySubscriberOpts(now type aliases forrelay.SubscriberConfig/Option)ErrNotReadyrenamed toErrNotConnected
P1 — RELAY conformance (spec §5, §10, §14, §15, §17)
- Error sentinels wrap
relay.ErrClosed/ErrTimeout/ErrNotConnected/ErrPayloadTooLargesoerrors.Is(err, relay.ErrXxx)works across the stack - New
ErrPayloadTooLargewrappingrelay.ErrPayloadTooLarge BackPressurePolicywithDropNewest/DropOldest/BlockandWithBackPressureoptionSOMEIPProtocolVersion = 0x01;codec.Decoderejects frames with a different version- JSON tags on
Messagefields Message.ToMessage()/FromMessage()envelope conversionAdapt(Service) relay.Caller— protocol-agnostic application interfaceSpecVersion = "0.2"cmd/go-someip:version,capabilities,statusCLI commands
P2 — Optional interfaces (spec §9)
HealthProvider,MetricsProvider,Drainer
FuSa
- 112 atomic SEOOC requirements in
.fusa-reqs.json(up from 71)
Fixes
Full Changelog: v0.5.0...v0.6.0