Anti-goals and cross-cutting traceability

The following requirements are explicitly rejected — captured for the record so future readers see what the toolchain deliberately does not do, and why. Each rejected requirement :satisfies: Device-driver codegen toolc... (FEAT_0050) to keep the umbrella’s traceability complete.

Requirement: NO CAN / CANopen / EDS support in this round REQ_0590
status: rejected
satisfies: FEAT_0050

The toolchain shall not include a CAN parser, a CANopen runtime trait, an EDS / XDD reader, or a SocketCAN backend. CANopen and EtherCAT’s CoE share the Object Dictionary semantics, but transport semantics diverge (cyclic PDI vs event-driven frames). A follow-on spec extracts a shared fieldbus-od-core IR once a concrete CANopen device is in scope; see Future CANopen support via ... (ADR_0073).

Requirement: NO proc-macro front-end REQ_0591
status: rejected
satisfies: FEAT_0050

The toolchain shall not offer an esi_device!("EL3001.xml") proc-macro form. The IDE-discoverability gain does not justify the doubled codegen surface or the worse compile-time profile for what is effectively a one-time generation step per device set. cargo esi expand (cargo esi expand emits one ... (REQ_0550)) covers the inspection use case.

Requirement: NO unification of EtherCAT and CANopen runtime traits REQ_0592
status: rejected
satisfies: FEAT_0050

When CANopen support is added in a follow-on spec, the runtime trait family shall not be merged with EsiDevice / EsiConfigurable. EtherCAT’s cyclic-bit-buffer model and CANopen’s event-driven-frame model are different transport semantics; forcing them into one trait would leak a fake “process image” into CANopen and mis-model event-triggered TPDOs.

Requirement: NO runtime XML parsing REQ_0593
status: rejected
satisfies: FEAT_0050

The toolchain shall not parse ESI XML at application runtime. All XML parsing happens at build time in ethercat-esi-build or in the CLI tools. Consumers of the generated modules shall not need to ship XML files alongside their binary.

Requirement: NO modification of taktora-connector-ethercat runtime REQ_0594
status: rejected
satisfies: FEAT_0050

This spec shall not require any change to the runtime contracts of EtherCAT reference connector (FEAT_0041) “EtherCAT reference connector”. The connector consumes EsiDevice through a thin adapter (see ethercat-esi-verify (EEPROM... (BB_0066)); it does not become aware of XML or codegen.

Requirement: NO automatic vendor library scraping REQ_0595
status: rejected
satisfies: FEAT_0050

The toolchain shall not download, scrape, or otherwise fetch ESI XML from vendor websites or update servers. ESI files are inputs the user drops into a esi/ directory; provenance is the user’s responsibility.


Cross-cutting traceability

Every requirement in this chapter (excluding rejected anti-goals) carries a :satisfies: link to its capability-cluster feat; every cluster feat :satisfies: Device-driver codegen toolc... (FEAT_0050). Architectural specifications refining these requirements are emitted in Device-driver codegen — architecture (arc42). Verification artefacts are emitted in Device-driver codegen — verification.

Used filter: types(feat)

ID

Title

Status

Satisfies

FEAT_0050

Device-driver codegen toolchain

open

FEAT_0051

ESI parser

implemented

FEAT_0050

FEAT_0052

IR and codegen backend trait

open

FEAT_0050

FEAT_0053

ethercrab codegen backend

open

FEAT_0050

FEAT_0054

Runtime trait surface

open

FEAT_0050

FEAT_0055

Build helper (build.rs glue)

open

FEAT_0050

FEAT_0056

CLI inspection (cargo subcommand)

open

FEAT_0050

FEAT_0057

EEPROM diff verification

open

FEAT_0050

Used filter: types(req)

ID

Title

Status

Satisfies

REQ_0500

Pure parse function with no I/O

implemented

FEAT_0051

REQ_0501

no_std + alloc compatible

rejected

FEAT_0051

REQ_0502

quick-xml + serde backend

implemented

FEAT_0051

REQ_0503

Parser does not depend on ethercrab or codegen

implemented

FEAT_0051

REQ_0504

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

implemented

FEAT_0051

REQ_0505

Vendor-specific extensions captured as opaque blobs

implemented

FEAT_0051

REQ_0506

Parse errors carry line and column

implemented

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

Identity const emitted per device

open

FEAT_0053

REQ_0523

Selectable PDO assignments emitted as a joint per-device OpMode enum

implemented

FEAT_0053

REQ_0524

Each OpMode variant carries a per-mode inputs/outputs data struct

implemented

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_0527

Default PDO assignment derived from Sm/Mandatory, not Fixed

implemented

FEAT_0053

REQ_0528

Per-active-mode Rx/Tx PDO-index lists exposed for 0x1C12/0x1C13

implemented

FEAT_0053

REQ_0529

AlternativeSmMapping captured faithfully, never resolved

implemented

FEAT_0051

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_0535

SdoWrite abstraction keeps ethercrab out of the trait crate

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