Architecture

Detailed-design specifications. Pages under this section follow the arc42 template (12 sections) encoded with sphinx-needs using the useblocks “x-as-code” arc42 directive types — arch-decision, building-block, architecture, constraint, quality-goal, risk, glossary. Legacy spec directives may also appear for detailed-design notes that predate the arc42 adoption.

Building blocks

Used filter: types(building-block)

ID

Title

Status

Implements

BB_0001

taktora-connector-core

open

REQ_0220; REQ_0221; REQ_0222

BB_0002

taktora-connector-transport-iox

open

REQ_0200; REQ_0205; REQ_0206

BB_0003

taktora-connector-codec

open

REQ_0210; REQ_0212

BB_0004

taktora-connector-mqtt

open

REQ_0250; REQ_0251; REQ_0258

BB_0005

taktora-connector-host

open

REQ_0270; REQ_0271; REQ_0272

BB_0010

ConnectorEnvelope (sub-block of BB_0002)

open

REQ_0200; REQ_0201; REQ_0202; REQ_0203; REQ_0204

BB_0011

ServiceFactory (sub-block of BB_0002)

open

REQ_0206

BB_0020

MqttConnector (sub-block of BB_0004, plugin side)

open

REQ_0250; REQ_0251

BB_0021

MqttGateway (sub-block of BB_0004, gateway side)

open

REQ_0258; REQ_0259; REQ_0260; REQ_0261

BB_0022

Tokio bridge (sub-block of BB_0021)

open

REQ_0259; REQ_0260; REQ_0261

BB_0023

Dispatch scratch (pre-allocated)

open

REQ_0060

BB_0024

taktora-bounded-alloc crate

open

REQ_0300; REQ_0301; REQ_0302; REQ_0303; REQ_0304

BB_0030

taktora-connector-ethercat

open

REQ_0310; REQ_0311; REQ_0312; REQ_0321

BB_0031

EthercatConnector (sub-block of BB_0030, plugin side)

open

REQ_0310; REQ_0311

BB_0032

EthercatGateway (sub-block of BB_0030, gateway side)

open

REQ_0312; REQ_0313; REQ_0325

BB_0033

PDO mapping (sub-block of BB_0030)

open

REQ_0314; REQ_0315

BB_0034

Tokio bridge for ethercrab (sub-block of BB_0030)

open

REQ_0322; REQ_0323; REQ_0324

BB_0040

taktora-connector-zenoh

open

REQ_0400; REQ_0420; REQ_0440; REQ_0444

BB_0041

ZenohConnector (sub-block of BB_0040, plugin side)

open

REQ_0400; REQ_0401; REQ_0420

BB_0042

ZenohGateway (sub-block of BB_0040, gateway side)

open

REQ_0403; REQ_0426; REQ_0440; REQ_0442

BB_0043

Zenoh query handles (sub-block of BB_0041)

open

REQ_0420; REQ_0421; REQ_0422; REQ_0423; REQ_0424

BB_0044

Tokio bridge for zenoh (sub-block of BB_0042)

open

REQ_0403; REQ_0404; REQ_0405; REQ_0406

BB_0050

Per-task cycle statistics

open

REQ_0100

BB_0051

Statistics snapshot view

open

REQ_0103

BB_0052

xtask-preempt-rt harness

open

REQ_0111

BB_0060

ethercat-esi (parser crate)

open

FEAT_0051

BB_0061

ethercat-esi-codegen (IR + backend trait)

open

FEAT_0052

BB_0062

ethercat-esi-codegen-ethercrab (concrete backend)

open

FEAT_0053

BB_0063

ethercat-esi-rt (runtime trait crate)

open

FEAT_0054

BB_0064

ethercat-esi-build (build.rs glue)

open

FEAT_0055

BB_0065

ethercat-esi-cli (cargo subcommand)

open

FEAT_0056

BB_0066

ethercat-esi-verify (EEPROM diff tool)

open

FEAT_0057

BB_0067

taktora-connector-ethercat EsiDevice adapter

open

FEAT_0050

BB_0070

taktora-connector-can crate

open

REQ_0600; REQ_0602; REQ_0603; REQ_0604; REQ_0605

