Skip to content

Relay — Device Write-Back (a Use Case of the Conduit Effect Engine)

This document is a non-normative use-case description and pointer. It mandates nothing.

Relay is not, and must never become, a platform component — not a microservice, not a standalone capability contract, not a repo. "Relay" is the working name for one use case of the Conduit Effect Engine: writing configuration and commands to physical field devices over MQTT/Sparkplug B (e.g. SignalFire Ranger nodes on the Simplicity EMQX broker). Decision: charles.bell, 2026-06-10, resolving simplicity#124. Anything that would grow Relay into a component belongs in Conduit's Effect Engine instead.

The use case

An authorized user opens the sensor configuration page (Beacon/ADI-UI), changes a setting (e.g. Reporting Frequency, a flooding threshold, equipment On/Off/Auto), and confirms. Cortex stages the change as a Decision Effect; a human attests (the #107 "secondary confirmation"); Cortex's agent_dispatch hands it to Conduit's effect_dispatch; the relay-write effect DAG gates on the device being online, writes the value as a Sparkplug B command, verifies the confirming BIRTH, syncs any platform-side state, and emits an immutable audit record. The user polls status across the device's eDRX sleep window (~7–15 min). No field visit.

Where everything normative lives

Concern Normative home
Operator chains, Sparkplug encoding, online gate, runtime targeting component.conduit.effect-engine#relay-write-pattern (conduit/specs/effect-engine.md)
Whitelist + DBIRTH datatype fidelity, confirm-value, attested dispatch, dual-write, read, rebirth same — #relay-write-pattern.invariants
Registry source, write classes, field readiness, add-on equipment same — #relay-write-pattern.registry / .equipment
Immutable audit ledger same — #relay-write-pattern.audit-ledger
Cortex client tools, role gating, status polling same — #relay-write-pattern.clients
Decision Effect object, lifecycle, attestation firewall product.decision-effect (developers-environment/specs/products/decision-effect.md)
Tickets / gap items developers-environment/specs/dev-plan/conduit-effect-engine.yml

History

  • 2026-05-27 — proposed as a new standalone platform microservice (relay, port 8010; developers-environment!25, reviewed via simplicity#124).
  • 2026-06-10 (am) — revised to a platform capability contract realized by the Effect Engine, after the EffectsInit/relay_audit_emit/sparkplug_* operator work landed in Conduit.
  • 2026-06-10 (pm) — demoted to this use-case pointer: no Relay component of any kind; all normative content moved into component.conduit.effect-engine. Port 8010 stays released. The dev-plan's seven relay-service items were removed and their tracking issues (161–167) closed as superseded.

Depends on: component.conduit.effect-engine, product.decision-effect