Requirements

System-level requirements. The spec is organised under three peer top-level features:

Each req directive :satisfies: one feat parent; each capability-cluster feat :satisfies: its top-level umbrella feature.

Requirements at a glance

Used filter: types(req)

ID

Title

Status

Satisfies

REQ_0001

Configurable scan period

open

FEAT_0011

REQ_0002

One execution per scan period

open

FEAT_0011

REQ_0003

Scan-cycle execution observability

open

FEAT_0011

REQ_0010

Subscriber-triggered ingestion

open

FEAT_0012

REQ_0011

Publisher-driven emission

open

FEAT_0012

REQ_0012

Zero-copy IPC transport

open

FEAT_0012

REQ_0013

Notification-drop visibility

open

FEAT_0012

REQ_0020

Sequential chain execution

open

FEAT_0013

REQ_0021

Parallel DAG execution

open

FEAT_0013

REQ_0022

Abort propagation

open

FEAT_0013

REQ_0023

Conditional inclusion

open

FEAT_0013

REQ_0030

Subscriber deadline detection

open

FEAT_0014

REQ_0031

Per-execute timing visibility

open

FEAT_0014

REQ_0040

Core-affinity assignment

open

FEAT_0015

REQ_0041

SCHED_FIFO priority on Linux

open

FEAT_0015

REQ_0050

Signal-driven shutdown

open

FEAT_0016

REQ_0051

Programmatic shutdown wakeup

open

FEAT_0016

REQ_0060

No heap allocation in dispatch

implemented

FEAT_0017

REQ_0061

Statically-sized task pool

open

FEAT_0017

REQ_0062

Pre-allocated error slot

open

FEAT_0017

REQ_0063

Wait-free completion signalling

open

FEAT_0017

REQ_0070

Per-task overrun fault transition

open

FEAT_0018

REQ_0071

Executor-wide overrun fault transition

open

FEAT_0018

REQ_0072

Fault-handler item dispatch

open

FEAT_0018

REQ_0073

Fault state observability

open

FEAT_0018

REQ_0080

Mode lifecycle

open

FEAT_0019

REQ_0081

Mode transition triggers

open

FEAT_0019

REQ_0082

Per-mode task gating

open

FEAT_0019

REQ_0083

Mode change observability

open

FEAT_0019

REQ_0090

Process-restart persistence

open

FEAT_0020

REQ_0091

Memory-mapped backing

open

FEAT_0020

REQ_0092

Crash-atomic checkpoints

open

FEAT_0020

REQ_0093

Recovery status reporting

open

FEAT_0020

REQ_0100

Per-task latency percentiles

draft

FEAT_0021

REQ_0101

Per-task maximum jitter

draft

FEAT_0021

REQ_0102

Per-task overrun counter

draft

FEAT_0021

REQ_0103

Statistics query API

draft

FEAT_0021

REQ_0104

Allocation-free telemetry update

draft

FEAT_0021

REQ_0110

Documented worst-case jitter

draft

FEAT_0022

REQ_0111

Cyclictest-style benchmark harness

draft

FEAT_0022

REQ_0112

Documented reproducer procedure

draft

FEAT_0022

REQ_0113

Harness consumes runtime telemetry

draft

FEAT_0022

REQ_0120

Adapter-driven I/O

open

FEAT_0023

REQ_0121

Out-of-tree driver crates

open

FEAT_0023

REQ_0122

Protocol-neutral runtime

open

FEAT_0010

REQ_0200

ConnectorEnvelope is a POD type

open

FEAT_0031

REQ_0201

Per-channel max payload size

open

FEAT_0031

REQ_0202

Sequence number monotonically increasing

open

FEAT_0031

REQ_0203

Timestamp recorded at send

open

FEAT_0031

REQ_0204

Correlation id is a passive carrier

open

FEAT_0031

REQ_0205

Zero-copy publish via iceoryx2 loan

open

FEAT_0031

REQ_0206

One iceoryx2 service per channel direction

open

FEAT_0031

REQ_0210

PayloadCodec trait

open

FEAT_0032

REQ_0211

Codec is a generic parameter on connectors

open

FEAT_0032

REQ_0212

JsonCodec is the default codec

open

FEAT_0032

REQ_0213

Codec encode error variant

open

FEAT_0032

REQ_0214

Codec decode error variant

open

FEAT_0032

REQ_0220

Connector trait

open

FEAT_0033

REQ_0221

ChannelDescriptor carries typed routing

open

FEAT_0033

REQ_0222

