Skip to content

docs: add external-interop architecture for THEME-K (#125) - #188

Merged
SoundMatt merged 1 commit into
mainfrom
docs/theme-k-interop-architecture
Aug 21, 2026
Merged

docs: add external-interop architecture for THEME-K (#125)#188
SoundMatt merged 1 commit into
mainfrom
docs/theme-k-interop-architecture

Conversation

@SoundMatt

Copy link
Copy Markdown
Owner

Summary

Design document for THEME-K (#125) and its six instances INTEROP-01
through INTEROP-07 (#147-152), requested by the user before touching
any individual repo's CI. Mirrors RCP-ARCHITECTURE.md's role as a
coordinating document for a change spanning multiple repositories.

This PR adds the design doc only — no CI changes in any repo yet.
Individual INTEROP-0x issues remain open, to be implemented as
separate follow-on PRs against this design.

What's in it

  • Current-state inventory, independently re-verified against the
    real .github/workflows/*.yml in every affected repo (RCP ×4, LIN
    ×3, MQTT ×2, DDS ×3, CAN ×3, SOME/IP ×1) via a background
    investigation agent — not taken from the filing audit's own text.
  • Two things the audit got wrong or missed, surfaced by that
    re-verification:
    • MQTT's claimed "no probe-then-skip" is false — both go-mqtt and
      rust-MQTT gate their live-broker job behind a probe step.
    • go-DDS/rust-DDS's CycloneDDS probe pulls a Docker tag
      (eclipse-cyclonedds/cyclonedds:latest) that was never published
      — these jobs plausibly never execute at all, a stronger finding
      than the audit's general "probe-then-skip" framing. cpp-DDS
      already fixed this by building the peer locally instead.
  • Four ecosystem-wide conventions that resolve INTEROP-04/05/06/07
    as small, independent PRs requiring no new vector set: naming
    discipline, exit-code discipline, sequenced probe-hardening, and
    service-container-first-as-a-principle (not literal MQTT YAML
    everywhere).
  • Scoped but not built: INTEROP-01/02's RCP/LIN external
    golden-vector harnesses — vector location, citation requirement,
    harness shape, and sequencing (RCP before LIN), deliberately left as
    a separate, careful, multi-session follow-on rather than rushed here.
  • Recommended shipping order, each step independent and low-risk.

Verification

  • Docs-only change; go build/vet/test clean, gofmt -l . clean
    (no Go source touched, confirming no unintended side effects)
  • Every claim in the inventory table traces to a file:line citation
    from a background agent that read the real CI YAML directly

New docs/INTEROP-ARCHITECTURE.md, mirroring RCP-ARCHITECTURE.md's role
as a coordinating document for a change spanning multiple repos.
Precedes any implementation of THEME-K (#125) and its six instances
INTEROP-01 through INTEROP-07 (#147-152).

Every claim in the current-state inventory was independently
re-verified against the real .github/workflows/*.yml in each affected
repo (RCP x4, LIN x3, MQTT x2, DDS x3, CAN x3, SOME/IP x1), not taken
from the filing audit's own text. This surfaced two things the audit
got wrong or missed entirely:

- The audit claimed MQTT has no probe-then-skip pattern; both go-mqtt
  and rust-MQTT actually do gate their live-broker jobs behind a probe
  step, identical in spirit to the DDS/CAN pattern the audit called
  out separately as a problem.
- go-DDS and rust-DDS's CycloneDDS interop jobs probe
  `docker pull eclipse-cyclonedds/cyclonedds:latest` -- a tag that,
  per the repos' own code comments, was never published to any public
  registry. These jobs plausibly never execute at all, not merely
  "sometimes skip" as the audit characterized probe-then-skip
  generally. cpp-DDS already fixed this by building the peer image
  locally from upstream source instead.

Defines four ecosystem-wide conventions that resolve INTEROP-04,
-05, -06, -07 as small, independent, low-risk PRs with no new vector
set required: naming discipline (*-interop only for a genuine external
peer; *-conformance for RELAY's own internal relay interop check;
*-loopback/*-multiprocess for same-port self-tests, citing rust-CAN's
existing can_two_process_interop/can_thirdparty_interop split as the
reference example), exit-code discipline (no more `|| true` +
grep-scraping -- rust-RCP and rust-LIN are the two violators), probe
hardening sequenced after the DDS image-tag bug fix (harden a probe
only once its target can genuinely succeed), and service-container-
first applied as a principle rather than literal MQTT YAML (CAN's peer
is a kernel device, DDS has no official image).

Scopes but does not build INTEROP-01/02 (RCP and LIN external
golden-vector harnesses): defines vector location
(spec/vectors/external/), citation requirement (every vector traces to
a TC18/ISO-17987 section reference or it provides none of the value
this exists to add), harness shape (relay interop --external, reusing
§20.1's existing equivalence-check machinery), and sequencing
(RCP before LIN). Deliberately not authored here -- independently
derived vectors are a careful, separately-scoped, multi-session effort
on their own, not something to rush inside a coordinating doc.

Investigation delegated to a background Explore agent reading every
repo's real CI config directly; findings incorporated verbatim with
file:line citations preserved in the doc's inventory table.

Signed-off-by: Matt <47545907+SoundMatt@users.noreply.github.com>
@SoundMatt
SoundMatt merged commit 03c9907 into main Aug 21, 2026
8 checks passed
@SoundMatt
SoundMatt deleted the docs/theme-k-interop-architecture branch August 21, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant