Architecture decisions

arc42 §9–§10.

9. Architecture decisions

The decisions ADR_0001 through ADR_0010 recorded in the solution strategy are the canonical architecture decision log for this framework. This section is a needtable view for quick browsing.

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_0062

Shared no_std taktora-stats crate

open

REQ_0104

ADR_0063

Hybrid two-layer timing measurement

open

REQ_0265

ADR_0064

Motion-flavored adapted reference workload

open

REQ_0111

ADR_0065

Abort on framework-invariant violation; watchdog drives outputs safe

open

REQ_0123

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

ADR_0087

Adopt the log crate as workspace logging facade

accepted

FEAT_0070

ADR_0088

Pure-Rust DLT via dlt-core; no libdlt FFI

accepted

FEAT_0072

ADR_0089

Two-crate split (facade vs DLT backend)

accepted

FEAT_0070

ADR_0090

Bridge existing tracing emitters via tracing-log

accepted

FEAT_0078

ADR_0091

Console dev fallback when no daemon configured

accepted

FEAT_0077

ADR_0092

Build-time codegen over runtime parsing

open

FEAT_0080

ADR_0093

Positional addressing; alias and identity as bring-up assertions

open

FEAT_0085

ADR_0094

Local-only ESI resolution; URLs are a vendor-and-pin step

open

FEAT_0084

ADR_0095

Working-counter expectation derived only, never overridden

open

FEAT_0085

ADR_0096

One file, one bus; multi-bus distribution deferred

open

FEAT_0081

ADR_0097

std/POSIX baseline for the parser and OD-core crates

accepted

FEAT_0051

ADR_0098

Object-safe EsiDevice, identity reuse, ethercrab behind SdoWrite

accepted

FEAT_0054

ADR_0099

f64 + libm in the trajectory core; integer increments at the drive

accepted

FEAT_0091

ADR_0100

Absolute-grid cyclic dispatch via Linux timerfd; self-computed epoll timeout fails on ms-rounding

accepted

FEAT_0011

ADR_0101

Lateness grid anchored on scan count plus dispatcher skip signal

accepted

FEAT_0021

ADR_0102

The ESI parser emits a faithful IR and never resolves configuration

accepted

FEAT_0051

ADR_0103

Startup SDOs as a typed SubDeviceMap field

accepted

REQ_0853

ADR_0104

Joint per-device OpMode enum supersedes per-direction PDO-assignment alternatives

accepted

ADR_0072

ADR_0105

Per-phase dispatch dedup via the existing pending_cycle token

accepted

FEAT_0017

ADR_0106

AttachmentMap — sorted-Vec O(log n) attachment-to-task resolution with lazy-learn dual identity

accepted

FEAT_0017


10. Quality requirements

The four quality goals (Fault isolation between pro... (QG_0001)Uniform observable health a... (QG_0004)) form the root of the quality tree. Concrete quality scenarios that test them are authored as test directives in Connector framework — verification — the verification artefacts are the operational form of the quality tree. A future spec round may add an explicit quality-tree architecture element if measurement targets (latency budgets, throughput) become first-class.