Routing is a marker trait with bounds

open

FEAT_0033

REQ_0223

create_writer / create_reader return concrete handles

open

FEAT_0033

REQ_0224

Connector ships its own routing struct

open

FEAT_0033

REQ_0230

ConnectorHealth state machine

open

FEAT_0034

REQ_0231

subscribe_health returns a Channel of HealthEvent

open

FEAT_0034

REQ_0232

ReconnectPolicy trait

open

FEAT_0034

REQ_0233

ExponentialBackoff default policy

open

FEAT_0034

REQ_0234

HealthEvent emitted on every transition

open

FEAT_0034

REQ_0235

Stack-internal-reconnect connectors emit health uniformly

open

FEAT_0034

REQ_0240

Same envelope contract for both deployments

open

FEAT_0035

REQ_0241

In-process gateway is a tokio task

open

FEAT_0035

REQ_0242

Separate-process gateway is a self-contained binary

open

FEAT_0035

REQ_0243

Clean exit on SIGINT / SIGTERM on both sides

open

FEAT_0035

REQ_0244

No app↔gateway control-plane envelopes

open

FEAT_0035

REQ_0250

MqttConnector implements Connector

open

FEAT_0036

REQ_0251

MqttRouting carries topic, qos, retained

open

FEAT_0036

REQ_0252

QoS 0 and 1 supported

open

FEAT_0036

REQ_0253

Retained-message publish supported

open

FEAT_0036

REQ_0254

Wildcard subscriptions supported

open

FEAT_0036

REQ_0255

Username/password authentication

open

FEAT_0036

REQ_0256

TLS is optional via cargo feature

open

FEAT_0036

REQ_0257

MQTT 3.1.1 baseline

open

FEAT_0036

REQ_0258

Tokio sidecar inside the gateway crate

open

FEAT_0036

REQ_0259

Bridge channels are bounded

open

FEAT_0036

REQ_0260

Outbound bridge saturation surfaces as BackPressure

open

FEAT_0036

REQ_0261

Inbound bridge saturation surfaces as DroppedInbound HealthEvent

open

FEAT_0036

REQ_0270

ConnectorHost builder API

open

FEAT_0037

REQ_0271

ConnectorGateway builder API

open

FEAT_0037

REQ_0272

Host registers connector items with the executor

open

FEAT_0037

REQ_0273

Optional Observer adapter for tracing

open

FEAT_0037

REQ_0290

NO request/response matching by the framework

rejected

FEAT_0030

REQ_0291

NO app↔gateway control plane

rejected

FEAT_0030

REQ_0292

NO persistent outbox or durable buffering

rejected

FEAT_0030

REQ_0293

NO schema/contract enforcement across the boundary

rejected

FEAT_0030

REQ_0294

NO protocol-portable Channel<T>

rejected

FEAT_0030

REQ_0295

NO multi-broker / multi-tenant gateway

rejected

FEAT_0030

REQ_0296

NO supervision / panic recovery

rejected

FEAT_0030

REQ_0300

Pre-allocated fixed-block arena

open

FEAT_0040

REQ_0301

Fail-closed on cap overrun

open

FEAT_0040

REQ_0302

Lock-after-init panic mode

open

FEAT_0040

REQ_0303

Allocation accounting API

open

FEAT_0040

REQ_0304

Thread-safe allocation

open

FEAT_0040

REQ_0310

EthercatConnector implements Connector

open

FEAT_0041

REQ_0311

EthercatRouting carries SubDevice and PDO addressing

open

FEAT_0041

REQ_0312

Single MainDevice per gateway instance

open

FEAT_0041

REQ_0313

Bus reaches OP before serving traffic

open

FEAT_0041

REQ_0314

Static PDO mapping per SubDevice

open

FEAT_0041

REQ_0315

PDO mapping applied during PRE-OP to SAFE-OP transition

open

FEAT_0041

REQ_0316

Cycle time configurable with millisecond resolution

open

FEAT_0041

REQ_0317

Missed cycle ticks are skipped not queued

open

FEAT_0041

REQ_0318

Distributed Clocks bring-up is opt-in

open

FEAT_0041

REQ_0319

Working-counter-based health policy

open

FEAT_0041

REQ_0320

Working-counter mismatch degrades health

open

FEAT_0041

REQ_0321

Tokio sidecar contained inside the connector crate

open

FEAT_0041

REQ_0322

Bridge channels are bounded

open

FEAT_0041

REQ_0323

Outbound bridge saturation surfaces as BackPressure

open

FEAT_0041

REQ_0324

Inbound bridge saturation surfaces as DroppedInbound HealthEvent

open

FEAT_0041

REQ_0325

Linux raw socket required on gateway host

open

FEAT_0041

REQ_0326

Outbound payload written to PDI bit slice per routing

open

FEAT_0041

REQ_0327

Inbound payload read from PDI bit slice per routing

open

FEAT_0041

REQ_0328

Per-channel routing registry on the gateway

open

FEAT_0041

REQ_0400

ZenohConnector implements Connector

open

FEAT_0043

REQ_0401

ZenohRouting carries key_expr and pub/sub QoS fields

open

FEAT_0043

REQ_0402

JsonCodec is the default codec for Zenoh

open

FEAT_0043

REQ_0403

Tokio sidecar contained inside the Zenoh connector crate

implemented

FEAT_0043

REQ_0404

Zenoh bridge channels are bounded

open

FEAT_0043

REQ_0405

Outbound bridge saturation surfaces as BackPressure

open

FEAT_0043

REQ_0406

Inbound bridge saturation surfaces as DroppedInbound

open

FEAT_0043

REQ_0407

Zenoh zero-copy publish via iceoryx2 loan

open

FEAT_0043

REQ_0408

Zenoh gateway is byte-only on the inbound publish path

open

FEAT_0043

REQ_0420

ZenohConnector exposes create_querier and create_queryable

open

FEAT_0044

REQ_0421

ZenohQuerier maps QueryId to envelope correlation_id

open

FEAT_0044

REQ_0422

ZenohQueryable correlates replies via correlation_id

open

FEAT_0044

REQ_0423

Multi-reply per query supported

open

FEAT_0044

REQ_0424

Reply stream end-of-stream framed in payload

open

FEAT_0044

REQ_0425

Query timeout sourced from options, overridable per-querier

open

FEAT_0044

REQ_0426

terminate(id) finalizes the upstream zenoh::Query

open

FEAT_0044

REQ_0427

Codec applied to Q on send and to R on reply

open

FEAT_0044

REQ_0428

Reply-side inbound saturation emits DroppedInbound

open

FEAT_0044

REQ_0440

Zenoh session mode is a config knob

open

FEAT_0045

REQ_0441

NO ReconnectPolicy on Zenoh session loss

rejected

FEAT_0045

REQ_0442

HealthEvent emitted on every Zenoh session transition

implemented

FEAT_0045

REQ_0443

Connect and listen locators surfaced to zenoh::Config

open

FEAT_0045

REQ_0444

zenoh-integration cargo feature gates the real zenoh dep

implemented

FEAT_0045

REQ_0445

MockZenohSession ships unfeature-gated

implemented

FEAT_0045

REQ_0446

Linux, macOS, and Windows are supported host operating systems

implemented

FEAT_0045

REQ_0500

Pure parse function with no I/O

open

FEAT_0051

REQ_0501

no_std + alloc compatible

open

FEAT_0051

REQ_0502

quick-xml + serde backend

open

FEAT_0051

REQ_0503

Parser does not depend on ethercrab or codegen

open

FEAT_0051

REQ_0504

IR carries identity, PDO maps, mailbox, DC, and OD

open

FEAT_0051

REQ_0505

Vendor-specific extensions captured as opaque blobs

open

FEAT_0051

REQ_0506

Parse errors carry line and column

open

FEAT_0051

REQ_0510

CodegenBackend trait shape

open

FEAT_0052

REQ_0511

Naming policy is owned by codegen, not the backend

open

FEAT_0052

REQ_0512

Revision collision handled deterministically

open

FEAT_0052

REQ_0513

Common PDO entry types deduplicated

open

FEAT_0052

REQ_0514

Emission target is proc_macro2 TokenStream

open

FEAT_0052

REQ_0520

Backend crate is the sole ethercrab dependency

open

FEAT_0053

REQ_0521

One device struct per ESI device entry

open

FEAT_0053

REQ_0522

SubDeviceIdentity const emitted per device

open

FEAT_0053

REQ_0523

PDO assignment alternatives emitted as sum type

open

FEAT_0053

REQ_0524

One PDO struct per assignment alternative

open

FEAT_0053

REQ_0525

Generated module root exposes a registry

open

FEAT_0053

REQ_0526

Generated code compiles under no_std + alloc

open

FEAT_0053

REQ_0530

EsiDevice trait shape

open

FEAT_0054

REQ_0531

EsiConfigurable trait shape for preop bring-up

open

FEAT_0054

REQ_0532

Traits live in ethercat-esi-rt, not taktora-connector

open

FEAT_0054

REQ_0533

Object dictionary emission is a default-off cargo feature

open

FEAT_0054

REQ_0534

Process image access via bitvec BitSlice

open

FEAT_0054

REQ_0540

Builder API shape

open

FEAT_0055

REQ_0541

Output written to OUT_DIR

open

FEAT_0055

REQ_0542

Cargo rerun-if directives emitted per ESI input

open

FEAT_0055

REQ_0543

Generated output passes through prettyplease

open

FEAT_0055

REQ_0550

cargo esi expand emits one device's generated code

open

FEAT_0056

REQ_0551

cargo esi list enumerates devices in a glob

open

FEAT_0056

REQ_0552

CLI shares the parser and codegen crates

open

FEAT_0056

REQ_0560

Verifier ingests ESI XML plus SII binary

open

FEAT_0057

REQ_0561

Diagnostic output names the differing field

open

FEAT_0057

REQ_0562

Verifier reuses the parser

open

FEAT_0057

REQ_0563

Verifier exits non-zero on mismatch

open

FEAT_0057

REQ_0590

NO CAN / CANopen / EDS support in this round

rejected

FEAT_0050

REQ_0591

NO proc-macro front-end

rejected

FEAT_0050

REQ_0592

NO unification of EtherCAT and CANopen runtime traits

rejected

FEAT_0050

REQ_0593

NO runtime XML parsing

rejected

FEAT_0050

REQ_0594

NO modification of taktora-connector-ethercat runtime

rejected

FEAT_0050

REQ_0595

NO automatic vendor library scraping

rejected

FEAT_0050

REQ_0600

CanConnector implements Connector

open

FEAT_0046

REQ_0601

CanRouting carries iface, can_id, mask, kind, fd_flags

open

FEAT_0046

REQ_0602

Linux is the supported host OS for real I/O

open

FEAT_0046

REQ_0603

socketcan-integration cargo feature gates the real socketcan dep

open

FEAT_0046

REQ_0604

MockCanInterface ships unfeature-gated

open

FEAT_0046

REQ_0605

Tokio sidecar contained inside the CAN connector crate

open

FEAT_0046

REQ_0606

CAN bridge channels are bounded

open

FEAT_0046

REQ_0607

Outbound bridge saturation surfaces as BackPressure

open

FEAT_0046

REQ_0608

Inbound bridge saturation surfaces as DroppedInbound

open

FEAT_0046

REQ_0610

Classical CAN frames supported

open

FEAT_0047

REQ_0611

CAN-FD frames supported

open

FEAT_0047

REQ_0612

Channel payload sizing keyed on frame kind

open

FEAT_0047

REQ_0613

Outbound payload serialised to socketcan frame

open

FEAT_0047

REQ_0614

Inbound gateway is byte-only on the publish path

open

FEAT_0047

REQ_0615

CAN ID extended flag preserved end-to-end

open

FEAT_0047

REQ_0620

Multiple interfaces per gateway

open

FEAT_0048

REQ_0621

Routing identifies the interface

open

FEAT_0048

REQ_0622

Per-interface filter is the union of channel masks

open

FEAT_0048

REQ_0623

Filter recomputed on channel add/remove

open

FEAT_0048

REQ_0624

Inbound demux to all matching readers

open

FEAT_0048

REQ_0625

Per-iface routing registry has stable iteration order

open

FEAT_0048

REQ_0630

ConnectorHealth aggregates per-iface state via worst-of

open

FEAT_0049

REQ_0631

Error frames consumed internally

open

FEAT_0049

REQ_0632

error-passive transitions to Degraded

open

FEAT_0049

REQ_0633

bus-off transitions to Down and triggers reconnect

open

FEAT_0049

REQ_0634

ReconnectPolicy reused; ExponentialBackoff default

open

FEAT_0049

REQ_0635

HealthEvent emitted on every transition

open

FEAT_0049

REQ_0636

Error frames not exposed to plugin

open

FEAT_0049

REQ_0640

NO DBC parsing or typed signal extraction in taktora-connector-can

rejected

FEAT_0046

REQ_0641

NO ISO-TP or J1939 support in taktora-connector-can

rejected

FEAT_0046

REQ_0642

NO CAN-XL support

rejected

FEAT_0046

REQ_0643

NO plugin-visible error-frame channel

rejected

FEAT_0049

REQ_0644

NO can-restart-ms management from the gateway

