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