BB_0071

CanConnector (sub-block of BB_0070, plugin side)

open

REQ_0600; REQ_0601; REQ_0612; REQ_0615; REQ_0621

BB_0072

CanGateway (sub-block of BB_0070, gateway side)

open

REQ_0613; REQ_0614; REQ_0620; REQ_0624; REQ_0625; REQ_0630; REQ_0631

BB_0073

Tokio bridge for CAN (sub-block of BB_0072)

open

REQ_0605; REQ_0606; REQ_0607; REQ_0608

BB_0074

Per-iface filter compiler (sub-block of BB_0072)

open

REQ_0622; REQ_0623; REQ_0624

BB_0075

MockCanInterface (sub-block of BB_0070)

open

REQ_0604

BB_0080

fieldbus-od-core

open

FEAT_0061

BB_0081

canopen-eds parser crate

open

FEAT_0062

BB_0082

canopen-eds-codegen

open

FEAT_0063

BB_0083

canopen-eds-codegen-taktora

open

FEAT_0064

BB_0084

canopen-eds-rt

open

FEAT_0065

BB_0085

canopen-eds-build

open

FEAT_0066

BB_0086

canopen-eds-cli

open

FEAT_0067

BB_0087

canopen-eds-verify

open

FEAT_0068

BB_0088

taktora-connector-can adapter (follow-on)

open

FEAT_0060

Architecture views (context, runtime, deployment, crosscutting)

Used filter: types(architecture)

ID

Title

Status

Refines

ARCH_0001

System context

open

FEAT_0030

ARCH_0002

Level-1 building block decomposition

open

BB_0001; BB_0002; BB_0003; BB_0004; BB_0005; BB_0030; BB_0040

ARCH_0010

Send path (app → broker)

open

REQ_0205; BB_0021; BB_0022

ARCH_0011

Receive path (broker → app)

open

REQ_0205; REQ_0254; BB_0021; BB_0022

ARCH_0012

Health and reconnect lifecycle

open

REQ_0230; REQ_0234; BB_0021

ARCH_0013

Shutdown coordination

open

REQ_0243; BB_0005; BB_0021

ARCH_0020

In-process gateway deployment

open

REQ_0240; REQ_0241

ARCH_0021

Separate-process gateway deployment

open

REQ_0240; REQ_0242

ARCH_0030

Codec — compile-time generic

open

ADR_0005; BB_0003

ARCH_0031

Error handling — single error type, explicit origins

open

REQ_0213; REQ_0214

ARCH_0032

Observability — Observer + ExecutionMonitor adapter

open

REQ_0273; BB_0005

ARCH_0033

Back-pressure — explicit at every bounded buffer

open

REQ_0260; REQ_0261

ARCH_0040

EtherCAT bus bring-up sequence

open

REQ_0313; REQ_0314; REQ_0315; BB_0032; BB_0033

ARCH_0041

Cyclic process-data exchange and working-counter health

open

REQ_0316; REQ_0317; REQ_0319; REQ_0320; BB_0032; BB_0034

ARCH_0042

Optional Distributed Clocks bring-up

open

REQ_0318; BB_0032

ARCH_0050

Toolchain layering (crate dependency graph)

open

FEAT_0050

ARCH_0051

Build-time vs runtime separation

open

FEAT_0050

ARCH_0052

Build-time generation flow

open

FEAT_0055

ARCH_0053

Preop bring-up flow (per device)

open

FEAT_0054

ARCH_0054

Toolchain crate placement in workspace

open

FEAT_0050

ARCH_0060

CAN frame send path (app → bus)

open

REQ_0613; REQ_0621; BB_0072; BB_0073

ARCH_0061

CAN receive path with multi-iface demux

open

REQ_0614; REQ_0620; REQ_0622; REQ_0624; BB_0072; BB_0074

ARCH_0062

CAN bus health and bus-off recovery

open

REQ_0630; REQ_0632; REQ_0633; REQ_0634; REQ_0635; BB_0072

ARCH_0070

Toolchain layering (crate dependency graph)

open

FEAT_0060

ARCH_0071

Build-time vs runtime separation

open

FEAT_0060