rejected

FEAT_0049

REQ_0700

No transport-specific types in fieldbus-od-core

open

FEAT_0061

REQ_0701

no_std + alloc, no mandatory serde

open

FEAT_0061

REQ_0702

OD type surface

open

FEAT_0061

REQ_0703

ethercat-esi re-exports lifted types

open

FEAT_0061

REQ_0704

canopen-eds uses fieldbus-od-core types

open

FEAT_0061

REQ_0720

Pure parse function with no I/O

open

FEAT_0062

REQ_0721

no_std + alloc, no upstream coupling

open

FEAT_0062

REQ_0722

serde-derive INI backend

open

FEAT_0062

REQ_0723

Parse errors carry line and column

open

FEAT_0062

REQ_0724

Unknown sections captured as RawSection

open

FEAT_0062

REQ_0725

Liberal parsing — warn and continue on quirks

open

FEAT_0062

REQ_0726

IR carries identity, OD, PDO comm + maps

open

FEAT_0062

REQ_0730

CodegenBackend trait shape

open

FEAT_0063

REQ_0731

Naming policy is owned by codegen, not the backend

open

FEAT_0063

REQ_0732

Revision collision handled deterministically

open

FEAT_0063

REQ_0733

Common PDO entry types deduplicated

open

FEAT_0063

REQ_0734

Emission target is proc_macro2 TokenStream

open

FEAT_0063

REQ_0735

One EDS file equals one device

open

FEAT_0063

REQ_0740

Backend crate is the sole canopen-eds-rt dependency

open

FEAT_0064

REQ_0741

One device struct per EDS file

open

FEAT_0064

REQ_0742

Identity const emitted per device

open

FEAT_0064

REQ_0743

PDO declarations emitted as sum types

open

FEAT_0064

REQ_0744

Dummy entries skipped in PDO payload structs

open

FEAT_0064

REQ_0745

Generated module root exposes a registry

open

FEAT_0064

REQ_0746

Bring-up SDO writes emitted from EDS

open

FEAT_0064

REQ_0747

Object dictionary emission is a default-off cargo feature

open

FEAT_0064

REQ_0748

Generated code compiles under no_std + alloc

open

FEAT_0064

REQ_0750

CanOpenDevice trait shape

open

FEAT_0065

REQ_0751

CanOpenConfigurable trait shape for bring-up

open

FEAT_0065

REQ_0752

Traits live in canopen-eds-rt, not taktora-connector-can

open

FEAT_0065

REQ_0753

Frame payloads use heapless::Vec<u8, 8>

open

FEAT_0065

REQ_0754

Frame-per-PDO dispatch shape

open

FEAT_0065

REQ_0755

CanOpenError variant surface

open

FEAT_0065

REQ_0756

RPDO rejected outside Operational state

open

FEAT_0065

REQ_0760

Builder API shape

open

FEAT_0066

REQ_0761

Output written to OUT_DIR

open

FEAT_0066

REQ_0762

Cargo rerun-if directives emitted per EDS input

open

FEAT_0066

REQ_0763

Generated output passes through prettyplease

open

FEAT_0066

REQ_0764

Parser warnings surface as cargo warnings

open

FEAT_0066

REQ_0770

cargo eds expand emits one device's generated code

open

FEAT_0067

REQ_0771

cargo eds list enumerates devices in a glob

open

FEAT_0067

REQ_0772

CLI shares the parser and codegen crates

open

FEAT_0067

REQ_0780

Verifier ingests EDS plus JSON SDO-dump

open

FEAT_0068

REQ_0781

Diagnostic output names the differing field

open

FEAT_0068

REQ_0782

Verifier reuses the parser

open

FEAT_0068

REQ_0783

Verifier exits non-zero on mismatch

open

FEAT_0068

REQ_0784

SDO-dump JSON schema versioned

open

FEAT_0068

REQ_0790

NO DCF support this round

rejected

FEAT_0060

REQ_0791

NO CAN-FD payload support in PdoOut

rejected

FEAT_0060

REQ_0792

NO proc-macro front-end

rejected

FEAT_0060

REQ_0793

NO unification of EtherCAT and CANopen runtime traits

rejected

FEAT_0060

REQ_0794

NO runtime EDS parsing

rejected

FEAT_0060

REQ_0795

NO modification of taktora-connector-can runtime

rejected

FEAT_0060

REQ_0796

NO automatic vendor library scraping

rejected

FEAT_0060

REQ_0797

NO live-bus verifier this round

rejected

FEAT_0060