2026-07 backlog sweep: RELAY v1.11, diagnostic/sporadic frames, CLI/Docker/doc fixes - #45
Merged
Conversation
…, CLI/Docker/doc fixes RELAY spec conformance: - Bump github.com/SoundMatt/RELAY to v1.11.0 (go.mod, CI relay pins); relay versions now reports ALIGNED=true instead of drifting on spec_version 1.10 - cmd/go-lin's optional send/subscribe commands now implement the spec §11.2 flag signatures: `send --id <uint> --data <hex>` and `subscribe --format json --count N` - Docker: add a go-lin image target/stage carrying the spec §13.5 io.relay.* labels, published as ghcr.io/soundmatt/go-lin (previously only the non-conformant quickstart/lintool images were published) - README documents cmd/go-lin (the RELAY-conformant CLI) as the primary CLI; cmd/lintool is now clearly marked legacy Bug fixes: - virtual.Bus.CloseWithDrain now returns lin.ErrTimeout (and counts undelivered frames into DropCount) when ctx expires before draining completes, instead of silently returning nil; the test that had locked in the wrong behavior now asserts the correct one - lin.FromMessage now wraps ErrInvalidFrame for an out-of-range or unparseable message ID, so errors.Is(err, lin.ErrInvalidFrame) works - master.Node.SetSchedule now accepts an empty schedule, matching the documented lin.MasterBus.SetSchedule contract (Run still fails fast on an empty schedule via the independent REQ-MASTER-009 guard) New capabilities: - Diagnostic frames (LIN 2.x §4.2.3): lin.MasterRequestFrame / lin.SlaveResponseFrame single-frame wire encoding, plus master.Node.Diagnostics driving the master-request/slave-response exchange - Sporadic frames (LIN 2.x §2.3.2.4): master.Node.SetSporadicGroup / SetPending select the highest-priority pending candidate for a shared schedule slot, or skip the slot when nothing is pending - ldf.DB.Encode: write-direction signal encoding (the inverse of Decode) - New stats package: frames/sec, per-ID counters, estimated bus load - go-FuSa CLI pin bumped v0.30.0 -> v0.33.3 (CI + release-artifact workflow); test coverage already exceeds the 85% CI floor on every library package (91-100%) - Runnable Example* functions for the core lin/virtual/master/ldf/stats API surface (pkg.go.dev) Docs: - ROADMAP.md replaced the stale pre-RELAY release plan with the actual v0.1.0-v1.2.0 history and re-baselined open work against the current issue tracker - Added CHANGELOG.md Closes #37 Closes #38 Closes #43 Closes #42 Closes #41 Closes #40 Closes #39 Closes #9 Closes #6 Closes #10 Closes #2 Closes #4 Closes #11 Closes #44 Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Full sweep of the 21 issues that were open at the start of this pass (2026-07-27), triaged and actioned as below.
Issues fixed here
RELAY spec conformance
github.com/SoundMatt/RELAYto v1.11.0 (go.mod + CIrelay@pins);relay versionsnow reportsALIGNED=truesend/subscribenow implement the spec §11.2 flag signatures (send --id <uint> --data <hex>,subscribe --format json --count N)go-linimage target with the spec §13.5io.relay.*labels, published asghcr.io/soundmatt/go-lincmd/go-lin(the RELAY-conformant CLI) as primary;cmd/lintoolmarked legacyBug fixes
virtual.Bus.CloseWithDrainnow returnslin.ErrTimeout(and counts undelivered frames intoDropCount) on ctx expiry instead of silently returningnil; the test that had certified the wrong behavior as correct now asserts the right onelin.FromMessagenow wrapsErrInvalidFramesoerrors.Isworks for out-of-range/malformed message IDsmaster.Node.SetSchedulenow accepts an empty schedule, matching the documentedlin.MasterBus.SetSchedulecontract (this was also a formal ASIL-B requirement, REQ-MASTER-010 — updated its description/rationale rather than just the code, sinceRunindependently guards the actual busy-loop hazard via REQ-MASTER-009)New capabilities
lin.MasterRequestFrame/lin.SlaveResponseFrame(LIN 2.x §4.2.3 single-frame wire encoding) +master.Node.Diagnosticsmaster.Node.SetSporadicGroup/SetPending(LIN 2.x §2.3.2.4 priority-ordered candidate selection, correct slot-skip when nothing pending)ldf.DB.Encode: write-direction signal encoding (inverse ofDecode)statspackage: frames/sec, per-ID counters, estimated bus loadExample*functions acrosslin/virtual/master/ldf/statsDocs
ROADMAP.mdreplaced the stale pre-RELAY plan with actual v0.1.0–v1.2.0 history; addedCHANGELOG.mdAll new safety-relevant code carries
//fusa:req///fusa:testannotations and corresponding.fusa-reqs.jsonentries (13 new requirements: REQ-MASTER-014/015/016, REQ-STATS-001..008);gofusa trace -req-coverage 100and-sec-tested 100both pass at 100%.Closed as already-resolved (not part of this PR's commit — closed directly with evidence)
gofusa tracealready reported 100% requirement traceability and 100% test coverage onmainbefore this pass, and has been continuously CI-gated since v1.1.0 (§20 continuous conformance), superseding the original one-time-review ask. See issue comment for full evidence.Left open (out of scope for this pass — comment posted on each explaining why)
Verification
gofmt -l .— cleango vet ./...— cleango test ./... -race -count=1— all pass (221 tests)go test -fuzz=... -fuzztime=2000xfor all three fuzz targets — cleanrelay conform --strict/relay interop --protocol LINagainst the builtcmd/go-linbinary with RELAY v1.11.0 — both PASSgofusagate suite (check,trace -req-coverage 100,trace -sec-tested 100,cyber,vuln,qualify,verify) — all green with go-FuSa v0.33.3