Architecture decisions

Used filter: types(arch-decision)

ID

Title

Status

Refines

ADR_0001

Spec scope — framework core + MQTT reference

open

FEAT_0030

ADR_0002

Umbrella feature is a peer of FEAT_0010

open

FEAT_0030

ADR_0003

Both deployment shapes supported

open

FEAT_0035

ADR_0004

Per-channel envelope size, declared in descriptor

open

REQ_0201

ADR_0005

Codec is a generic parameter on the connector

open

REQ_0211

ADR_0006

Explicit-builder plugin discovery

open

REQ_0270

ADR_0007

Plugin and gateway are both taktora-executor consumers

open

CON_0001

ADR_0008

Routing carried as a typed struct

open

REQ_0221

ADR_0009

Lifecycle = ReconnectPolicy + ConnectorHealth

open

FEAT_0034

ADR_0010

MQTT scope — realistic but bounded

open

FEAT_0036

ADR_0011

Pre-allocate dispatch scratch at Executor::build time

open

REQ_0060

ADR_0012

Compile-time caps + hand-rolled fixed-block bitmap

open

REQ_0300

ADR_0020

ethercrab as the EtherCAT MainDevice library

open

FEAT_0041

ADR_0021

Single MainDevice per gateway

open

REQ_0312

ADR_0022

Static PDO mapping declared at build time

open

REQ_0314; REQ_0315

ADR_0023

Distributed Clocks bring-up is opt-in

open

REQ_0318

ADR_0024

Linux raw socket only in first cut

open

REQ_0325

ADR_0025

``taktora-connector-ethercat`` module decomposition

open

FEAT_0041

ADR_0026

Tokio runtime owned by ``EthercatGateway``, joined on Drop

open

REQ_0321

ADR_0027

``EthercatConnectorOptions`` is a typed builder; PDO map declared as ``&'static [SubDeviceMap]``

open

REQ_0314; REQ_0315

ADR_0028

Verification harness — pure-logic unit tests + env-gated bus tests

open

FEAT_0041

ADR_0040

Zenoh queries live on a concrete handle type, not the Connector trait

open

FEAT_0044

ADR_0041

Stack-internal reconnect for Zenoh — no ReconnectPolicy

open

FEAT_0045

ADR_0042

One ZenohRouting struct carries pub/sub QoS; query knobs on options

open

FEAT_0043

ADR_0043

Reply framing uses a Zenoh-private 1-byte payload prefix

open

FEAT_0044

ADR_0050

Process boundary as spatial isolation context

open

AFSR_0001; AFSR_0002

ADR_0051

Bounded allocator as spatial-determinism anchor

open

AFSR_0003

ADR_0060

Fixed-bucket histogram for percentile estimation

open

REQ_0100

ADR_0061

Harness as xtask, not CI gate

open

REQ_0112

ADR_0070

Parser separated from codegen (strict layering)

open

FEAT_0050

ADR_0071

Two-trait runtime split (EsiDevice + EsiConfigurable)

open

FEAT_0054

ADR_0072

PDO assignment alternatives as sum types

open

FEAT_0053

ADR_0073

Future CANopen support via shared OD IR

accepted

FEAT_0050

ADR_0074

Vendor extensions captured as opaque blobs

open

FEAT_0051

ADR_0075

Object dictionary as static table, feature-gated

open

FEAT_0054

ADR_0076

Use prettyplease, not rustfmt, for emit formatting

open

FEAT_0055

ADR_0077

cargo subcommand for inspection, not proc-macro

open

FEAT_0056

ADR_0078

Lift OD IR to fieldbus-od-core now

open

FEAT_0061

ADR_0079

fieldbus-od-core stays data-only

open

FEAT_0061

ADR_0080

Re-export from ethercat-esi, do not break it

open

FEAT_0061

ADR_0081

INI backend choice — serde-derive façade

open

FEAT_0062

ADR_0082

PDO entry dedup is structural, name-blind

open

FEAT_0063

ADR_0083

Dummy entries skip into bit offsets, not padding fields

open

FEAT_0064

ADR_0084

heapless::Vec<u8, 8> for PdoOut payload

open

FEAT_0065

