Cross-system harnesses need a canonical event model, not adapter sprawl
I think cross-system harnesses need a canonical event model, not adapter sprawl. When every pair of runtimes translates directly to every other pair, identity, lifecycle, errors, and effects acquire different meanings at each edge. The code may move messages successfully while the system loses the very semantics needed for recovery and audit. Interoperability begins when one owned model states what happened, not when two JSON documents can be converted.
The harness landscape is still vocabulary-poor. Different projects use “session,” “task,” “turn,” “run,” and “event” for overlapping but non-equivalent concepts. Even configuration names collide. That immaturity makes pairwise adapters seductive because they postpone agreement. It also makes them dangerous: each adapter becomes a private interpretation of cancellation, partial output, retries, authority, and completion. After a few integrations, no operator can explain whether two logs describe the same work.
I would define a canonical envelope around invariants the platform owns: event identity, event version, occurred-at time, observed-at time, tenant, principal, delegated authority, task and attempt identities, causation and correlation, lifecycle transition, effect classification, artifact reference, error class, resource spend, and trace context. Payloads can remain typed variants, but the envelope gives every system a shared grammar for ordering, attribution, replay, and policy.
The two-log pattern sharpens the design. A session event log should be complete enough to reconstruct control state and recover execution. A telemetry stream can be sampled, aggregated, and optimized for operational queries. Combining them makes the recovery record noisy and expensive; treating telemetry as the source of truth makes sampling a correctness defect. Decision-preserving telemetry remains essential, but it is a projection from authoritative events, not a substitute for them.
Adapters still exist, but their job becomes bounded. Each protocol maps into and out of the canonical model, declares unsupported states, validates versions, and records semantic loss. A remote system that cannot represent delegated authority should not silently drop it. A transport that cannot resume a partial stream should surface that limitation. This is why protocol adapters are permanent architecture: the canonical model prevents permanence from becoming uncontrolled multiplication.
A canonical model also creates a testable contract. Recorded events can drive replay fixtures across implementations; conformance tests can ask whether cancellation reaches the same terminal state, whether retries preserve identity, and whether one confirmed effect remains one confirmed effect after translation. The model becomes part of the harness product because it carries behavior across plugin kernels, RPC boundaries, and changing providers.
It also limits organizational drift. Security, evaluation, billing, and operations can project from the same event identities instead of maintaining separate interpretations of a run. When their numbers disagree, the disagreement becomes a projection defect that can be traced to one authoritative record—not a reconciliation exercise across four incompatible logs.
There is one precise concession: a canonical model should not try to erase every runtime-specific feature. Forcing a novel scheduling primitive or reasoning artifact into a lowest-common-denominator enum can destroy useful meaning. The core should stay small, stable, and concerned with cross-system invariants; vendor-specific payloads should survive as namespaced extensions with explicit readers. Canonical does not mean universal internal representation.
The alternative is an adapter graph whose edges quietly redefine the system. I would rather pay once for an event language that makes identity, authority, effects, and failure inspectable, then require every boundary to state what it preserves. Cross-system harnesses do not become coherent by sharing a transport. They become coherent when the same consequential event means the same thing everywhere it travels.