ADR_0085

Async only on configure, sync on frame path

open

FEAT_0065

ADR_0086

JSON SDO-dump format with versioned schema

open

FEAT_0068

Quality goals and constraints

Used filter: types(quality-goal)

ID

Title

Status

Refines

QG_0001

Fault isolation between protocol stack and app

open

FEAT_0030

QG_0002

Compile-time type safety end-to-end

open

FEAT_0030

QG_0003

Zero-copy data flow on the publish path

open

FEAT_0031

QG_0004

Uniform observable health across connectors

open

FEAT_0034

QG_0010

Build-time determinism (same ESI in → same code out)

open

FEAT_0050

QG_0011

Layering integrity (strict left-to-right deps)

open

FEAT_0050

QG_0012

Zero runtime cost of codegen presence

open

FEAT_0050

QG_0013

Trait stability for ecosystem adoption

open

FEAT_0054

QG_0014

Build-time determinism (same EDS in → same code out)

open

FEAT_0060

QG_0015

Layering integrity (strict left-to-right deps)

open

FEAT_0060

QG_0016

Zero runtime cost of codegen presence

open

FEAT_0060

QG_0017

Trait stability for ecosystem adoption

open

FEAT_0065

Used filter: types(constraint)

ID

Title

Status

Refines

CON_0001

Built on taktora-executor's WaitSet

open

FEAT_0030

CON_0002

iceoryx2 0.8.x as the IPC layer

open

FEAT_0030

CON_0003

Rust 2024 edition / MSRV 1.85

open

FEAT_0030

CON_0004

Single-threaded test discipline

open

FEAT_0030

CON_0005

Tokio sidecar contained per connector crate

open

FEAT_0030

CON_0010

cargo build-script semantics

open

FEAT_0055

CON_0011

ethercrab API surface as upstream

open

FEAT_0053

CON_0012

bitvec for process-image access

open

FEAT_0054

CON_0013

no_std + alloc baseline for parser and runtime trait

open

FEAT_0051

CON_0014

ETG owns the ESI XML schema

open

FEAT_0051

CON_0020

cargo build-script semantics

open

FEAT_0066

CON_0021

CiA 301 / 306 own the EDS schema

open

FEAT_0062

CON_0022

no_std + alloc baseline for OD core, parser, runtime

open

FEAT_0061

CON_0023

heapless 0.8 surface for fixed-capacity buffers

open

FEAT_0065

Risks

Used filter: types(risk)

ID

Title

Status

Links

RISK_0001

rumqttc API stability before 1.0

open

RISK_0002

iceoryx2 0.8 pre-1.0 churn

open

RISK_0003

Const-generic monomorphisation cost

open

RISK_0004

Tokio bridge latency

open

RISK_0005

Wildcard demux pathological topic patterns

open

RISK_0010

OD table size blow-up on coupling modules

open

RISK_0011

Beckhoff vendor extensions churn the IR

open

RISK_0012

ethercrab API churn breaking the backend

open

RISK_0013

ESI XML schema drift across vendors

open

RISK_0014

Generated code becomes load-bearing without migration path

open

RISK_0020

EDS files in the wild are inconsistent

open

RISK_0021

serde-ini ecosystem thinness

open

RISK_0022

CiA 301 OD blow-up on profile-rich devices

open

RISK_0023

COB-ID base assumptions in generated code

open

Glossary

Used filter: types(term)

ID

Title

Status

GLOSS_0001

Connector

open

GLOSS_0002

Plugin

open

GLOSS_0003

Gateway

open

GLOSS_0004

ConnectorEnvelope

open

GLOSS_0005

Codec

open

GLOSS_0006

Routing

open

GLOSS_0007

Bridge

open

GLOSS_0008

Health

open

GLOSS_0009

Reconnect policy

open

GLOSS_0010

Channel

open

GLOSS_0011

ASIL

open

GLOSS_0020

ESI

open

GLOSS_0021

SII

open

GLOSS_0022

PDO

open

GLOSS_0023

CoE

open

GLOSS_0024

OD (Object Dictionary)

open

GLOSS_0025

InitCmd

open

Legacy detailed-design specifications

No needs passed the filters